1. 程式人生 > 其它 >汙點和容忍度taint tolerations

汙點和容忍度taint tolerations

汙點和容忍度taint tolerations
官方文件寫的真的挺好:
https://kubernetes.io/zh/docs/concepts/scheduling-eviction/taint-and-toleration/

汙點和容忍度

節點親和性 是 Pod 的一種屬性,它使 Pod 被吸引到一類特定的節點 (這可能出於一種偏好,也可能是硬性要求)。 汙點(Taint)則相反——它使節點能夠排斥一類特定的 Pod。

容忍度(Toleration)是應用於 Pod 上的,允許(但並不要求)Pod 排程到帶有與之匹配的汙點的節點上。

汙點和容忍度(Toleration)相互配合,可以用來避免 Pod 被分配到不合適的節點上。 每個節點上都可以應用一個或多個汙點,這表示對於那些不能容忍這些汙點的 Pod,是不會被該節點接受的。

自己稍微小結一下,
給節點打汙點:

您可以使用命令 kubectl taint 給節點增加一個汙點。比如,

kubectl taint nodes node1 key1=value1:NoSchedule

去除汙點

kubectl taint nodes node1 key1=value1:NoSchedule-

然後tolerations 作用於pod,分2中區別不大

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"

operator 分Equal和Exists ,後者對應value為空的情況。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "example-key"
    operator: "Exists"
    effect: "NoSchedule"

上面就是value不存在的情況,operator用Exists。
真的有試用場景,就是想讓節點上面只放某類應用,汙點很好用,可以配合親和性使用。