在 Kubernetes 中,污点(Taint) 和 容忍(Toleration) 是用于控制 Pod 调度到特定节点的重要机制。污点允许节点拒绝某些 Pod 的调度,而容忍则允许 Pod 忽略节点的污点,从而调度到特定节点上。
1. 污点(Taint)
1.1.污点的作用
污点是节点上的一个标记,用于限制哪些 Pod 可以调度到该节点。通常用于以下场景:
- 专用节点:某些节点专门用于运行特定类型的 Pod(如 GPU 节点)。
- 节点维护:标记节点为不可调度状态,以便进行维护。
- 故障隔离:将故障节点标记为不可调度,避免 Pod 调度到该节点。
1.2.污点的组成
每个污点由以下三部分组成:
- Key: 污点的键(必填)。
- Value: 污点的值(可选)。
- Effect: 污点的效果(必填),有以下三种:
NoSchedule
: 禁止调度新的 Pod 到该节点(已运行的 Pod 不受影响)。PreferNoSchedule
: 尽量不调度新的 Pod 到该节点(非强制)。NoExecute
: 禁止调度新的 Pod 到该节点,并且驱逐已运行但不满足容忍的 Pod。
1.3.污点的配置
通过 kubectl taint
命令为节点添加污点。
查看帮助文档
[root@master ~]# kubectl taint --help
语法:
kubectl taint nodes <节点名称> <key>=<value>:<effect>
示例:
-
为节点
node-1
添加一个污点带有值的,禁止调度新的 Pod:[root@master ~]# kubectl taint nodes node-1 dedicated=special:NoSchedule node/node-1 tainted [root@master ~]# kubectl describe node node-1 | grep Taint Taints: dedicated=special:NoSchedule
-
为节点
node-2
添加一个污点,尽量不调度新的 Pod:[root@master ~]# kubectl taint nodes node-2 gpu:PreferNoSchedule node/node-2 tainted [root@master ~]