4. Kubernetes 调度与资源分配:调度器工作原理、节点资源分配策略、Pod优先级与抢占
4.1 调度器工作原理:从 Pod 到 Node 的决策链路
Kubernetes 调度器(kube-scheduler)是控制平面中负责将待调度 Pod 绑定到合适 Node 的核心组件。其工作本质是一个“过滤-打分-绑定”的三阶段决策过程,确保集群资源的高效利用与负载均衡。
核心调度流程: 调度器通过 Predicates(过滤) 排除不满足条件的节点,再通过 Priorities(打分) 对剩余节点排序,最终选择最优节点执行绑定。
4.2 节点资源分配策略:Request 与 Limit 的博弈
Kubernetes 通过 Request(请求量) 和 Limit(上限) 两个维度管理容器资源。调度器基于 Pod 的 Request 值进行调度决策,而 kubelet 则通过 QoS(服务质量) 等级在节点层面进行资源争抢时的回收策略。
| QoS 等级 | 条件 | 资源回收优先级 | 典型场景 |
|---|---|---|---|
| Guaranteed | 所有容器 Request == Limit | 最低(最不易被驱逐) | 数据库、核心中间件 |
| Burstable | 至少一个容器 Request < Limit | 中等 | Web 服务、API 网关 |
| BestEffort | 所有容器未设置 Request/Limit | 最高(最先被驱逐) | 批处理、CI/CD 任务 |
成本优化提示: 过度设置 Request 会导致节点资源碎片化,降低装箱率;而 Limit 设置过高则可能引发节点过载。建议对稳定负载使用 Guaranteed 等级,对弹性负载使用 Burstable,对可中断任务使用 BestEffort。
4.3 Pod 优先级与抢占:保障关键业务的调度特权
当集群资源紧张时,高优先级 Pod 可以 抢占(Preempt) 低优先级 Pod 的资源。Kubernetes 通过 PriorityClass 定义优先级,数值越大优先级越高。
4.3.1 PriorityClass 定义与使用
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000 # 优先级数值
globalDefault: false # 是否设为集群默认
description: "用于生产核心服务"
---
apiVersion: v1
kind: Pod
metadata:
name: critical-pod
spec:
priorityClassName: high-priority
containers:
- name: app
image: nginx
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
4.3.2 抢占流程与避坑指南
4.4 调度策略与成本分摊的关联
调度策略直接影响集群的资源利用率和成本分摊精度:
- 装箱率优化: 使用
MostRequestedPriority或自定义调度器将 Pod 集中调度,提高节点利用率,降低单位 Pod 的节点成本。 - 资源碎片控制: 避免 Request 与节点可分配资源不匹配导致的碎片,建议使用
NodeResourcesFit插件进行精细过滤。 - 优先级与成本权重: 高优先级 Pod 通常对应核心业务,在成本分摊模型中应分配更高的权重系数。
注意: 抢占虽然能保障高优 Pod 运行,但频繁抢占会导致低优 Pod 反复重建,增加调度开销和资源浪费。建议结合 Cluster Autoscaler 动态扩缩节点,减少对抢占的依赖。
4.5 调度器扩展:自定义调度策略
Kubernetes 支持通过 Scheduler Framework 扩展调度器行为,实现企业级成本优化调度:
| 扩展点 | 作用阶段 | 典型应用 |
|---|---|---|
| PreFilter | 过滤前 | 检查 Pod 是否满足全局配额 |
| Filter | 过滤 | 自定义节点过滤逻辑(如 GPU 型号) |
| PreScore | 打分前 | 运行预计算,缓存中间结果 |
| Score | 打分 | 自定义成本权重打分(如按 Spot 实例价格) |
| Reserve | 绑定前 | 预留资源,防止并发冲突 |
| Permit | 绑定前 | 等待外部审批或资源预算检查 |
FinOps 实践: 在 Score 扩展点中,可以引入节点 Spot 实例折扣率、地域电价差异等成本因子,让调度器自动选择成本最优的节点,实现“成本感知调度”。