说明:完整的k8s教程可访问:https://www.zfcdn.xyz/showinfo-3-36255-0.html
Taint污点:节点不做普通分配调度,是节点属性。
应用场景:
1)专用节点:
2)配置特殊硬件节点,比如ssd。
3)给予Taint驱逐:
查看节点污点情况:
如果显示“<none>”则没有添加污点。kubectl describe nodes node2 |grep Taint
污点值有三个:
NoSchedule:一定不被调用
PreferNoSchdule:尽量不被调度,有几率调度。
NoExecute:不会被调度,并且还会驱逐调度到其他节点。
为节点添加污点:
执行后结果:kubectl taint node node1 key=value:NoExecute
删除污点:[root@master ~]# kubectl describe nodes node1 |grep Taint
Taints: key=value:NoExecute
返回:kubectl taint node node1 key1-
范例:[root@master ~]# kubectl taint node node1 key1-
node/node1 untainted
[root@master ~]# kubectl describe nodes node1 |grep Taint
Taints: <none>
方便演示,将之前创建的测试pod删除
查看是否删除:kubectl delete deployment nginx
设置污点并不允许 Pod 调度到该节点[root@master ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.
添加后查看kubectl taint node node1 key1=value1:NoSchedule
目前正常添加pod不会调度到node1上,演示如下[root@master ~]# kubectl describe nodes node1 |grep Taint
Taints: key1=value1:NoSchedule
创建一个pod:
查看创建情况kubectl create deployment web --image=nginx
返回:(在node3上)kubectl get pods -o wide
一次性创建5个pod,看是否会分配到node1[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-76b56fd968-h2qjz 1/1 Running 0 70s 10.244.3.5 node3 <none> <none>
查看结果是没有分配到node1上,如下。kubectl scale deployment web --replicas=5
设置污点尽量阻止污点调度到该节点[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-76b56fd968-85tpt 0/1 ContainerCreating 0 17s <none> node3 <none> <none>
web-76b56fd968-h2qjz 1/1 Running 0 2m59s 10.244.3.5 node3 <none> <none>
web-76b56fd968-k982z 0/1 ContainerCreating 0 17s <none> node2 <none> <none>
web-76b56fd968-lxjlz 0/1 ContainerCreating 0 17s <none> node3 <none> <none>
web-76b56fd968-mxqp4 0/1 ContainerCreating 0 17s <none> node2 <none> <none>
设置污点,不允许普通 Pod 调度到该节点,且将该节点上已经存在的 Pod 进行驱逐kubectl taint node node2 key2=value2:PreferNoSchedule
污点容忍:kubectl taint node node3 key3=value3:NoExecute
如果希望有些 Pod 能够忽略节点的污点,继续能够调度到该节点,就可以对 Pod 设置容忍,让 Pod 能够容忍节点上设置的污点。
对于 Pod 设置容忍, 以下两种方式都可以:
# 容忍的 key、value 和对应 effect 也必须和污点 taints设置保持一致
......
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
# 容忍 tolerations 的 key 和要污点 taints 的 key 一致,且设置的 effect 也相同,不需要设置 value
......
tolerations:
- key: "key"
operator: "Exists"
effect: "NoSchedule"
文章评论 本文章有个评论