前面介绍的 NodeAffinity 节点亲和性,是在 Pod 上定义的一种属性,使得 Pod 能够调度到某些 Node 上运行(优先选择或强制要求)。Taint 则正好相反,它让 Node拒绝 Pod 的运行。
Taint 需要和 Toleration 配合使用,让 Pod 避开那些不合适的 Node。在 Node 上设置一个或多个 Taint 之后,除非 Pod 明确生命能够容忍这些污点,否则无法在这些 Node 上运行。Toleration 是 Pod 的属性,让 Pod 能够(注意,只是能够,而非必须)运行在标注了 Taint 的 Node 上。
可以用 kubectl taint 命令为 Node 设置 Taint 信息:
$ kubectl taint nodes node1 key=value:NoSchedule
这个设置为 node1 加上了一个 Taint。该 Taint的键为 key,值为 value,Taint的效果是 NoSchedule。这意味着除非 Pod 明确生命可以容忍这个 Taint,否则就不会被调度到 node1上。
然后,需要在 Pod 上生命 Toleration。下面的两个 Toleration 都被设置为可以容忍(Tolerate)具有该 Taint 的 Node,使得 Pod 能够被调度到 node1 上:
tolerations:
- key: "key"
operator: &