一、Taints和Tolerations
Taint让Node拒绝Pod的运行,被标记为Taint的节点就是存在问题的节点,比如磁盘要满、资源不足、存在安全隐患要进行升级维护,希望新的Pod不会被调度过来,但被标记为Taint的节点并非故障节点,仍是有效的工作节点,所以仍需将某些Pod调度到这些节点上时,可以通过使用Toleration属性来实现。
在默认情况下,在Node上设置一个或多个Taint之后,除非Pod明确声明能给容忍这些污点,否则无法在这些Node上运行。可以使用kubectl taint命令为Node设置Taint信息:
kubectl taint nodes node1s key=value:NoSchedule #给Node节点加上Taint,该Taint的键为key,值为value,Taint效果是NoSchedule
这个设置为node1加上了一个Taint。该Taint的键为key,值为value,Taint的效果是NoSchedule。这意味着除非Pod明确声明可以容忍Taint,否则不会被调度到node1上。然后,需要在Pod上声明Toleration。下面的两个Toleration都被设置为可以容忍(Tolerate)具有该Taint的Node,使得Pod能给被调度到node1上:
tolerations:
- key: "key"
operation: “Equal”
value: "value"
effect: "NoSchedule"
或
tolerations:
- key: "key"
operation: "Exists"
effect: "NoSchedule"
Pod的Toleration声明中的key和effect需要与Taint的设置保持一致,并且满足以下条件:
- operator的值是Exists(无需指定value)