k8s 容忍和污点

news/2025/1/15 23:44:36/

文章目录

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-

http://www.ppmy.cn/news/1526701.html

相关文章

eclipse配置maven

eclipse配置maven 启动 Eclipse,转到 Window > Preferences 在左侧导航栏中,展开 Maven 节点。 在 User Settings 下,单击 Add。 浏览到 Maven 安装目录中 conf/settings.xml 文件。 在 Global Settings 下,单击 Add。 浏览到…

React源码学习(一):如何学习React源码

本系列源码学习,是基于 v16.13.1,v17.x与v16.x区别并不太大! 一、如何正确的学习React源码? 找到Github,转到React仓库,fork / clone源码:React 查看Readme,在Documentation中有Cont…

如何选择大带宽服务器租用

大带宽服务器能够为企业和用户提供网络性能,让用户可以快速的传输数据信息,保证服务器的稳定性,那企业在进行选择大带宽服务器租用,应该考虑到哪些因素呢? 对于大带宽服务器的选择,企业首先要明确自身的业务…

seafaring靶场渗透测试

1.sql注入漏洞 进来这里有个框 尝试xss没有那咱们就来试试搜索行注入 这里有东西说明闭合成功,接着就order by 有三列 三个地方都有回显 查看数据库 这里查表发现只有两个 先去看看admin先来看看列 然后看用户密码,这里密码直接显示出来了 2.文件上传漏…

(1)CLIP

CLIP 概述1. 训练与推理2. 最终效果与局限性3.后续应用3.1 DALL-E3.2 ActionCLIP3.3 CLIP-Event 概述 CLIP:contrastive language-image pretraining 利用文本的监督信号训练一个迁移能力特别强的视觉模型 传统的视觉模型,人工标注图像,那么…

Spring Boot- 配置文件问题

Spring Boot 配置文件问题探讨 Spring Boot 是目前主流的 Java 开发框架之一,其核心特性之一便是“约定优于配置”(Convention over Configuration)。在此基础上,Spring Boot 提供了灵活而强大的配置文件机制,帮助开发…

基于单片机的风机故障检测装置的设计与实现(论文+源码)

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析,本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示,系统风机故障检测装置采用STM32F103单片机作为控制器,并通过DS18B20温度传感器、ACS712电…

Elasticsearch之bool查询

bool 查询是 Elasticsearch 中最常用的复合查询类型,允许将多个查询组合在一起。它通过逻辑操作符(如 must、should、must_not 和 filter)来构建复杂的查询条件,从而满足多条件匹配、逻辑与(AND)、或&#…