一、流程图
Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。
二、具体过程
0.kubectl apply -f pod.yaml
1.kubectl将yaml文件转换为json,提交给apiserver,apiserver通过kubeconfig进行认证,将Pod信息存储到etcd中
2.scheduler通过list watch机制监听到创建新Pod的事件,根据Pod属性决定调度到哪个Node上,Pod属性包括请求的CPU/内存大小、nodeSelector、亲和性、污点容忍等,同时给Pod打标签指明调度到具体哪个节点,可以通过kubectl get pod -owide
查看
3.apiserver拿到调度结果并写入到etcd中
4.kubelet从apiserver获取分配到其所在节点的Pod
5.kubelet调用CNI接口创建Pod网络,调用CSI进行存储卷挂载,调用CRI接口启动容器
6.Docker把容器的状态汇报给kubelet
7.kubelet将Pod状态更新到apiserver,apiserver将状态信息写到etcd中
8.kubectl get pod
三、Pod事件
从事件可以看到首先会把Pod调度到Node,其次拉取镜像,最后创建并启动容器