Skip to content

污点

**污点(Taint)**表示此节点已被 key=value 污染,容器组调度不允许(PodToleratesNodeTaints 策略)或尽量不(TaintTolerationPriority 策略)调度到此节点,除非是能够容忍(Tolerations)key=value 污点的容器组。

  • 不允许调度 (NoSchedule)
  • 尽量不调度 (PreferNoSchedule)
  • 不允许并驱逐已有容器组 (NoExecute)

master nodes上有个污点

kubectl describe node master | grep Taint
`Taints: node-role.kubernetes.io/master:NoSchedule`

去除污点

bash
#!/bin/bash
read -p "请输入要去除污点的master节点的hostname(比如: master1):" node
kubectl taint nodes $node node-role.kubernetes.io/master:NoSchedule-

所以默认创建的Pod不会被调度master节点,除非被设置了容忍tolerations

yaml
# pod_toleration.yaml
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: pod1
spec:
  containers:
    - image: httpd:2.4.41-alpine
      name: pod1-container
      command: ["sleep", "3600"]
  # 容忍这个污点    
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
  nodeSelector:
    node-role.kubernetes.io/master: ""

参考

https://kubernetes.io/zh/docs/concepts/scheduling-eviction/taint-and-toleration/