Kubernetes - API Server / etcd 如何知道每个 Pod 的状态?
Kubernetes - How does API Server / etcd know the status of each Pod?
我了解 kubelet
负责获取 PodSpec(通常来自 API 服务器)和 运行 Pod。
Kubernetes Components > Node Components > kubelet
"The kubelet takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers described in those PodSpecs are running and healthy."
但是 API 服务器如何跟踪每个 Pod 的状态(例如 运行 / 失败)? kubelet
是否定期向 API 服务器发送请求?还是 API 服务器定期轮询 kubelet
?或者其他一些机制?
kubelet 在节点上做所有事情。创建 pod 的典型过程如下:
- 默认情况下,kubelet 通过这个名为 watch 的 "thing" 连接到 api-server。这是一种 pub/sub。因此 kubelet 将订阅 "create pod" 事件,并且 api-server 会在需要创建 pod 时通知它。
- kubelet 将获取容器运行时(docker 或 rkt)以及其他 pod 规范,并创建 pod。
注意:这里涉及到更多组件,例如调度程序和控制器管理器(在您的 post 中作为各种机制提到),但我将跳过它们。
- kubelet 将进行必要的活性和就绪探测,并将状态报告回 api-server。说成功!
- api-server 将更新 etcd(通过添加 pod 的元数据)以跟踪集群中发生的事情。
此时kubelet将负责这个pod。如果 pod 宕机,kubelet 会报告 api-server,api-server 会发出杀死 pod 的命令,启动一个新的 pod,并再次更新 etcd server。
需要指出的一点是,k8s 中的所有组件都直接与 api-server 通信。所以,controller manager 或 scheduler 不会告诉 kubelet 做什么。相反,他们对 api-server 说,api-server 对 kubelet 说。
我了解 kubelet
负责获取 PodSpec(通常来自 API 服务器)和 运行 Pod。
Kubernetes Components > Node Components > kubelet
"The kubelet takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers described in those PodSpecs are running and healthy."
但是 API 服务器如何跟踪每个 Pod 的状态(例如 运行 / 失败)? kubelet
是否定期向 API 服务器发送请求?还是 API 服务器定期轮询 kubelet
?或者其他一些机制?
kubelet 在节点上做所有事情。创建 pod 的典型过程如下:
- 默认情况下,kubelet 通过这个名为 watch 的 "thing" 连接到 api-server。这是一种 pub/sub。因此 kubelet 将订阅 "create pod" 事件,并且 api-server 会在需要创建 pod 时通知它。
- kubelet 将获取容器运行时(docker 或 rkt)以及其他 pod 规范,并创建 pod。
注意:这里涉及到更多组件,例如调度程序和控制器管理器(在您的 post 中作为各种机制提到),但我将跳过它们。
- kubelet 将进行必要的活性和就绪探测,并将状态报告回 api-server。说成功!
- api-server 将更新 etcd(通过添加 pod 的元数据)以跟踪集群中发生的事情。
此时kubelet将负责这个pod。如果 pod 宕机,kubelet 会报告 api-server,api-server 会发出杀死 pod 的命令,启动一个新的 pod,并再次更新 etcd server。
需要指出的一点是,k8s 中的所有组件都直接与 api-server 通信。所以,controller manager 或 scheduler 不会告诉 kubelet 做什么。相反,他们对 api-server 说,api-server 对 kubelet 说。