一、Pod创建过程

Day01-kubernetes基础架构解读-图6

1、首先,用户通过kubectl或web端向apiserver发送创建pod请求。

2、apiserver会做出认证/鉴权响应,然后检查信息并把数据存储到ETCD里,创建deployment资源并初始化。

3、controller-manager通过list-watch机制,检查发现新到deployment,将资源加入到内部工作队列,然后检查发现资源没有关联的pod和replicaset,启用 deployment controller创建replicaset资源,再通过replicaset controller创建 pod。

4、controller-manager创建完成后将deployment,replicaset,pod资源更新存储到etcd;

5、scheduler也是通过list-watch机制,监测发现新的pod,并通过预选及优选策略算法,来计算出pod最终可调度的node节点,并通过apiserver将数据更新至etcd;

6、kubelet每隔20s(可以自定义)向apiserver通过NodeName获取自身Node上所要运行的pod清单;通过与自己的内部缓存进行比较,如果有新的资源则触发钩子调用CNI接口给pod创建pod网络,调用CRI接口去启动容器,调用CSI进行存储卷的挂载,然后启动pod容器;

7、kube-proxy为新创建的pod注册动态DNS到CoreDNS。给pod的service添加 iptables/ipvs规则,用于服务发现和负载均衡;

8、controller通过control loop(控制循环)将当前pod状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行会将此pod删掉,然后重新创建pod;