Kubernetes中的 Taints(污点)和 Tolerations(容忍)是用于控制 Pod 调度的机制。它们允许集群管理员指定哪些节点具有特定的限制或特性,并允许开发者指定他们的 Pod 能够在哪些节点上运行。
1. 污点(Taints):
污点是对节点的标记,用于表示节点的限制或特性。这些限制可以是例如:不希望在该节点上运行特定类型的 Pod,或者要求特定的条件才能在节点上调度 Pod。
-
添加污点:通过在节点上添加污点,管理员可以指定这些节点的特殊属性或限制。例如,可以给节点添加污点,要求节点上只能运行特定的 Pod。
-
示例:管理员可以添加一个污点,限制节点上的 Pod,如下:
kubectl taint nodes node1 key=value:NoSchedule
这将给名为
node1
的节点添加一个 key=value 的污点,并指定 NoSchedule。这表示只有那些有对应容忍设置的 Pod 才能在这个节点上被调度。
2. 容忍(Tolerations):
容忍是指定 Pod 允许容忍的污点,即使节点被标记有特定的污点,也可以让特定的 Pod 在这些节点上调度。
-
为 Pod 添加容忍:通过在 Pod 的定义中添加 tolerations 字段,可以允许 Pod 在拥有特定污点的节点上运行。
-
示例:为 Pod 添加对特定污点的容忍设置,如下:
tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoSchedule"
这个例子表示 Pod 具有对 key=value 污点的容忍,即使节点被标记为 NoSchedule,该 Pod 也能够被调度到该节点上。
污点和容忍的应用场景:
-
节点分离不同类型的工作负载:允许一些节点专门用于运行特定类型的工作负载,例如专用节点用于机器学习任务。
-
维护节点:暂时从节点中移除 Pod,使其可以进行维护工作。
这些机制允许管理员更加精细地控制集群中 Pod 的调度行为,以及哪些节点应该运行哪些类型的工作负载。