type
status
date
slug
summary
category
tags
create_time
Aug 13, 2025 08:46 PM
icon
password
my_create_time

📝 前言

在 Kubernetes 中,Pod 是工作负载的最小调度单元,但 Pod 并不会自己选择在哪个节点(Node)上运行。
这个关键决策过程由kube-scheduler完成,它是 Kubernetes 控制平面中负责资源调度的重要组件。
本文是《云原生之旅》系列第三部分的第四篇,深入解析kube-scheduler的核心原理与调优策略,帮助提升集群资源利用率与稳定性。

🧭 背景介绍

曾经在一个项目中,我们通过 Jenkins On Kubernetes 实现了应用的 CI/CD 自动化构建,但发现每次构建任务都会被分配到同一个节点运行,而集群中的其他节点几乎处于空闲状态。
这种情况导致该节点的 CPU 和内存利用率居高不下,构建速度也逐渐下降,而其他节点的资源却被浪费。
经过分析,发现是调度策略没有生效,Pod 默认落在某个节点上。
我们调整了kube-scheduler的配置,启用了更合理的 资源分配策略(如最少资源使用优先 + 拓扑分布约束),才让构建任务能够分散到多个节点运行,实现了资源的充分利用与构建速度的显著提升

🧠 本章知识卡片

notion image

🚀 本章小节

1️⃣ 什么是 kube-scheduler ?

kube-scheduler 是控制平面的核心组件,负责监视新创建的、未指定运行节点(node)的 Pods,并选择节点来让 Pod 在上面运行。
调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。

2️⃣ kube-scheduler 工作原理

kube-scheduler 的调度逻辑主要分为两个阶段:
  1. 过滤(Filtering)
  • 排除不满足条件的节点,例如资源不足、标签不匹配、污点不可容忍等。
2. 打分(Scoring)
  • 对剩余节点进行打分,常见策略包括最少资源使用、平衡资源分配、节点亲和性等。
  • 最终选择得分最高的节点,将 Pod 与之绑定。
此外,它还支持:
  • 抢占机制(Preemption):高优先级 Pod 无法调度时,可驱逐低优先级 Pod。
  • 扩展机制(Scheduling Framework):允许通过插件扩展调度逻辑,支持多调度器共存。
大致工作流程图如下所示:
notion image

3️⃣ kube-scheduler 在 Kubernetes 中的作用

kube-scheduler 在 Kubernetes 中扮演着“资源调度大脑”的角色,主要作用包括:
  • 节点选择:根据 Pod 请求的 CPU、内存、GPU 等资源,分配最合适的节点。
  • 约束管理:支持节点亲和性/反亲和性、污点与容忍、拓扑分布策略。
  • 负载均衡:避免节点过载,提升整体资源利用率。
  • 扩展性支持:支持多调度器、插件机制(Scheduling Framework),便于开发自定义调度逻辑。

4️⃣ 常见启动参数

kube-scheduler 的配置文件通常是在:
/etc/kubernetes/manifests/kube-scheduler.yaml
其中常见的启动参数包括如下:
参数
说明
常用取值/示例
--leader-elect
是否启用领导者选举,防止多实例冲突
true(生产环境建议开启)
--bind-address
调度器监听的地址
0.0.0.0(监听所有地址)
--secure-port
HTTPS 安全端口
10259(默认)
--config
指定调度器配置文件(KubeSchedulerConfiguration),支持更复杂的策略与插件配置
/etc/kubernetes/kube-scheduler-config.yaml
--v
日志详细等级
2(调试时可调大,如 46
--authentication-kubeconfig
认证 kubeconfig 文件路径
/etc/kubernetes/scheduler.conf
--authorization-kubeconfig
授权 kubeconfig 文件路径
/etc/kubernetes/scheduler.conf
--feature-gates
控制调度器的实验性或可选功能开关
PodAffinityNamespaceSelector=true,PodTopologySpread=true

5️⃣ 生产环境优化

在大规模集群或高负载环境中,调度器的性能和稳定性至关重要,可考虑以下优化措施:
  • 并行度调优:通过配置调度器并行调度的数量,提高调度效率。
  • 缓存优化:利用调度缓存(Scheduler Cache)减少频繁的 API 请求。
  • 插件管理:按需启用/禁用插件,例如 ImageLocality 插件在大规模集群中可能带来额外开销。
  • 多 Profile 支持:通过 profiles 配置,为不同类型的 Pod 使用不同的调度策略。
  • 高可用部署:开启 -leader-elect 并运行多个调度器实例,提高容错能力。

✅ 总结

kube-scheduler 是 Kubernetes 的核心控制平面组件之一,承担着 Pod 到 Node 的自动调度任务。
它通过过滤和打分机制综合评估集群资源,并支持亲和性、污点、拓扑等复杂约束。
在生产环境中,合理的配置与优化能显著提升调度效率和集群稳定性。
换句话说,kube-scheduler 是 Kubernetes 集群能否“聪明地”运转的关键所在
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
 
上一篇
Nginx+ACME服务器搭建
下一篇
Workday alarm in Calendar 功能规划

评论
Loading...