k8s的Pod创建流程

K8S的创建流程

(1)kubectl会将用户的apply命令读取yaml文件发送给Api-server(以Deployment为例)

(2)Api-Server会根据配置创建Deployment资源,存储在ETCD中

(3)Controller-Manager会通过List-Watch机制从Api-server处获取创建资源所需要的数据,如果Deployment资源预先存在,则Controller-Manager会将创建Pod的资源信息传递给Api-server,Api-server会将pod的yaml文件写入ETCD

(4)Kube-Scheduler会通过调度算法选择一个节点给新创建的Pod,也通过Api-server将节点选择信息写回ETCD

(5)kubelet通过List-Watch机制从Api-Server处获取创建的Pod信息,包含资源数据,配置数据等,kubelet会通过CRI接口通知Containerd创建一个新的Pod,Containerd也会通过CRI告知kubelet当前Pod的状态,进一步kubelet告知Api-Server后更新ETCD中Pod的资源状态

创建细节
Api-Server

Api-Server在接受kubectl传进来的参数时,会校验证书是否合法,也会验证参数是否合法,如果不合法则会拒绝请求并返回错误信息
Calico等CNI插件负责为Pod分配IP

Controller-Manager

Controller-Manager监听ApiServer发送的Event(Add Update Delete),watch机制订阅这些事件
Informer组件来监听的,每一个Controller控制器,包括Deployment Controller,ReplicaSet Controller等都会使用Informer组件来监听特定资源的变化。

kube-Scheduler

Kube-Scheduler负责根据Pod的资源需求和当前集群节点的资源状况,为Pod选择一个合适的节点

kubelet

Kubelet通过CRI接口通知containerd拉取Pod需要的镜像,containerd调用runc根据容器定义启动容器
Kubelet也负责定期监听容器状态,并更新到Api-Server
kubelet负责管理节点上的数据卷,使容器能够访问和使用持久化存储,包括存储卷的生命周期(创建,删除,扩容)
确保生成的Pod资源信息中容器镜像存在,容器端口没有冲突等

List-Watch机制

控制器初次启动时会向ApiServer发送List请求,完成初始List请求后,控制器会建立一个Watch长连接,用以监听资源的变化,避免频繁轮询ApiServer

Informer组件:Informer不会去请求Apiserver而是查找本地内存中的数据,依赖ETCD中的List-Watch机制,客户端及时更新indexer本地缓存即可
posted @ 2024-02-28 11:03  付同學  阅读(33)  评论(0编辑  收藏  举报