k8s之Taints与Tolerations(污点和容忍)

一 解释:
NodeAffinity节点亲和性,是Pod上定义的一种属性,使Pod能够按我们的要求调度到某个Node上,而Taints则恰恰相反,它可以让Node拒绝运行Pod,甚至驱逐Pod。
Taints(污点)是Node的一个属性,设置了Taints(污点)后,因为有了污点,所以Kubernetes是不会将Pod调度到这个Node上的,
于是Kubernetes就给Pod设置了个属性Tolerations(容忍),只要Pod能够容忍Node上的污点,那么Kubernetes就会忽略Node上的污点,就能够(不是必须)把Pod调度过去。
因此 Taints(污点)通常与Tolerations(容忍)配合使用。

二 添加污点
kubectl taint node [node] key=value[effect]
其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
NoSchedule :一定不能被调度。
PreferNoSchedule:尽量不要调度。
NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。
示例:kubectl taint node 172.20.8.22 test=22:NoSchedule

三 取消污点
比如设置污点:
kubectl taint node 172.20.8.22 test=22:NoSchedule
kubectl taint node 172.20.8.22 test=22:NoExecute
去除指定key及其effect:
kubectl taint nodes node_name key:[effect]- #(这里的key不用指定value)
[effect] 值: [ NoSchedule | PreferNoSchedule | NoExecute ]
去除指定key所有的effect:
kubectl taint nodes node_name key-
示例:
kubectl taint node 172.20.8.22 test:NoSchedule-

kubectl taint node 172.20.8.22 test:NoExecute-
kubectl taint node 172.20.8.22 test-

四 举例
1.设置污点
kubectl taint node 172.20.8.22 test=22:NoSchedule

2.设置容忍
apiVersion: v1
kind: Pod
metadata:
name: pod-taints
labels:
os: tomcat
spec:
tolerations: #设置容忍性

  • key: “test”
    operator: “Equal”
    #如果操作符为Exists,那么key、value属性可省略,如果不指定operator,则默认为Equal
    value: “22” #value可以省略
    effect: “NoSchedule”
    #意思是这个Pod要容忍的有污点的Node的key是test Equal value是22,效果是NoSchedule,
    #tolerations属性下各值必须使用引号,容忍的值都是设置Node的taints时给的值。
    containers:
  • name: pod-tains
    image: 172.16.16.21/library/tomcat:latest
    3.说明
    3.1 容忍所有NoSchedule污点
    Tolerations属性:空的key 如果再配合Exists 就能匹配所有的key与value ,也是是能容忍所有node的所有Taints

3.2 空的effect 匹配所有的effect
3.3 立即驱逐NoExecute,可以设置宽容时间,容忍时间到了,才会驱散
#设置Pod的宽限时间
spec:
tolerations: #设置容忍性

  • key: “test”
    operator: “Equal” #如果操作符为Exists,那么value属性可省略
    value: “22”
    effect: “NoExecute”
    tolerationSeconds: 180
    #如果运行此Pod的Node,被设置了具有NoExecute效果的Taint(污点),这个Pod将在存活180s后才被驱逐。
    #如果没有设置tolerationSeconds字段,将永久运行。
    3.4 多个污点需要多个容忍,才能调度
    3.5 类型DaemonSet的容器运行的node设置污点,该容器消失后不会在其他节点新建(注意)。
    五 查看和修改
    1.查看
    执行kubectl get node 172.20.8.22 -o yaml

2.修改
kubectl edit node 172.20.8.22

修改后执行 :wq 保存退出

修改成功

六 参考文档
https://cloud.tencent.com/info/21f27eb131873f979d6275f085dfabdc.html
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/(官网很详细)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值