在 Kubernetes 中,污点和容忍度是用来控制哪些节点可以或不可以接受特定 Pod 的机制。这可确保 Pod 只在满足特定条件的节点上调度。


要防止某些 Pod 被调度到特定节点上,可以对这些节点应用污点。然后,可以向 Pod 添加 “容忍度”,允许它们在具有匹配 “污点 ”的节点上调度。

[代码清单]

# Taint a node
kubectl taint nodes <node-name> key=value:NoSchedule
# Define a Pod with a toleration
apiVersion: v1
kind: Pod
metadata:
 name: my-pod
spec:
 containers:
 - name: my-container
  image: nginx
 tolerations:
 - key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoSchedule"

[执行结果]

node/<node-name> tainted
pod/my-pod created

污点和容忍度共同影响 Kubernetes 的调度决策。当你用一个键、值和效应(如 NoSchedule)对一个节点进行污点处理时,你实质上是在告诉 Kubernetes 调度器,除非 Pod 有匹配的容忍度,否则不应将 Pod 放在这个节点上。Pod 规范中的容忍度允许 Pod “容忍 ”节点的污点并在其上进行调度: 键:标识污点: 值:与键相关的可选字符串: 污点和容忍度对于管理异构集群中的工作负载、确保敏感工作负载被隔离或特定硬件资源仅用于特定应用至关重要。

[小知识]

污点和容差并不能保证节点的独占访问。若要进行更严格的控制,可考虑将节点亲和(Node Affinity)或节点选择器(Node Selectors)与污点和容差结合使用。