首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图解 K8S 1.26 新功能 Pod 调度就绪特性解析

Kubernetes 1.26 引入了 Pod 的一个新特性:。在 Kubernetes 中,调度门是告诉调度程序何时准备好考虑调度 Pod 的 keys。

它解决了什么问题?

当一个 Pod 创建时,调度器会不断尝试寻找适合它的节点。这个无限循环一直持续到调度程序找到 Pod 的节点,或者 Pod 被删除。

长时间保持不可调度的 Pod(例如,在某些外部事件上被阻塞的 Pod)会浪费调度周期。根据 Pod 调度约束的复杂性,一个调度周期可能需要 ≅20ms 或更多。因此,在大规模情况下,这些浪费的周期会明显影响调度程序的性能。请参阅下面 框中的箭头。

调度门有助于解决这个问题。它允许声明新创建的 Pod 尚未准备好进行调度。当 Pod 上存在调度门时,调度程序会忽略该 Pod,从而避免不必要的调度尝试。如果您在集群中安装了 Cluster Autoscaler,这些 Pod 也会被忽略。

清除门是外部控制器的责任,外部控制器知道何时应考虑对 Pod 进行调度(例如,配额管理器 quota manager)。

它是如何工作的?

调度门的一般工作方式与终结器非常相似。具有非空 字段的 Pod 将显示为状态并被阻止调度。请注意,可以添加多个门,但它们都应该在创建 Pod 时添加(例如,您可以将它们添加为 的一部分或通过 )。

要清除 gates,您可以通过从 Pod 的 字段中删除所有元素来更新 Pod。不需要一次性全部移除 gate,但只有当所有 gate 都移除后,调度器才会开始考虑 Pod 进行调度。

在底层,调度门实现为一个 PreEnqueue 调度器插件,这是一个新的调度程序框架扩展点,在每个调度周期开始时调用。

用例

此功能启用的一个重要用例是动态配额管理。Kubernetes 支持 ResourceQuota[1],但是 会在您尝试创建 Pod 时强制执行配额。例如,如果一个新的 Pod 超过了 CPU 配额,它就会被拒绝。API Server 不会对 Pod 进行排队;因此,无论是谁创建了 Pod,都需要不断尝试重新创建它。这要么意味着资源变得可用和 Pod 实际运行之间的延迟,要么意味着由于不断尝试而导致 API 服务器和调度器负载高。

调度门(Scheduling gates)允许外部配额管理器解决 ResourceQuota 的上述限制。具体来说,管理器可以为集群中创建的所有 Pods 添加一个 调度门(使用)。然后,当有配额足够启动 Pod 时, 将移除门。

下一步是什么?

要使用此功能,必须在 API 服务器和调度程序中启用功能门。非常欢迎您对其进行测试并告诉(SIG 调度)您的想法!另外请参考:

Pod Scheduling Readiness[2]

Kubernetes 增强提案[3]

作者:

出处:https://goo.gs/9dj03

译者:#公众号:进击云原生

参考资料

[1]

ResourceQuota: https://kubernetes.io/docs/concepts/policy/resource-quotas/

[2]

Pod Scheduling Readiness: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/

[3]

Kubernetes 增强提案: https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/3521-pod-scheduling-readiness/README.md

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221226A07KIS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券