- - -
作者:[SRE運維博客](https://www.cnsre.cn/ )
博客地址:[https://www.cnsre.cn/](https://www.cnsre.cn/)
- - -
Taint 和 Toleration(污點和容忍)
在 ??k8s?
? 集群中,節點親和性 ??NodeAffinity?
? 是一種 ??Pod?
? 上定義的屬性,能夠讓 ??Pod?
? 可以按找我們的需求調度到指定節點上,而 ??Taints?
? (污點) 則于??NodeAffinity?
? (節點親和性)是相反的,它是一種 ??Node?
? 上定義的屬性,可以讓 ??Pod?
? 不被調度到帶污點的節點上,甚至會對帶污點節點上已有的 ??Pod?
? 進行驅逐。對應的 ??k8s?
? 可以給 ??Pod?
? 設置 ??Tolerations?
?(容忍) 讓 ??Pod?
? 能夠對有污點的節點設置容忍,將 ??Pod?
? 調度到該節點。 ??Taints?
? 一般是配合 ??Tolerations?
? 使用的。
為 node 設置污點和容忍
NoSchedule: 一定不能被調度
PreferNoSchedule: 盡量不要調度
NoExecute: 不僅不會調度, 還會驅逐Node上已有的Pod
為 node1 設置 taint:
kubectl taint nodes k8s-node1 key1=value1:NoSchedule
kubectl taint nodes k8s-node1 key1=value1:NoExecute
kubectl taint nodes k8s-node1 key2=value2:NoSchedule
查看 node1 上的 taint:
kubectl describe nodes k8s-node1 |grep Taint
刪除上面的 taint:
kubectl taint nodes k8s-node1 key1:NoSchedule-
kubectl taint nodes k8s-node1 key1:NoExecute-
kubectl taint nodes k8s-node1 key2:NoSchedule-
kubectl taint nodes k8s-node1 key1- # 刪除指定key所有的effect
為 pod 設置 toleration
只要在 pod 的 spec 中設置 tolerations 字段即可,可以有多個 ??key?
?,如下所示:
tolerations# containers同級
key"key1" # 能容忍的污點key
operator"Equal" # Equal等于表示key=value , Exists不等于,表示當值不等于下面value正常
value"value1" # 值
effect"NoSchedule" # effect策略,可以設置為 NoSchedule、PreferNoSchedule 或 NoExecute
key"key1"
operator"Equal"
value"value1"
effect"NoExecute"
key"node.alpha.kubernetes.io/unreachable"
operator"Exists"
effect"NoExecute"
tolerationSeconds4000
- ?
?tolerations?
? 和 ??containers?
? 同級。 - ?
?key?
? 能容忍的污點 ??key?
?。 - ?
?operator?
? ??Equal?
? 等于表示 ??key=value?
? , ??Exists?
? 不等于,表示當值不等于下面 ??value?
? 正常 - ?
?value?
? 可以設置為 ??NoSchedule?
?、??PreferNoSchedule?
? 或 ??NoExecute?
?。 - ?
?effect?
? ??effect?
? 策略 - ?
?tolerationSeconds?
? 是當 pod 需要被驅逐時,可以繼續在 node 上運行的時間。
具體的使用方法請參考??官方文檔??。
- - -
作者:[SRE運維博客](https://www.cnsre.cn/ )
博客地址:[https://www.cnsre.cn/](https://www.cnsre.cn/)
- - -