k8s创建pod的详细过程

avatar 2021年4月15日18:05:31 评论 4,955 次浏览

前面一章节已经说了k8s的基本组件以及原理,这个章节我们就学习一下在k8s中这些组件是如何使用的,在k8s集群中,不建议etcd部署到master的节点上,因为etcd是一个很重要的存储,所以etcd集群应该在k8s集群之外,这样可以根据etcd的需求选择服务器的配置。下面看一下创建的流程图。

根据上面的图形我们做一下注解,

1、首先,用户向api-serve发送创建pod请求。
2、api-serve做出认证响应,然后检查信息并把数据存储到ETCD里,创建deploment资源初始化。
3、controller通过list-watch机制,检查发现新到deployment,将资源加入到内部工作队列,反省资源没有关联的pod和replicaset,启用depliyment controller创建replicaset资源,再启用replicaset controller创建pod。
4、所有controller被创建完成后.将deployment,replicaset,pod资源更新存储到etcd。
5、scheduler通过list-watch机制,监测发现新的pod,经过主机过滤、主机打分规则,将pod绑定(binding)到合适的主机。
6、将绑定结果存储到etcd。
7、kubelet每隔 20s(可以自定义)向apiserver通过NodeName 获取自身Node上所要运行的pod清单.通过与自己的内部缓存进行比较,新增加pod
8、kubelet创建pod。
9、kube-proxy为新创建的pod注册动态DNS到CoreOS。给pod的service添加iptables/ipvs规则,用于服务发现和负载均衡。
10、controller通过control loop(控制循环)将当前pod状态与用户所期望的状态做对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行会将此pod删掉,然后重新创建pod。

本章主要是针对k8s的工作流程的一个总结,理解的时候可能比较吃力,不过没关系,可以跳过去,后面再将单个细节的时候再回忆一下这里你会豁然开朗,这里不要求会背,需要对对所有组件有一个深刻印象。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: