【问题标题】:Kubernetes - How does API Server / etcd know the status of each Pod?Kubernetes - API Server / etcd 如何知道每个 Pod 的状态?
【发布时间】:2018-11-14 07:02:30
【问题描述】:

我了解kubelet 负责获取 PodSpecs(通常来自 API Server)并运行 Pod。

Kubernetes Components > Node Components > kubelet

“kubelet 采用一组通过各种机制提供的 PodSpec,并确保这些 PodSpec 中描述的容器运行且健康。”

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

【问题讨论】:

    标签: kubernetes kubelet kube-apiserver


    【解决方案1】:

    kubelet 在节点上做所有事情。创建 pod 的典型过程如下:

    1. 默认情况下,kubelet 通过名为 watch 的“东西”连接到 api-server。这是一种发布/订阅。所以 kubelet 会订阅“create pod”事件,api-server 会在需要创建 pod 时通知它。
    2. kubelet 将获取容器运行时(docker 或 rkt)以及其他 pod 规范,并创建 pod。

    注意:这里涉及到更多组件,例如调度程序和控制器管理器(在您的帖子中作为各种机制提到),但我将跳过它们。

    1. kubelet 将进行必要的 liveness 和 readiness 探测,并将状态报告回 api-server。说成功!
    2. api-server 将更新 etcd(通过添加 pod 的元数据)以跟踪集群中发生的事情。

    此时 kubelet 将负责这个 pod。如果 pod 宕机了,kubelet 会报告 api-server,api-server 会下令杀死 pod,然后启动一个新的,然后再次更新 etcd 服务器。

    需要指出的一点是,k8s 中的所有组件都直接与 api-server 通信。所以,控制器管理器或调度器不要说 kubelet 做什么。而是他们对 api-server 说,而 api-server 对 kubelet 说。

    【讨论】:

    • 感谢您的详细回答,它确实解决了问题,尤其是第 (2) 点。但是,这是否记录在任何地方?还是您从源代码中推断出来的?如果是这样,请给我一个链接! (github.com/kubernetes/kubernetes/tree/master/pkg/kubelet的文件太多了不知道去哪里找)
    • 没有。这没有记录。我从这里和那里挑选它。在 youtube 上观看视频。对不起
    猜你喜欢
    • 2021-04-12
    • 2019-10-11
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多