10 张图带你搞懂 Kubernetes Pod 的创建流程_清单文件

 

 将 Pod 部署运行在 Kubernetes 内,前几个步骤你可能很熟悉

(1) kubectl 将 YAML 发送到 API

10 张图带你搞懂 Kubernetes Pod 的创建流程_kubernetes_02

  (2) Pod 存储在 etcd 中

10 张图带你搞懂 Kubernetes Pod 的创建流程_调度程序_03

(3) 调度程序分配一个节点(此时Pod配置清单文件存储在 etcd 中,节点内并没有该 pod  

10 张图带你搞懂 Kubernetes Pod 的创建流程_edn_04

(4) kubelet 开始创建 Pod

10 张图带你搞懂 Kubernetes Pod 的创建流程_清单文件_05

(5) kubelet 将创建容器的委托委派给 CRI

10 张图带你搞懂 Kubernetes Pod 的创建流程_调度程序_06

(6) CNI 分配一个 IP 地址

10 张图带你搞懂 Kubernetes Pod 的创建流程_清单文件_07

 

(7) 检查探针
(8) kubelet 将 IP 地址报告给控制平面

10 张图带你搞懂 Kubernetes Pod 的创建流程_清单文件_08

此时 Pod 就已经创建完成了,除非 Pod 是服务的一部分,否则 Kubernetes会在此处停止。如果 Pod 属于服务,Kubernetes 会创建一个端点 ​endpoint ​​-它连接 Pod 的 IP 地址和端口(​​targetPort​​​)。将端点 ​​endpoint ​​​添加到端点(​​对象 object​​)。

10 张图带你搞懂 Kubernetes Pod 的创建流程_清单文件_09

这些端点将会用于以下:

  • kube-proxy​设置iptables规则
  • CoreDNS​更新DNS条目
  • ​Ingress​​​入口控制器设置下游服务​​downstreams​
  • Service meshes
  • More operators其他运营商

10 张图带你搞懂 Kubernetes Pod 的创建流程_kubernetes_10

就这样,完成一个 Pod 的创建和发布,对于删除 Pod 来说过程一样,不过是相反。 

 Cni不止分配一个ip就完了,还要给容器添加虚拟网卡和网关,通常同时还会在宿主机上新建容器veth对的另一端,通常有的会连到网桥! 以上这些是cni实现的二进制命令来做的。

通常cni还会有其他deamon在长期运行着,来做宿主机上的路由,arp,fdb等的配置,从而实现容器跨主机通信