k8s调度机制:亲和性,污点,容忍

Kubernetes 调度机制:亲和性、污点与容忍全解析

在 Kubernetes 的调度机制中,有三个重要概念:节点亲和性 、污点 和 **容忍 **。它们是 Kubernetes 调度的核心,决定了 Pod 是如何被调度到具体节点的。理解这三者之间的关系,可以帮助我们更精确地控制集群中的 Pod 调度。

1. 节点亲和性

什么是节点亲和性?

简单来说,节点亲和性就是让 Pod 主动选择节点 的机制。通过设置亲和性规则,你可以让 Pod 更倾向于调度到某些符合条件的节点。

适用场景:

  • 需要特定硬件支持的任务,比如数据库 Pod 只想运行在带 SSD 存储的节点上。
  • 性能要求高的业务,比如某些关键业务 Pod 只想跑在高性能节点上。

示例:

假设你想把某个业务 Pod 只调度到类型为 "high-performance" 的节点上,可以这么做:

复制代码
nodeAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
    - matchExpressions:
      - key: "node-type"
        operator: In
        values:
        - high-performance

2. 污点 (Taint)

什么是污点?

污点是节点主动设置的条件,表示 节点不愿意接受 Pod。你可以给节点加上污点,防止其他 Pod 被调度到这个节点上。

适用场景:

  • GPU 节点通常只给 AI 训练任务使用,其他普通 Pod 需要被拒绝调度到这些节点。
  • 节点出现故障时,可以通过污点避免新 Pod 调度到这个节点。

示例:

在 GPU 节点上设置污点,防止普通 Pod 调度到该节点:

复制代码
kubectl taint nodes gpu-node type=gpu:NoSchedule

3. 容忍 (Toleration)

什么是容忍?

容忍就是 Pod 声明"我能忍受污点" 的机制。被污点标记的节点,不是所有的 Pod 都会被拒绝,只有那些声明了"容忍"这个污点的 Pod,才能顺利调度到这些节点上。

适用场景:

  • 如果某个 Pod 想调度到 GPU 节点,必须声明容忍 GPU 的污点。
  • 即便是有故障的节点,只要某个 Pod 有容忍该节点的污点,它仍然可以在该节点运行。

示例:

如果 Pod 要调度到被污点标记的 GPU 节点,它需要添加以下容忍设置:

复制代码
tolerations:
  - key: "type"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Kubernetes 调度机制总结

机制 定义主体 控制方向 结果
节点亲和性 (Node Affinity) Pod 主动选择节点 优先调度到符合条件的节点
污点 (Taint) 节点 主动拒绝 Pod 被污点标记的节点不接受 Pod
容忍 (Toleration) Pod 主动声明"我能忍" 只有带有容忍设置的 Pod 才能绕过污点

总结

Kubernetes 的调度机制可以用 "亲和性 + 污点 + 容忍" 三个词来概括:

  • 亲和性:Pod 主动选择节点
  • 污点:节点主动拒绝 Pod
  • 容忍:Pod 声明"我能忍受这个污点"

这三者结合起来,就能灵活地控制 Pod 的调度方式,解决了 Kubernetes 中 Pod 调度的"正向匹配 + 反向隔离"问题。

相关推荐
好用斋1 小时前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器
对象存储与RustFS2 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生
weirong5 小时前
图解 client-go Informer:手写一个 mini-Informer 才敢说懂
kubernetes
.冰块.5 小时前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange
方便面不加香菜6 小时前
Docker Container -- 容器命令详解
运维·docker·容器
Z21-X7 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
qq_452396237 小时前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
分布式存储与RustFS8 小时前
Longhorn 的卷备份别堆本地盘:用 RustFS 给它当 S3 备份目标
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
工业一体机老司机20 小时前
Docker部署工控机采集服务 Compose编排与开机自启
运维·docker·容器
DolitD21 小时前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染