节点taint(污点)
我们创建pod只是调度了了两个worker节点,而master节点状态也是Ready,但并没有pod调度上去,是因为出现了taint(污点)问题了。
如果我们给某个节点设置了taint,只有那些设置了tolerations(容忍污点)的pod才能运行在此节点。
- 查看节点是否设置了taint
kubectl describe nodes sun003 | grep Taints
kubectl describe nodes sun004 | grep Taints
kubectl describe nodes sun005 | grep Taints
- 给节点设置taint,设置了taint的节点不影响当前正在运行的pod。新建的pod将不会在被调度到该节点。
# 语法,TAINT_EFFECT的值一般是NoSchedule
kubectl taint nodes NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]
# 举例
kubectl taint node sun004 key1=value1:NoSchedule
- 创建deployment,查看现有pod
kubectl create deployment nginx --image=nginx --replicas=2
kubectl get pods -o wide
- 删除taint
# 语法
kubectl taint node NAME key-
# 举例
kubectl taint node sun004 key1-
kubectl describe nodes sun004 | grep Taints
kubectl delete deployments.apps nginx
pod的toleration(容忍污点)
如果pod需要在含有taint的节点上运行,则定义pod时需要指定toleration属性。pod里定义toleration格式如下:
spec:
tolerations:
- key: "key值"
operator: "Equal"
value: "value值"
effect: "值"
operator值有两个:
- Equal:value值和effect值与节点的taint的值必须一致。
- Exists:可以不指定value的值。在设置节点taint时value值非空只能使用Equal。
- 无value的例子,两者都可用
spec:
tolerations:
- key: "key值"
operator: "Equal"
value: ""
effect: "值"
# 或者
spec:
tolerations:
- key: "key值"
operator: "Exist"
effect: "值"
- value非空的例子,只能用Equal
spec:
tolerations:
- key: "key值"
operator: "Equal"
value: "value值"
effect: "值"