Kubernetes 调度器

在 Kubernetes 中,_调度_ 指的是确保 Pod 能够与 节点 匹配,以便 Kubelet 能够运行它们。

调度概述

调度器会监听新创建但尚未分配节点的 Pod。对于它发现的每个 Pod,调度器负责为其找到最佳运行节点。调度器会根据以下调度原则做出放置决策。

如果你想了解 Pod 被放置在特定节点上的原因,或者你正计划自己实现一个自定义调度器,本页面将帮助你了解调度。

kube-scheduler

kube-scheduler 是 Kubernetes 的默认调度器,作为 控制平面 的一部分运行。kube-scheduler 被设计为,如果你愿意且需要,可以编写自己的调度组件并使用它。

Kube-scheduler 选择最佳节点来运行新创建或尚未调度的 Pod。由于 Pod 中的容器(以及 Pod 本身)可能具有不同的要求,调度器会筛选掉任何不满足 Pod 特定调度需求的节点。另外,API 允许你在创建 Pod 时为其指定一个节点,但这并不常见,仅在特殊情况下才这样做。

在集群中,满足 Pod 调度要求的节点被称为_可行_节点。如果没有节点合适,该 Pod 将保持未调度状态,直到调度器能够放置它。

调度器为 Pod 找到可行节点,然后运行一组函数来对可行节点进行评分,并从可行节点中选择得分最高的节点来运行 Pod。调度器然后通过一个称为_绑定_的过程将此决策通知 API 服务器。

调度决策需要考虑的因素包括个体和集体资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载间干扰等等。

kube-scheduler 中的节点选择

kube-scheduler 通过两步操作为 Pod 选择一个节点

  1. 过滤
  2. 评分

_过滤_步骤会找出可调度 Pod 的节点集合。例如,PodFitsResources 过滤器会检查候选节点是否有足够的可用资源来满足 Pod 的特定资源请求。在此步骤之后,节点列表包含所有合适的节点;通常,会有多个。如果列表为空,则该 Pod 暂时无法调度。

在_评分_步骤中,调度器会对剩余的节点进行排名,以选择最合适的 Pod 放置位置。调度器根据活跃的评分规则为每个通过过滤的节点分配一个分数。

最后,kube-scheduler 将 Pod 分配给排名最高的节点。如果有多个节点得分相同,kube-scheduler 会随机选择其中一个。

有两种支持的方式来配置调度器的过滤和评分行为

  1. 调度策略 允许你配置用于过滤的_断言_和用于评分的_优先级_。
  2. 调度配置文件 允许你配置实现不同调度阶段的插件,包括:`QueueSort`、`Filter`、`Score`、`Bind`、`Reserve`、`Permit` 等。你还可以配置 kube-scheduler 运行不同的配置文件。

下一步

最后修改时间:2024 年 2 月 16 日太平洋标准时间下午 5:27:修复 kube-scheduler 中的拼写错误 (33dcba8aa6)