Kubernetes中的Taint和Toleration(汙點和容忍)
阿新 • • 發佈:2019-07-08
Taint 和 toleration 相互配合,可以用來避免 pod 被分配到不合適的節點上。每個節點上都可以應用一個或多個 taint ,這表示對於那些不能容忍這些 taint 的 pod,是不會被該節點接受的。如果將 toleration 應用於 pod 上,則表示這些 pod 可以(但不要求)被排程到具有相應 taint 的節點上。
示例
以下分別以為 node 設定 taint 和為 pod 設定 toleration 為例。
為 node 設定 taint
為 node1 設定 taint:
kubectl taint nodes node1 key1=value1:NoSchedule kubectl taint nodes node1 key1=value1:NoExecute kubectl taint nodes node1 key2=value2:NoSchedule
刪除上面的 taint:
kubectl taint nodes node1 key1:NoSchedule-
kubectl taint nodes node1 key1:NoExecute-
kubectl taint nodes node1 key2:NoSchedule-
檢視 node1 上的 taint:
kubectl describe nodes node1
為 pod 設定 toleration
只要在 pod 的 spec 中設定 tolerations 欄位即可,可以有多個 key
,如下所示:
tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" - key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" - key: "node.alpha.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000
value
的值可以為NoSchedule
、PreferNoSchedule
或NoExecute
。tolerationSeconds
是當 pod 需要被驅逐時,可以繼續在 node 上執行的時間。
詳細使用方法請參考官方文件。
kubectl taint node [node] key=value[effect] 其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ] NoSchedule: 一定不能被排程 PreferNoSchedule: 儘量不要排程 NoExecute: 不僅不會排程, 還會驅逐Node上已有的Pod