k8s 污点taint与容忍tolerations
污点
污点是k8s的一种属性,node有污点,哪个pod能容忍这个污点就可以在这个node上部署
1.1 污点组成
key,value及effect 三个元素组成,effect是污点状态
例:key1=value1:NoSchedule
1.2 污点状态
共有三种状态:
NoSchedule:node节点有污点,pod没有污点属性的时候不会调度
PreferNoShedule:尽量不会调度
NoExecute:不仅不会调度,还会驱逐原先的pod
1.3 给node添加污点
给master添加污点不可调度
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule
给node节点添加污点尽量不会调度
kubectl taint nodes node6 key1=value1:PreferNoSchedule
1.4 去掉node节点的污点
master去掉污点
kubectl taint nodes master1 node-role.kubernetes.io/master-
node节点去掉污点
kubectl taint nodes node6 key1:NoSchedule-
1.5 查看节点污点
kubectl describe node node6 | grep Taint
容忍
容忍可以让pod对node节点上的污点容忍,容忍的就可以调度部署到node上,否则不调度。
2.1 容忍yml参数
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
tolerationSeconds: 3600
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
- key: "key2"
operator: "Exists"
effect: "NoSchedule"
key,vaule,e?ect要与Node上设置的taint保持一致
operator的值为Exists将会忽略value值
tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Pod 上继续保留运行的时间
2.2 容忍所有污点
当不指定 key 值时,表示容忍所有的污点 key
tolerations:
- operator: "Exists"
2.3 容忍所有状态污点
当不指定 e?ect 值时,表示容忍所有的污点状态
tolerations:
- key: "key"
operator: "Exists"
有多个 Master 存在时,防止资源浪费,可以如下设置(表示k8s将尽量避免将Pod调度到具有该污点的Node上)
kubectl taint nodes Node-Name node-role.kubernetes.io/master=:PreferNoSchedule