调度器性能调优

特性状态: Kubernetes v1.14 [beta]

kube-scheduler 是 Kubernetes 默认的调度器。它负责将 Pod 放置在集群中的节点上。

集群中满足 Pod 调度要求的节点称为 Pod 的可行节点。调度器为 Pod 查找可行的节点,然后运行一组函数来对可行的节点进行评分,选择可行节点中得分最高的节点来运行 Pod。然后,调度器在一个称为绑定的过程中将此决定通知 API 服务器。

本页解释了与大型 Kubernetes 集群相关的性能调优优化。

在大型集群中,您可以调整调度器的行为,在延迟(快速放置新的 Pod)和准确性(调度器很少做出糟糕的放置决策)之间平衡调度结果。

您可以通过 kube-scheduler 设置 percentageOfNodesToScore 来配置此调优设置。此 KubeSchedulerConfiguration 设置确定集群中调度节点的阈值。

设置阈值

percentageOfNodesToScore 选项接受 0 到 100 之间的整数值。值 0 是一个特殊数字,表示 kube-scheduler 应使用其编译的默认值。如果您将 percentageOfNodesToScore 设置为高于 100,则 kube-scheduler 的行为就像您已设置值为 100 一样。

要更改该值,请编辑kube-scheduler 配置文件,然后重新启动调度器。在许多情况下,配置文件可以在 /etc/kubernetes/config/kube-scheduler.yaml 中找到。

在您进行此更改后,您可以运行

kubectl get pods -n kube-system | grep kube-scheduler

以验证 kube-scheduler 组件是否健康。

节点评分阈值

为了提高调度性能,kube-scheduler 可以在找到足够多的可行节点后停止查找。在大型集群中,与考虑每个节点的简单方法相比,这可以节省时间。

您可以指定一个阈值,表示足够多的节点数,作为集群中所有节点的整数百分比。kube-scheduler 将其转换为整数节点数。在调度期间,如果 kube-scheduler 识别出的可行节点数超过配置的百分比,则 kube-scheduler 会停止搜索更多可行的节点,并继续进入评分阶段

调度器如何迭代节点详细描述了该过程。

默认阈值

如果您未指定阈值,Kubernetes 会使用线性公式计算一个数字,该公式对于 100 个节点的集群产生 50%,对于 5000 个节点的集群产生 10%。自动值的下限为 5%。

这意味着 kube-scheduler 始终至少对集群中的 5% 进行评分,无论集群有多大,除非您已显式将 percentageOfNodesToScore 设置为小于 5。

如果您希望调度器对集群中的所有节点进行评分,请将 percentageOfNodesToScore 设置为 100。

示例

以下是一个将 percentageOfNodesToScore 设置为 50% 的示例配置。

apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
algorithmSource:
  provider: DefaultProvider

...

percentageOfNodesToScore: 50

调整 percentageOfNodesToScore

percentageOfNodesToScore 的值必须介于 1 到 100 之间,默认值根据集群大小计算得出。还有一个硬编码的最小值为 100 个节点。

设置此值时需要考虑的一个重要细节是,当检查集群中少量节点的可用性时,一些节点不会被发送以针对给定的 Pod 进行评分。因此,可能在运行给定 Pod 时得分较高的节点甚至可能不会传递到评分阶段。这将导致 Pod 的位置不理想。

您应避免将 percentageOfNodesToScore 设置得过低,以避免 kube-scheduler 频繁做出糟糕的 Pod 放置决策。除非调度器的吞吐量对于您的应用程序至关重要,并且节点的评分并不重要,否则请避免将百分比设置为低于 10% 的任何值。换句话说,您更喜欢在任何可行的节点上运行 Pod。

调度器如何迭代节点

本节旨在为那些想了解此功能内部细节的人提供。

为了让集群中的所有节点都有公平的机会被考虑用于运行 Pod,调度器以轮循方式迭代节点。您可以想象节点位于一个数组中。调度器从数组的开头开始,并检查节点的可用性,直到找到足够多的由 percentageOfNodesToScore 指定的节点。对于下一个 Pod,调度器从在检查前一个 Pod 的节点可用性时停止的节点数组中的点继续。

如果节点位于多个区域中,则调度器会迭代各个区域中的节点,以确保在可用性检查中考虑来自不同区域的节点。例如,考虑两个区域中的六个节点

Zone 1: Node 1, Node 2, Node 3, Node 4
Zone 2: Node 5, Node 6

调度器按以下顺序评估节点的可用性

Node 1, Node 5, Node 2, Node 6, Node 3, Node 4

在遍历所有节点后,它会返回到节点 1。

下一步

上次修改时间 2024 年 6 月 27 日下午 6:06 PST:修复:最小可行节点 50->100 (44460b3ee3)