查看原文
其他

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

Wei & Abdullah 进击云原生 2024-02-25

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料

GitOps 入门到专家进阶实战详细教程

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

它解决了什么问题?

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

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

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

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

它是如何工作的?

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

NAME       READY   STATUS            RESTARTS   AGE
test-pod   0/1     SchedulingGated   0          10s

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

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

用例

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

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

下一步是什么?

要使用此功能,必须在 API 服务器和调度程序中启用PodSchedulingReadiness功能门。非常欢迎您对其进行测试并告诉(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

- END -




后台回复“
加群”,带你进入高手交流群
推荐阅读
Kubernetes 1.26 正式发布,所有变化都在这儿了!
使用 Docker Hub 完美地存储 Helm 图表实战
16 张图实战 Prometheus 自定义告警规则Kubernetes 1.26 中更简单的准入控制实战
云原生年终强势总结,这套资料简直是K8s/Docker/DevOps的命脉
开源网关 Apache APISIX 认证鉴权精细化实战讲解
保姆级 Prometheus PromQL 讲解与实战操作
38 张图硬核高性能服务器架构设计与调优
20 张图详细理清 K8S Istio Gateway 与实战操作
GitOps 新手入门到专家进阶实战详细教程
8 张图详解 Prometheus AlertManager 实战操作
6 张配图通俗易懂说透 K8S 请求和限制
提高 K8S 监控可观察性最佳方式实战教程Kubernetes 1.26 中的删除、弃用和主要更改46 张图详解 Zabbix 分布式监控平台建设
这 11 张图把 K8S 权限认证说的很清楚了
10 张图解 K8S CNI Calico 网络模型原理与功能实战19 张图详解 Rsync 远程同步K8S 1.25 中的重大更改和删除18 张图 Java 容器化最佳实践总结17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型
全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【加群】进入高手如云技术交流群
继续滑动看下一个

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

Wei & Abdullah 进击云原生
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存