梗概

污点(Taints)和容忍(Tolerations)是 Kubernetes 中用于控制 Pod 调度的机制。污点是节点的”门槛”,容忍是 Pod 的”通行证”,只有持有对应”通行证”的 Pod 才能进入设置了”门槛”的节点。这种机制使得节点可以拒绝特定的 Pod,从而实现节点隔离、专用节点和驱逐效果。

详细说明

污点(Taints)

  • 概念:污点是应用于节点(Node)上的键值对标记,用来表明该节点不愿意接受不能容忍这些污点的 Pod
  • 组成:每个污点由一个键(key)、一个值(value)和一个效果(effect)组成
  • 效果类型
    • NoSchedule:新的不能容忍该污点的 Pod 不会被调度到该节点,但现有 Pod 不受影响
    • PreferNoSchedule:尽量避免将不能容忍该污点的 Pod 调度到该节点
    • NoExecute:既不会调度新的不能容忍该污点的 Pod,还会驱逐已在节点上运行但不能容忍该污点的 Pod

容忍(Tolerations)

  • 概念:容忍是应用于 Pod 的设置,允许 Pod 被调度到带有对应污点的节点上
  • 作用:通过容忍,Pod 表明它能够”忍受”节点上的特定污点
  • 配置方式:在 Pod 的 spec 中设置 tolerations 字段

应用场景

  1. 专用节点:为特定工作负载保留节点(如 GPU 节点只运行 AI 工作负载)
  2. 节点隔离:不同业务的 Pod 运行在不同的节点组上,提高隔离性
  3. 故障节点处理:当节点出现问题时,自动添加污点避免新 Pod 调度到该节点
  4. 逐出 Pod:通过动态添加 NoExecute 效果的污点,驱逐节点上的某些 Pod
  5. 特殊硬件节点:专门为需要特殊硬件的应用保留节点

配置示例

添加污点到节点

kubectl taint nodes node1 key=value:NoSchedule

Pod 容忍配置

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  tolerations:
  - key: "key"
    operator: "Equal"
    value: "value"
    effect: "NoSchedule"
  containers:
  - name: example-container
    image: example-image

与其他组件的关系

  • Node 关联:污点应用在节点上,影响节点的调度行为
  • Pod 关联:容忍定义在 Pod 规格中,决定 Pod 的调度可能性
  • 与NodeAffinity互补:NodeAffinity 用于吸引 Pod 到特定节点,而污点和容忍用于排斥 Pod
  • 与集群隔离策略结合:与NetworkPolicyNamespace共同构建完整的资源隔离方案

father:: kubernetes