Kubernetes - API Server / etcd如何知道每个Pod的状态?

时间:2018-06-04 21:36:54

标签: kubernetes kubelet kube-apiserver

我知道kubelet负责接收PodSpecs(通常来自API服务器)并运行Pod。

  

Kubernetes Components > Node Components > kubelet

     

" kubelet采用一系列通过各种机制提供的PodSpecs,并确保这些PodSpecs中描述的容器正在运行且健康。"

但是,API Server如何跟踪每个Pod的状态(例如运行/失败)? kubelet是否会向API服务器发送常规请求?或者API Server是否定期轮询kubelet?还是其他一些机制?

1 个答案:

答案 0 :(得分:3)

kubelet在节点上完成所有操作。创建pod的典型过程如下:

  1. 默认情况下,kubelet通过名为 watch 的“东西”连接到api-server。这是一种发布/发布。所以kubelet会订阅“创建pod”事件,api-server会在需要创建pod时通知它。
  2. kubelet将获得容器运行时(docker或rkt)以及其他pod规范,并将创建pod。
  3. 注意:这里涉及的组件更多,例如调度程序和控制器管理器(在帖子中提到各种机制),但我会跳过它们。

    1. kubelet将提供必要的活动和准备情况探测并向api-server报告状态。说成功!
    2. api-server将更新etcd(通过添加pod的元数据)以跟踪群集中正在发生的事情。
    3. 此时,kubelet将负责此吊舱。如果pod关闭,kubelet将报告api-server,api-server将命令杀死pod,将启动一个新的,并再次更新etcd服务器。

      有一点需要指出的是,k8s中的所有组件都直接与api-server通信。因此,控制器管理器或调度程序不会说kubelet要做什么。相反,他们说它是api-server,api-server是kubelet。