在Kubernetes集群中,Taints和Tolerations是用于控制Pod是否可以被调度到某个Node上的机制。
- Taints:Taints是标记Node的一种方式,通过将一个或多个Taints添加到Node上,可以限制哪些Pod能够调度到该节点。例如,如果您希望禁止在生产环境中运行的应用程序部署到具有特定硬件或软件配置的节点上,则可以使用Taint来实现这一点。
- Tolerations:Tolerations是告诉Kubernetes哪些Pod可以调度到具有特定Taints的Node上的一种方法。如果您想要将特定应用程序部署到具有某些硬件或软件配置的节点上,则必须使用Tolerations来实现这一点。
例如,假设我们有三个节点:node1、node2和node3。我们希望防止任何Pod被调度到node1上,并且只允许具有“gpu=true”标签的Pod在node2和node3上进行调度。我们可以执行以下操作:
- 在 node1 上添加 taint
kubectl taint nodes node1 key=value:NoSchedule
- 在具有 toleration 的 Pod 上声明 toleration
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: gpu-container
image: gpu-image:v1.0
tolerations:
- key: "gpu"
operator: "Equal"
value: "true"
effect: "NoSchedule"
这样,只有具有“gpu=true”标签的Pod才能被调度到node2和node3上。而在node1上添加了taint,因此不会有任何Pod被调度到该节点上。




