Kubernetes 调度器
在 Kubernetes 中,调度 指的是确保 Pod 与 节点 匹配,以便 Kubelet 可以运行它们。
调度概述
调度器会监视新创建的且未分配节点的 Pod。对于调度器发现的每个 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 通过 2 步操作为 Pod 选择节点
- 过滤
- 评分
过滤 步骤查找可以调度 Pod 的节点集。例如,PodFitsResources 过滤器会检查候选节点是否有足够的可用资源来满足 Pod 的特定资源请求。在此步骤之后,节点列表包含任何合适的节点;通常,会有多个节点。如果列表为空,则该 Pod (尚未) 可调度。
在 评分 步骤中,调度器会对剩余节点进行排名,以选择最合适的 Pod 放置位置。调度器根据活动评分规则为每个通过过滤的节点分配一个分数。
最后,kube-scheduler 将 Pod 分配给排名最高的节点。如果存在多个得分相等的节点,则 kube-scheduler 会随机选择其中一个。
有两种受支持的方法可以配置调度器的过滤和评分行为
- 调度策略 允许您配置用于过滤的 谓词 和用于评分的 优先级。
- 调度配置文件 允许您配置实现不同调度阶段的插件,包括:
QueueSort
、Filter
、Score
、Bind
、Reserve
、Permit
等。您还可以配置 kube-scheduler 以运行不同的配置文件。
下一步
- 阅读关于 调度器性能调优 的内容
- 阅读关于 Pod 拓扑分布约束 的内容
- 阅读 kube-scheduler 的参考文档
- 阅读 kube-scheduler config (v1) 参考
- 了解有关 配置多个调度器 的内容
- 了解有关 拓扑管理策略 的内容
- 了解有关 Pod 开销 的内容
- 了解有关在以下位置使用卷的 Pod 的调度: