Appearance
pod创建流程
创建pod的完整流程
0、controller-manager组件、scheduler组件、kubelet组件都watch监听apiserver、监听自己的关注的资源状态
只要有更新,apiserver就会上报该更新给对应的组件
1、客户端命令kubectl提交创建pod的请求(该pod的控制器采用Replicaset)
2、apiserver收到该请求,会把创建replicaset的请求写入etcd
3、上报事件replicaset created
4、controller-mamanger收到replicaset created事件,进入调谐阶段
controller-mamanger发现当前该pod是0副本,预期要创建1个副本
5、所以controller-mamanger发起要创建一个pod的请求给apiserver
6、apiserver将创建pod的事件存入etcd中
7、apiserver上报Pod created事件
8、scheduler组件收到Pod created事件(因为scheduler一直watch着该资源的变动)
scheduler经过预选与优选来选出一台合适的物理节点来创建新pod
9、scheduler把调度结果(要在某一台物理节点上创建新pod)发送给apiserver
10、将事件存入etcd中
11、上报该事件
12、某一个物理节点上的kubelet会收到该事件,进入pod创建环节
13、kubelet会调用容器引擎以及网络插件创建出pod
(1)kubelet会先调用容器引擎创建出一个pause容器
(2)然后kubelet会调用网络插件来把pause容器的网络打通
(3)kubelet会调用容器引擎来创建出业务容器,并且业务容器采用的container网络模式
与pause容器共享网络
补充:关于kubelet如何对接容器引擎的详细如下
如果kubelet对接的docker引擎,对接流程如下
kubelet –> docker shim (在 kubelet 进程中) –> dockerd –> containerd
如果kubelet对接的containerd引擎,对接流程如下
kubelet –> cri plugin(在 containerd 进程中) –> containerd