Kubernetes 调度核心解析全攻略:从基础到生产级策略
本文将深入探讨 Kubernetes 调度器的工作原理、核心机制及进阶策略,帮助你在复杂集群环境下实现高效 Pod 调度、高可用部署和资源优化。
第一部分:调度基础 - 默认调度器如何工作
Kubernetes 调度器的核心职责很简单:为一个新创建的 Pod 寻找最适合的 Node(节点)来运行它。
调度过程分为两个关键阶段:
1. 过滤 (Filtering) / 预选 (Predicate)
- 目标:排除所有不满足 Pod 要求的节点。
- 过程:调度器基于一系列预选规则(Predicates)筛选节点,任何不满足规则的节点将被排除。
- 常见预选策略:
- PodFitsResources:节点是否有足够 CPU 和内存资源。
- PodFitsHostPorts:节点端口是否可用。
- MatchNodeSelector:节点是否匹配 Pod 的 nodeSelector 或 nodeAffinity。
- CheckNodeMemoryPressure / CheckNodeDiskPressure:节点是否存在内存或磁盘压力。
- PodToleratesNodeTaints:Pod 是否容忍节点污点。
2. 打分 (Scoring) / 优选 (Priority)
- 目标:在过滤后的节点中,为每个节点打分,选择分数最高的节点。
- 常见评分策略:
- LeastRequestedPriority:优先选择资源使用较少的节点。
- BalancedResourceAllocation:选择资源分布均衡的节点。
- ImageLocalityPriority:优先选择已有所需镜像的节点。
- NodeAffinityPriority:根据软策略 preferredDuringSchedulingIgnoredDuringExecution 打分。
最终绑定 (Binding):调度器选择最优节点后,通过 API Server 写入 etcd,节点上的 kubelet 接收信息并创建 Pod。
第二部分:基础调度策略
1. 资源请求 (Resources Requests)
- Pod 调度的核心依据是 spec.containers[].resources