Loading
0

解决kubernetes/k8s污点及污点容忍是什么?如何添加污点。

技术小学生微信公众号
腾讯云服务器大促销。
华为服务器

前言:本教程介绍什么是k8s的污点,如何添加污点以及删除和使用污点,以及污点容忍度是什么。
说明:完整的k8s教程可访问https://blog.tag.gg/showinfo-3-36255-0.html
Taint污点:节点不做普通分配调度,是节点属性。
应用场景:
1)专用节点:
2)配置特殊硬件节点,比如ssd。
3)给予Taint驱逐:
查看节点污点情况:

kubectl describe nodes node2 |grep Taint

如果显示“<none>”则没有添加污点。
污点值有三个:
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

查看是否删除:

[root@master ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.

设置污点并不允许 Pod 调度到该节点

kubectl taint node node1 key1=value1:NoSchedule

添加后查看

[root@master ~]# kubectl describe nodes node1 |grep Taint
Taints:             key1=value1:NoSchedule

目前正常添加pod不会调度到node1上,演示如下
创建一个pod:

kubectl create deployment web --image=nginx

查看创建情况

kubectl get pods -o wide

返回:(在node3上)

[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>

一次性创建5个pod,看是否会分配到node1

kubectl scale deployment web --replicas=5

查看结果是没有分配到node1上,如下。

[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>

设置污点尽量阻止污点调度到该节点

kubectl taint node node2 key2=value2:PreferNoSchedule

设置污点,不允许普通 Pod 调度到该节点,且将该节点上已经存在的 Pod 进行驱逐

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"

技术小学生微信公众号
华为服务器
腾讯云服务器大促销。

声明:站长码字很辛苦啊,转载时请保留本声明及附带文章链接:https://blog.tag.gg/showinfo-3-36272-0.html
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
上一篇:kubernetes/k8s节点标签添加、删除及使用范例
下一篇:kubernetes/k8s硬亲和性和软亲和性是什么如何使用