Pod的创建过程原理
Pod的创建过程原理
- 首先,用户通过kubectl或web端向APIServer发送创建pod的请求;
- APIServer会做出认证/鉴权响应,然后检查信息并把数据存储到ETCD里,创建Deployment资源并初始化;
- controller-manager通过list-watch机制,检查发现新到Deployment,将资源加入到内部工作队列,然后检查发现资源没有关联的pod和replicaset,启用Deployment controller创建replicaset资源,再通过replicaset controller创建pod。
- controller-manager创建完成后将Deployment,replicaset,pod资源更新存储到etcd;
- scheduler也是通过list-watch机制,监测发现新的pod,并通过预选及优选策略算法,来计算出pod最终可调度的node节点,并通过APIServer将数据更新至etcd;
- kubectl 每隔20s(可以自定义)向APIServer通过NodeName获取自身Node上所要运行的pod清单;通过与自己内部缓存进行比较,如果有新的资源则触发钩子调用CNI接口给pod创建pod网络,调用CRI接口去启动容器,调用CSI进行存储卷的挂载,然后启动pod容器;
- kube-proxy为新创建的pod注册动态DNS到CoreOS。给pod的service添加iptables/ipvs规则,用于服务发现和负载均衡;
- Controller通过control loop(控制循环)将当前pod状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行会将此pod删掉,然后重新创建pod。