梗概
污点(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 字段
应用场景
- 专用节点:为特定工作负载保留节点(如 GPU 节点只运行 AI 工作负载)
- 节点隔离:不同业务的 Pod 运行在不同的节点组上,提高隔离性
- 故障节点处理:当节点出现问题时,自动添加污点避免新 Pod 调度到该节点
- 逐出 Pod:通过动态添加 NoExecute 效果的污点,驱逐节点上的某些 Pod
- 特殊硬件节点:专门为需要特殊硬件的应用保留节点
配置示例
添加污点到节点
kubectl taint nodes node1 key=value:NoSchedulePod 容忍配置
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
- 与集群隔离策略结合:与NetworkPolicy和Namespace共同构建完整的资源隔离方案
father:: kubernetes