K8s API Server原理深度解释及复习

这篇具有很好参考价值的文章主要介绍了K8s API Server原理深度解释及复习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

K8s API Server原理深度解释及复习,k8s学习指南,容器,kubernetes,云原生,微服务,kubelet

在详解之前我们再来回忆一下架构图和前面说过一点的内容。

k8s可以管理分布式分布式集群中的微服务和容器化程序,并且提供了停机时间部署、自动回滚、资源缩放和容器的自愈等功能。

其中有自动配置、自动重启、复制的高弹性基础设施

其实它重要的设计因素之一是能够横向扩展意思就是高可用性提高了。

设计者这样大型的系统架构,且保证“运行时”健壮、可扩展、移植是具有挑战性的,因为体系结构会直接影响其运行方式和对环境的依赖程度及相关组件的耦合程度。

在这一体系之下的微服务,它是一种软件设计模式,适用于集群中的可扩展部署。

开发人员使用这一模式能够创建小型、可组合的应用程序,通过定义良好的HTTP REST API接口进行通信。Kubernetes也是遵循微服务架构模式的程序,具有弹性、可观察性和管理功能,可以适应云平台的需求。

复习

Kubernetes系统架构遵循客户端/服务端(C/S)架构,系统架构分为Master和Node两部分,Master作为服务端,Node作为客户端。Kubernetes系统具有多个Master服务端,可以实现高可用。在默认的情况下,一个Master服务端即可完成所有工作。

Master服务端也被称为主控节点,它在集群中主要负责如下任务。

(1)集群的“大脑”,负责管理所有节点(Node)。

(2)负责调度Pod在哪些节点上运行。

(3)负责控制集群运行过程中的所有状态。

Node客户端也被称为工作节点,它在集群中主要负责如下任务。

(1)负责管理所有容器(Container)。

(2)负责监控/上报所有Pod的运行状态。

Master服务端(主控节点)主要负责管理和控制整个Kubernetes集群,对集群做出全局性决策,相当于整个集群的“大脑”。集群所执行的所有控制命令都由Master服务端接收并处理。Master服务端主要包含如下组件。

● kube-apiserver组件:集群的HTTP REST API接口,是集群控制的入口。

它将Kubernetes“资源组/资源版本/资源”以RESTful的形式对外暴露并提供服务。
Kubernetes集群中的所有组件都通过kube-apiserver组件操作资源对象。kube-apiserver组件也是集群中唯一与Etcd集群进行交互的核心组件。

● kube-controller-manager组件:集群中所有资源对象的自动化控制中心。

● kube-scheduler组件:集群中Pod资源对象的调度服务。

Node客户端(工作节点)是Kubernetes集群中的工作节点,Node节点上的工作由Master服务端进行分配,比如当某个Node节点宕机时,Master节点会将其上面的工作转移到其他Node节点上。Node节点主要包含如下组件。

● kubelet组件:负责管理节点上容器的创建、删除、启停等任务,与Master节点进行通信。

● kube-proxy组件:负责Kubernetes服务的通信及负载均衡服务。

● container组件:负责容器的基础管理服务,接收kubelet组件的指令。

因为深入理解,所以我会尽量高强度详细描述组件原理

kube-apiserver

其一、概述

众所周知它运行在master节点上,在默认情况下kube-apiserver进程在本机的8080端口(对应参数
–insecure-port)提供REST服务。

并可以同时启动https安全端口(–secure-port=6443)来启动安全机制,加强rest api访问的安全性

除了大架构之下,还有小架构,就像生态圈一样,一层围着一层相互制衡,组件与组件之间也是相互配合,也有部分的耦合性

其二、架构白话

K8s API Server原理深度解释及复习,k8s学习指南,容器,kubernetes,云原生,微服务,kubelet

API Server的架构可以分为四层和一个监听机制
简单来说,Kubernetes API Server就像是集群的大脑中枢和通讯中心,它的运作机制相当关键:

  1. API层:就像一个大管家,它对外开放了一套标准的RESTful API接口,任何想要跟集群打交道的家伙(无论是人还是机器)都可以通过这套接口来操控Kubernetes里面的各种东西。

比如创建新的Pod、查看正在运行的服务、更新应用部署或者删除不再需要的资源等。同时,它还提供了一些实用工具,帮助我们查看集群的健康状况、日志信息和性能指标,便于日常管理和维护。

  1. 访问控制层:扮演着门卫的角色,确保只有合法的用户才能进行操作,且只能做他们权限范围内的事。API Server会验证每个请求的来源,看看是不是得到了正确的授权。这就好比是拿着通行证进入,不同级别的通行证允许你进入不同的区域,也就是采用了角色基础的访问控制(RBAC)策略

