gpt4 book ai didi

kubernetes - Kubernetes API server 如何在一个节点上启动一个新调度的 pod?

转载 作者:行者123 更新时间:2023-12-02 11:31:22 26 4
gpt4 key购买 nike

关于 kubeletkube-apiserver< 之间的交互,我试图在“幕后”更好地了解 Kubernetes Pod 调度和创建过程的工作原理.

我了解 Kubernetes 调度程序选择一个节点来分配新的 pod,并将此通知 API 服务器。但是,我不清楚 API 服务器如何通知相关节点上的 kubelet 启动 pod。 kubelet 中是否有一个查询 API 服务器更改的轮询过程?还是有事件监听/回调类型的交互?

如果有人知道答案或可以指出一些文档的方向,将不胜感激!

最佳答案

阿里巴巴有一个really insightful blog post on the inner workings of the scheduler .来自博客:


调度器基本上是这样工作的:

  • 调度器维护一个调度的 podQueue 并监听 APIServer。
  • 当我们创建 Pod 时,我们首先通过 APIServer 将 Pod 元数据写入 etcd。
  • 调度器通过 Informer 监听 Pod 状态。当添加新的 Pod 时,该 Pod 被添加到 podQueue。
  • 主进程不断从podQueue中提取Pod,并为Pod分配节点。
  • 调度过程包括两个步骤:筛选匹配节点并根据 Pod 配置(例如,通过资源使用率和亲和性等指标)对这些节点进行优先级排序,从而对节点进行评分并选择得分最高的节点。
  • 节点分配成功后,调用apiServer的绑定(bind)pod接口(interface),为分配的pod设置pod.Spec.NodeName。
  • 节点上的 kubelet 也监听 ApiServer。如果它发现一个新的 Pod 被调度到该节点,则调用本地 dockerDaemon 来运行容器。
  • 如果调度器调度一个Pod失败,如果启用了优先级和抢占,则首先进行抢占尝试,删除节点上优先级低的Pod,将要调度的Pod调度到该节点。如果未启用抢占或抢占尝试失败,则会在日志中记录相关信息,并将Pod添加到podQueue的末尾。

关于 Kubelet 轮询: 实际上,API 服务器支持一种“监视”模式,它使用 WebSocket 协议(protocol)。通过这种方式,Kubelet 会收到主机名等于 Kubelet 主机名的 Pod 的任何更改。

关于kubernetes - Kubernetes API server 如何在一个节点上启动一个新调度的 pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64260771/

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