Kubernetes 调度器原理与调优
概述 Kubernetes 调度器是控制平面中最核心的组件之一——它决定每个 Pod 运行在哪个节点上。调度质量直接影响集群的资源利用率、应用性能和可靠性。理解调度器的工作原理,是做好 K8s 生产运维的基本功。 从调度流程、过滤打分机制、亲和性、污点容忍、优先级抢占到自定义调度器,详细梳理调度器的原理与调优实践。 本文基于 Kubernetes v1.30。参考 Kubernetes 调度器文档 调度流程 整体流程 Pod 创建 → API Server → etcd → 调度器 Watch → 调度决策 → 绑定到节点 → kubelet 创建容器 调度器的核心工作分为两个阶段: 1. 过滤(Filter):排除不满足条件的节点 → 候选节点集 2. 打分(Score):对候选节点打分 → 选择最高分节点 详细调度流程 ┌──────────────┐ │ Pod 入队 │ └──────┬───────┘ ▼ ┌──────────────┐ │ 调度周期开始 │ └──────┬───────┘ ▼ ┌────────────────────────┐ │ 扩展点:PreFilter │ ← 预过滤(检查 Pod 是否可调度) └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:Filter │ ← 过滤不满足条件的节点 │ (排除不可行节点) │ └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:PostFilter │ ← 过滤后无节点?(触发抢占) └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:Score │ ← 对候选节点打分 │ (选择最优节点) │ └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:Reserve │ ← 预留资源 └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:Permit │ ← 允许/延迟/拒绝 └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:PreBind │ ← 绑定前处理 └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:Bind │ ← 绑定到节点 └────────────┬────────────┘ ▼ ┌────────────────────────┐ │ 扩展点:PostBind │ ← 绑定后处理 └────────────────────────┘ 调度队列 调度器内部维护三个队列:...