想必这个策略大家也是第一次见,别担心我们下次还会讲到,到时候就会恍然大悟了

  1. 注册表层:想象一下是一个巨大的账本,记录着Kubernetes里的所有资源对象,每个对象的种类、出生到消亡的过程以及不同版本间的变换规则都在这里得到定义和管理。这些资源对象还会被翻译成计算机容易理解的语言(比如JSON或ProtoBuf格式)进行存储和传输。

  2. etcd数据库:就像是集群的记忆库,所有资源对象的状态信息都被保管在这里,永不丢失。API Server跟etcd保持着紧密联系,每当记忆库里有任何风吹草动(即资源状态发生变化),etcd都会立刻告诉API Server。


K8s API Server原理深度解释及复习,k8s学习指南,容器,kubernetes,云原生,微服务,kubelet

List-Watch机制

为了让大家都能及时知道集群里发生了什么新鲜事,API Server采用了一种叫List-Watch的通知方式。
其他的Kubernetes组件们先向API Server要份当前的“快照”(资源全量数据),再设置“提醒”(Watch)

这样只要有资源更新、添加或删除,API Server就会马上把消息推送给关注的组件们,组件们收到消息后就可以迅速地在本地更新自己的“小抄”(缓存)。

这样一来,集群内的各个部分就能够在几乎实时的情况下保持数据同步,协同工作起来既准确又高效。

总之,Kubernetes API Server运用了一套精巧的设计,尤其是借助etcd的实时监听功能,搭建起了一个反应灵敏、稳定可靠的资源管理平台,使得整个集群能够顺畅无阻地进行复杂的应用编排和管理任务。

总结

实践说明

  1. etcd数据库今天只是简述,他大概有许久的篇幅,为了大家不看长篇大论所以就留在后边单节篇章讲解

  2. 还有一个关于api url的实践,这里简单的说明一下,后期组件原理讲完教大家部署再来实践
    比如

  • curl localhost:8080/api
  • curl localhost:8080/api/v1/replicationcontrillers
  1. 架构之下还有一个独特的Kubernetes Proxy API接口
    在Kubernetes的世界里,API Server可不仅仅是个简单的数据交换中心,它还拥有特殊技能——代理请求。我们知道,API Server最基本的功能就是处理关于集群内各种资源对象(像Pod、Service那些)的增删改查操作,但更酷的是,它还能化身成为“信使”,通过Proxy API接口传递消息。

想象一下,当你想直接和集群内的某个Node上的kubelet守护进程交流时,无需亲自找到那个Node,只需通过Kubernetes API Server发个请求就行。

具体来说,你可以发起一个特殊的REST请求到API Server,比如请求路径可能是这样的:“/api/v1/nodes//proxy/”,后面跟着你想让kubelet执行的具体服务或端口路径。

举个例子,如果你想查看某个Node上kubelet提供的Pods列表,你不需要直接连接到那个Node,而是可以通过API Server发送如下请求:

curl localhost:8080/api/v1/nodes/node1/proxy/api/v1/pods

在这个请求中,API Server就像一个贴心的中介,它接收到你的请求后,并不会自己去查找Pod列表,而是聪明地帮你把这个请求“转寄”给了目标Node上的kubelet守护进程。
K8s API Server原理深度解释及复习,k8s学习指南,容器,kubernetes,云原生,微服务,kubelet

kubelet收到这个请求后,便会返回你需要的信息,这样我们就能够间接地与集群内的各个kubelet通信,大大方便了集群管理和监控。这就是Kubernetes Proxy API接口在实际场景中的作用。

Kubernetes API Server 在整个集群架构中起到至关重要的作用,它是集群内部各组件之间通信的桥梁和数据中心。下面以更通俗的方式解释几个典型交互场景:

1. kubelet 与 API Server 的交互

每台 Node 上的 kubelet 守护进程就像是工兵,定期向 API Server 报告自己所在节点的健康状况和资源使用情况。例如,它可能会说:“嘿,API Server,我这里是 Node A,目前一切正常,CPU 使用率和内存占用是这样的……”。API Server 收到这个状态报告后,会将这些数据妥善保存到集群的共享大脑——etcd 数据库中。

另一方面,kubelet 不仅汇报,还在时刻监听 API Server 发来的命令。就像听广播一样,一旦听到有新的 Pod 被指派到本节点,kubelet 就开始执行指令,启动相应的容器;如果听说某个 Pod 不再需要运行,kubelet 就会结束本地容器的生命周期;若接收到 Pod 配置的更改信息,kubelet 还会按照指示调整容器的运行参数。

2. kube-controller-manager 与 API Server 的交互

kube-controller-manager 中的 Node Controller 更像是一个监控员,它通过 API Server 设置的警报系统(Watch 接口)实时盯着所有节点的动静。一旦发现某个节点出状况(比如离线或者资源紧张),它就会触发相应的恢复措施,保证集群的稳定性。

3. kube-scheduler 与 API Server 的交互

kube-scheduler 担任调度员的角色,它密切关注 API Server 发布的“待安排任务”——新创建的 Pod。一旦有新的 Pod 出现,scheduler 便开始忙碌起来,根据预设的调度策略筛选出最合适的 Node,并通过 API Server 安排 Pod 到达选定的位置运行。

