将 Pod 部署运行在 Kubernetes 内,前几个步骤你可能很熟悉
(1) kubectl 将 YAML 发送到 API
(2) Pod 存储在 etcd 中
(3) 调度程序分配一个节点(此时Pod配置清单文件存储在 etcd 中,节点内并没有该 pod
(4) kubelet 开始创建 Pod
(5) kubelet 将创建容器的委托委派给 CRI
(6) CNI 分配一个 IP 地址
(7) 检查探针
(8) kubelet 将 IP 地址报告给控制平面
此时 Pod 就已经创建完成了,除非 Pod 是服务的一部分,否则 Kubernetes会在此处停止。如果 Pod 属于服务,Kubernetes 会创建一个端点 endpoint
-它连接 Pod 的 IP 地址和端口(targetPort
)。将端点 endpoint
添加到端点(对象 object
)。
这些端点将会用于以下:
-
kube-proxy
设置iptables规则 -
CoreDNS
更新DNS条目 -
Ingress
入口控制器设置下游服务downstreams
- Service meshes
- More operators其他运营商
就这样,完成一个 Pod 的创建和发布,对于删除 Pod 来说过程一样,不过是相反。
Cni不止分配一个ip就完了,还要给容器添加虚拟网卡和网关,通常同时还会在宿主机上新建容器veth对的另一端,通常有的会连到网桥! 以上这些是cni实现的二进制命令来做的。
通常cni还会有其他deamon在长期运行着,来做宿主机上的路由,arp,fdb等的配置,从而实现容器跨主机通信