1. 程式人生 > >Kubernetes中的Taint和Toleration(汙點和容忍)

Kubernetes中的Taint和Toleration(汙點和容忍)

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 的值可以為 NoSchedulePreferNoSchedule 或 NoExecute
  • tolerationSeconds 是當 pod 需要被驅逐時,可以繼續在 node 上執行的時間。

詳細使用方法請參考官方文件

 

kubectl taint node [node] key=value[effect]   
     其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
      NoSchedule: 一定不能被排程
      PreferNoSchedule: 儘量不要排程
      NoExecute: 不僅不會排程, 還會驅逐Node上已有的Pod

參考