为了提高集群整体效率和降低 API Server 的负载,各个组件都有各自的“笔记本”——本地缓存,它们会定期或按需从 API Server 获取最新数据,并将这些数据暂存在本地。

这样,在大部分时候,组件可以直接查阅本地缓存来获取所需信息,避免频繁直接访问 API Server,从而优化了集群内部的通信效率和响应速度。

而 List-Watch 机制正是实现这一高效数据同步的关键技术手段,组件不仅可以一次性拉取全部数据(List),还可以持续监听数据变化(Watch),做到及时、准确地更新本地缓存。文章来源地址https://www.toymoban.com/news/detail-850612.html

到了这里,关于K8s API Server原理深度解释及复习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s 在创建pod时api-server是先找scheduler 还是controller-manager

    在K8s中,创建Pod时的流程如下: 用户通过Kubectl或其他方式向API Server发送创建Pod的请求。 API Server接收到请求后,会先进行权限验证和身份认证。 一旦验证通过,API Server会将请求转发给Scheduler组件。 Scheduler负责对新创建的Pod进行调度,即确定将该Pod调度到哪个节点上运行。

    2024年02月11日
    浏览(36)
  • java 对接 k8s API、K8s基本架构、k8s常用命令

    引言: 当容器部署涉及到 多个节点 服务器,用docker、docker-compose 来部署就不是那么方便了,不能统一控制,不方便伸缩,配置统一管理、版本控制;当我们业务涉及到集群容器部署时,就考虑K8s、K3s 来实现。 k8s 架构组成: (一)Master :apiserver、scheduler、controller-manager 以

    2024年02月16日
    浏览(39)
  • [k8s] 常见yml配置和详细解释

    在 Kubernetes (K8s) 中,常见的 YAML 文件配置包括: 在 Kubernetes 中,服务是一种抽象,用于公开 Pod 或一组 Pod 提供的应用程序或功能。通过服务,其他组件可以无需了解具体 Pod 的 IP 地址和端口而直接与应用程序进行通信。服务可以通过多种方式公开,包括 ClusterIP、NodePort 和

    2024年02月07日
    浏览(31)
  • [K8S]error execution phase preflight: couldn‘t validate the identity of the API Server

    用kubeadm工具,k8s使用kubeadm join将工作节点加入到主控节点的时候遇到如下问题,执行命令卡顿很久后报错 [root@k8s2 ~]# kubeadm join 192.168.0.180:6443 --token uyylx2.7z02nonw8xgprh5y --discovery-token-ca-cert-hash sha256:0c81e2684c99b6af608f6cdc77c0a81a2d5284d72bcf3353d25fa37bd46839e2 --ignore-preflight-errors=SystemVerifi

    2024年02月05日
    浏览(99)
  • k8s简介、虚拟机快速搭建k8s集群、集群管理方式及K8S工作原理和组件介绍

    1.1、部署方式的变迁 传统部署时代: 在物理服务器上运行应用程序 无法为应用程序定义资源边界 导致资源分配问题 例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况, 结果可能导致其他应用程序的性能下降。 一种解决方案是

    2024年02月12日
    浏览(69)
  • k8s之API接口访问

    1.1 API是什么? API(Application Programming Interface,应用程序接口): 是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

    2024年02月06日
    浏览(60)
  • k8s 自身原理 1

    咱们从 pod 一直分享到最近的 Statefulset 资源 ,到现在好像我们只是知道如何使用 k8s,如何按照 k8s 设计好的规则去应用,去玩 k8s 仔细想想, 对于 k8s 自身的内在原理 ,我们好像还不是很清楚,对于每一个资源背后是如何实现的,我们好像也不得而知 或许也就只知道 k8s 是

    2024年02月13日
    浏览(38)
  • K8S | 核心原理分析

    目录 一、背景 二、持续集成 三、K8S架构 1、核心组件 2、分层结构 3、核心能力 3.1 发现与负载 3.2 调度 3.3 自动伸缩 四、应用案例 1、服务部署 2、交互流程 五、参考源码 整体上理解流程和原理; 基于分布式的架构中,需要管理的服务是非常多的,无论是服务的数量还是体

    2024年02月08日
    浏览(60)
  • k8s 自身原理 4

    前面咱们分享了 mater 和 worker 节点里面都有哪些组件,他们又是各自主要负责的工作是什么,现在我们心里应该都有数了吧 master 节点 : etcd 存储资源配置,ApiServer 提供 RESTful Api 用于交互,scheduler 用于调度 pod,controller manager 控制器管理器 worker 节点 : kubelet 管理 节点上的

    2024年02月13日
    浏览(36)
  • k8s 自身原理 2

    前面我们说到 K8S 的基本原理和涉及的四大组件,分享了前两个组件 etcd 和 ApiServer 这一次我们接着分享一波: 调度器 scheduler 控制器管理器 controller manager 调度器 ,见名知意,用于调度 k8s 资源的,那么这个调度器具体主要是调度啥资源呢? 实际上看我们 k8s 中运行的一个一

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包