Kubernetes (六)调度策略详解:从节点匹配到Pod调度全流程

概述

在Kubernetes集群中,Pod的调度是一个复杂而精妙的过程,涉及到多种策略和机制。本文将深入解析Kubernetes的调度系统,包括节点匹配、标签匹配、硬策略与软策略的区别,以及完整的调度流程。

节点匹配 vs 标签匹配

节点匹配(直接指定)

​工作原理​​:通过kubelet强制在特定节点上创建Pod,完全绕过调度器的分配策略。

​特点​​:

  • 不经过调度器决策流程

  • 直接绑定到指定节点

  • 适用于需要精确控制Pod位置的场景

标签匹配(调度器参与)

​工作原理​​:将调度参数交给调度器,由调度器根据策略选择最优节点。

​特点​​:

  • 调度器参与完整的决策过程

  • 考虑集群整体资源状况

  • 支持更灵活的调度策略

调度策略深度解析

硬策略(Required)

  • ​特性​​:必须满足的条件,没有妥协余地

  • ​执行时机​ ​:requiredDuringSchedulingIgnoredDuringExecution

  • ​关键点​​:

    • 如果硬策略不满足,Pod将无法被调度

    • 不满足条件的节点会被立即排除

    • 不会进入后续的打分阶段

软策略(Preferred)

  • ​特性​​:优先满足的条件,具有权重概念

  • ​执行时机​​:偏好性规则

  • ​关键点​​:

    • 数字越大,权重越高,优先级越高

    • 调度器会计算综合得分

    • 得分越高的节点优先被选中

策略组合使用

当硬策略和软策略结合使用时:

  1. ​先满足硬策略​​:筛选出所有符合硬性要求的节点

  2. ​再应用软策略​​:在合格节点中根据权重打分

  3. ​选择最优节点​​:综合得分最高的节点获得Pod调度权

完整的调度流程

步骤分解

1. 监控发现(Monitoring)

调度器持续监控API Server,发现处于Pending状态的Pod。

2. 节点筛选(Filtering)

基于硬策略筛选出所有可行的节点:

  • 检查资源需求(CPU、内存)

  • 验证节点标签匹配

  • 确认节点可调度状态

3. 节点打分(Scoring)

对通过筛选的节点进行综合评分:

  • 应用软策略的权重计算

  • 考虑资源均衡、亲和性等因素

  • 生成每个节点的综合得分

4. 节点选择(Selection)

选择得分最高的节点作为Pod的运行目标。

5. 绑定操作(Binding)

将Pod与选定的节点进行绑定。

6. 容器启动(Running)

目标节点的Kubelet接收指令,拉取镜像并启动容器。

实际案例分析

成功调度事件示例

复制代码
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  3m29s  default-scheduler  Successfully assigned default/tagbind-849868b69-2r4fn to node02
  Normal  Pulled     3m27s  kubelet            Container image "soscscs/myapp:v1" already present on machine
  Normal  Created    3m26s  kubelet            Created container myapp1
  Normal  Started    3m26s  kubelet            Started container myapp1

镜像拉取过程

复制代码
Events:
  Type    Reason   Age   From     Message
  ----    ------   ----  ----     -------
  Normal  Pulling  38s   kubelet  Pulling image "soscscs/myapp:v1"
  Normal  Pulled   24s   kubelet  Successfully pulled image "soscscs/myapp:v1"

特殊场景处理

节点不可调度情况

​nodeSelector的影响​​:

  • Pod表达"想去某个节点"的意愿

  • 但如果该节点关闭或不可调度,调度器会让Pod处于Pending状态

  • 等待节点恢复或手动干预

静态Pod的特殊性

  • 不受标准调度策略影响

  • 直接绑定到特定节点

  • 节点故障时不会自动转移

  • 需要通过节点名直接指定

动态Pod的调度行为

  • 遵循完整的调度流程

  • 节点不可用时处于Pending状态

  • 可以自动转移到其他可用节点

最佳实践建议

策略配置

  1. ​合理使用硬策略​​:确保基本要求得到满足

  2. ​灵活运用软策略​​:通过权重优化资源分配

  3. ​避免过度约束​​:给调度器足够的灵活性

监控与调试

  1. ​关注调度事件​​:通过Events了解调度过程

  2. ​设置合理的超时​​:避免Pod长时间Pending

  3. ​定期检查节点状态​​:确保集群健康运行

总结

Kubernetes的调度系统是一个高度智能化的决策引擎,它通过多阶段的筛选和评分机制,确保Pod能够被合理地分配到最优节点上。理解节点匹配与标签匹配的区别,掌握硬策略与软策略的配合使用,以及熟悉完整的调度流程,对于构建稳定高效的Kubernetes集群至关重要。

​核心要点回顾​​:

  • 节点匹配绕过调度器,标签匹配依赖调度器

  • 硬策略是门槛,软策略是优化

  • 调度过程包括筛选、打分、选择、绑定四个关键阶段

  • 合理的策略配置是集群稳定运行的保障

通过深入理解这些机制,运维人员可以更好地优化集群性能,提高资源利用率,确保业务连续性。

相关推荐
曾凡宇先生3 小时前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
weixin_46683 小时前
Python编程之面向对象
开发语言·人工智能·python
YBN娜3 小时前
设计模式-创建型设计模式
java·开发语言·设计模式
CoderCodingNo3 小时前
【GESP】C++四级真题 luogu-B4040 [GESP202409 四级] 黑白方块
开发语言·c++
桦说编程3 小时前
CompletableFuture API 过于复杂?选取7个最常用的方法,解决95%的问题
java·后端·函数式编程
数智顾问4 小时前
Flink ProcessFunction 与低层级 Join 实战手册:多流广告计费精确去重
java·spring boot·spring
小火柴1234 小时前
利用R绘制条形图
开发语言·r语言
一头生产的驴4 小时前
java整合itext pdf实现固定模版pdf导出
java·python·pdf
魔都吴所谓4 小时前
【python】快速实现pdf批量去除指定位置水印
java·python·pdf