k8s 容忍和污点

文章目录

Taint作用在节点上,能够使节点排斥一类特定的Pod,也就是不能“兼容”该节点的污点的Pod。对应的Toleration作用在Pod上,意为容忍,也就是可以兼容某类污点。

给节点增加一个Taint也很简单,直接使用kubectl taint命令即可,比如给minikube节点设置一个Taint

kubectl taint nodes minikube taintKey=taintValue:NoSchedule

上述命令给minikube增加了一个Taint,它的taintKey(可以设置为其他值)对应的就是Taint的键,taintValue(可以设置为其他值)对应就是Taint的值,Effect对应的就是NoSchedule,顾名思义,也就是这个Taint的“影响”相当于Taint的“级别”​。这表明只有和这个Taint相匹配的Toleration的Pod才能够被分配到minikube节点上。按如下方式在PodSpec中定义Pod的Toleration,就可以将Pod部署到该节点上。

方式一:完全匹配,operator为Equal,比如能容忍key名为taintKey、value为taintValue、effect为NoSchedule的Taint(Toleration可以定义多个)​:

在这里插入图片描述

方式二:不完全匹配,operator为Exists,比如能容忍key名为taintKey、effect为NoSchedule的Taint,不考虑Taint的value是什么:

在这里插入图片描述

当然,还可以匹配更大的范围,比如能容忍key名为taintKey的Taint:

在这里插入图片描述

综上可知,如果Pod的Toleration配置的operator为Exists(此时toleration不指定value)​,那么一个Toleration和一个Taint相匹配是指它们有一样的key和effect,如果operator是Equal,则它们的value也应该相等。

上述例子使用到effect的一个值NoSchedule(禁止调度的意思,一般该节点要维护或者刚添加节点会配置该Taint)​,

也可以使用PreferNoSchedule,该值定义尽量避免将Pod调度到存在其不能容忍的Taint的节点上,但并不是强制的,也就是说,一个没有配置Toleration的Pod会优先部署至其他节点,没有其他可以调度的节点时,还是可以部署到effect为PreferNoSchedule的节点上的,NoSchedule没有这种机制。

Effect的值还可以设置为NoExecute,如果一个节点的Taint的Effect配置为NoExecute,那么已经在这个节点上的Pod没有配置容忍该Taint的Toleration,这个节点上的Pod会在指定时间内被驱逐到其他节点上,但Effect为NoSchedule或PreferNoSchedule时不会驱逐已经在该节点上的Pod。

一个节点可以设置多个Taint,也可以给一个Pod添加多个Toleration。Kubernetes处理多个Taint和Toleration的过程就像一个过滤器:从一个节点的所有Taint开始遍历,过滤掉那些Pod中存在与之相匹配的Toleration的Taint,余下未被过滤的Taint的effect值决定了Pod是否会被分配到该节点,特别是以下情况:

  • 如果未被过滤的Taint中存在一个以上effect值为NoSchedule的Taint,则Kubernetes不会将Pod分配到该节点。

  • 如果未被过滤的Taint中不存在effect值为NoExecute的Taint,但是存在effect值为PreferNoSchedule的Taint,则Kubernetes会尝试将Pod分配到该节点。

  • 如果未被过滤的Taint中存在一个以上effect值为NoExecute的Taint,则Kubernetes不会将Pod分配到该节点(如果Pod还未在节点上运行)​,或者将Pod从该节点驱逐(如果Pod已经在节点上运行)​。

删除一个Taint和删除Label类似,使用减号(‒)即可:

   kubectl taint nodes k8s-node01 key1:NoExecute-
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
污点容忍度是Kubernetes中用来控制Pod调度的机制。污点(Taint)是指在节点上设置的一种属性,用于排斥一类特定的Pod。而容忍度(Toleration)是指在Pod上设置的属性,用于指定Pod是否可以被调度到具有匹配污点的节点上。 当一个节点上设置了污点时,只有那些在Pod的容忍度中定义了匹配该污点的规则的Pod才能被调度到该节点上。如果Pod没有定义容忍度或者容忍度不匹配节点上的污点,则该Pod将不会被调度到该节点上。 举个例子,假设我们在节点node1上设置了一个污点,key为k1,value为v1,effect为NoSchedule。如果一个Pod的容忍度中定义了匹配这个污点的规则,比如key为test,value为16,effect为NoSchedule,那么这个Pod就可以被调度到拥有这个污点的node1节点上。 总结来说,污点容忍度是相互匹配的关系。通过在节点上设置污点和在Pod上设置容忍度,我们可以控制Pod的调度行为,避免将Pod调度到不合适的节点上。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [k8s--基础--20--污点容忍度](https://blog.csdn.net/zhou920786312/article/details/126241579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值