Taint(污點)和 Toleration(容忍)能夠做用於 node 和 pod 上,其目的是優化 pod 在集羣間的調度,這跟節點親和性相似,只不過它們做用的方式相反,具備 taint 的 node 和 pod 是互斥關係,而具備節點親和性關係的 node 和 pod 是相吸的。另外還有能夠給 node 節點設置 label,經過給 pod 設置 nodeSelector 將 pod 調度到具備匹配標籤的節點上。node
Taint 和 toleration 相互配合,能夠用來避免 pod 被分配到不合適的節點上。每一個節點上均可以應用一個或多個 taint ,這表示對於那些不能容忍這些 taint 的 pod,是不會被該節點接受的。若是將 toleration 應用於 pod 上,則表示這些 pod 能夠(但不要求)被調度到具備相應 taint 的節點上。ide
NoSchedule: 必定不能被調度 PreferNoSchedule: 儘可能不要調度 NoExecute: 不只不會調度, 還會驅逐Node上已有的Pod kubectl taint nodes node1 key1=value1:NoSchedule kubectl taint nodes node1 key1=value1:NoExecute kubectl taint nodes node1 key2=value2:NoSchedule
kubectl describe node node1
kubectl taint node node1 key1:NoSchedule- # 這裏的key能夠不用指定value kubectl taint node node1 key1:NoExecute- kubectl taint node node1 key1- # 刪除指定key全部的effect kubectl taint node node1 key2:NoSchedule-
詳細使用方法請參考
配置污點優化
kubectl taint nodes 172.16.8.100 node-role.kubernetes.io/etcd=true:NoExecute node-role.kubernetes.io/controlplane=true:NoSchedule