创建一个新的pods,具体的流程
- 客户端向api server 发送请求创建新的pods
- api server 收到请求后把pods信息存到etcd
- api server 将etcd的内容暴露 这个内容被kube scheduler 监听到
- scheduler 开始尝试给pods 调度到node上, 先是 过滤(各种affinity 和 什么taint之类的) 然后 打分 (ranking)
- scheduler 把结果返回给api server, apiserver会更新信息到etcd , 更新了一个字段
- lastProbeTime: null lastTransitionTime: "2023-06-27T07:17:19Z" status: "True" type: PodScheduled
- 然后节点的kubelet监听api server 发现有pods 该创建,就跟容器运行时去交互,创建对应容器,并且把结果返回给api server
- api server 存储这个信息到etcd , 这里有个问题, 写到etcd后, “API Server将确认信息发送至Kubelet。” 这句话说的对不对啊。。。
上边的节点收到了创建pods的的请求之后,的过程
https://zhuanlan.zhihu.com/p/438357910
- kubelet监控到有pods 需要创建
- kubelet (grpc client)与cri (grpc server)进行沟通, (如果不能直接沟通,就需要cri shim)
- 这里cri会调用到真正的容器服务,一般就是docker或者containerd这里 然后创建真正的容器
流程图