在Kubernetes中创建Pod时会发生什么? - daniele

20-09-25 banq

在Kubernetes中创建Pod时会发生什么?一个令人惊讶的简单任务揭示了一个复杂的工作流,涉及集群中的多个组件。
 
你可能熟悉的前4个步骤:
  1. kubectl将YAML发送到API
  2. Pod存储在etcd中
  3. 调度程序分配一个节点,此时Pod是在etcd中,而节点中没有Pod。
  4. kubelet开始创建Pod。

 
下一步:
  1. kubelet委托CRI创建容器
  2. kubelet委托将容器连接到网络的CNI
  3. CNI分配IP地址
  4. 探针Probes被检查
  5. kubelet报告IP地址到控制平面

 
Pod已创建!除非Pod是服务的一部分,否则Kubernetes会在此处停止。如果Pod属于服务,则Kubernetes会创建一个端点:它连接Pod的IP地址和端口(targetPort)。将端点添加到Endpoint(对象)。
 
什么是端点endpoint?
在Kubernetes中:
  • endpoint是10.0.0.2:3000(IP:端口)对
  • Endpoint是endpoint的集合(IP:端口对的列表)

对于集群中的每个服务,Kubernetes都会创建一个具有endpoint列表的Endpoint对象。令人困惑,不是吗?
端点endpoints (IP:port)用于:
  • kube-proxy用它设置iptables规则
  • CoreDNS用来更小DNS条目
  • Ingress控制器用来设置下游
  • 用于服务网格Service meshes
  • 用于更多运维

一旦端点endpoint被添加了,相应组件会被通知。
 
广播ednpoint端点(IP:port)后,您终于可以开始使用Pod!
 
您能猜出删除Pod后会发生什么吗? 与增加Pod有相同的流程,但是相反。这很烦人,因为有一些竞赛条件的机会。