gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:59:40 26 4
gpt4 key购买 nike

我了解 kubelet 负责获取 PodSpec(通常来自 API Server)并运行 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 Server 如何跟踪每个 Pod 的状态(例如运行/失败)? kubelet 是否定期向 API 服务器发送请求?还是 API Server 定期轮询 kubelet?或者其他一些机制?

最佳答案

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

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

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

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

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

需要指出的是,k8s 中的所有组件都直接与 api-server 通信。所以,controller manager 或 scheduler 不会告诉 kubelet 做什么。相反,他们对 api-server 说它,而 api-server 对 kubelet 说。

关于Kubernetes - API Server/etcd 如何知道每个 Pod 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com