Kubernetes Taint(污点) 和 Toleration(容忍)

1621349160463

Author:rab


目录

    • 前言
    • 一、Taint(污点)
      • 1.1 概述
      • 1.2 查看节点 Taint
      • 1.3 标记节点 Taint
      • 1.4 删除节点 Taint
    • 二、Toleration(容忍)


前言

Kubernetes 中的污点(Taint)和容忍(Toleration)是用于调度和管理容器工作负载的重要概念,特别是在多节点集群中。它们允许你指定哪些节点可以承载哪些 Pod,并控制 Pod 在哪些节点上可以运行。

说白了,污点就是故意给某个节点服务器上设置个污点参数,那么你就能让生成 Pod 的时候使用相应的参数去避开有污点参数的 Node 服务器。而容忍则是当资源不够用的时候,即使这个 Node 服务器上有污点,那么只要 Pod 的 yaml 配置文件中写了容忍参数,最终 Pod 还是会容忍的生成在该污点服务器上,Master 节点是默认为 NoSchedule。

一、Taint(污点)

1.1 概述

污点是一种属性,它被赋予一个 Kubernetes 节点,表示该节点有一些特定的限制或条件。节点上的污点可以阻止不具备相应容忍的 Pod 在上面运行。污点可以用于标记节点,以确保只有满足某些条件的 Pod 能够被调度到该节点上。例如,你可以为某个节点设置一个污点,要求只有具备特定标签或硬件要求的 Pod 才能在该节点上运行。

污点的一般格式如下:

key=value:effect
  • key 是污点的名称。
  • value 是与污点相关的值,通常为空字符串,表示没有特定值要求。
  • effect 可以是 NoSchedulePreferNoScheduleNoExecute
    • NoSchedule 表示禁止 Pod 被调度到有该污点的节点上(这是 K8s 集群 Master 节点默认的污点效果);
    • PreferNoSchedule 表示不鼓励调度到有该污点的节点,但如果没有其他选择,仍然可以调度;
    • NoExecute 表示已经在节点上运行的 Pod 在后续不满足污点条件时将被驱逐。

1.2 查看节点 Taint

1、首先获取节点信息

kubectl get node

image-20231031114317817

2、查看某个节点 Taint(污点)

比如我们查看 master 节点的污点情况。

kubectl describe node k8s-master# 重点关注Taints即可,如图,默认情况下master节点有污点,且为node-role.kubernetes.io/master:NoSchedule
# 这个污点的目的是防止普通的工作负载 Pod 被调度到主节点上
# 以确保主节点仅用于集群管理任务和控制面组件(如etcd、kube-scheduler、kube-controller-manager等)的运行

image-20231031114431884

我们再来看看 worker 节点的污点情况。

kubectl describe node k8s-work1# 我们会发现,默认情况下,worker节点是没有污点的(<none>)

image-20231031114647173

1.3 标记节点 Taint

1、首先给节点打标签

比如将 k8s-work1 节点标签为 GPU 的节点

kubectl label nodes k8s-work1 hardware-type=GPU

查看节点标签

kubectl get node --show-labels

image-20231031131922526

2、添加 GPU 污点

接下来,为带有 GPU 资源的节点添加 GPU 污点,以确保只有具有 GPU 容忍的 Pod 被调度到这个节点上。创建一个 GPU 污点的 YAML 文件如下:

vim nodeTaint.yml
apiVersion: v1
kind: Node
metadata:name: k8s-work1
spec:taints:- key: hardware-typevalue: GPUeffect: NoSchedule# 说明
# key:即节点标签的key
# value:即节点标签的value
# effect:污点效果(NoSchedule或PreferNoSchedule或NoExecute)

或通过命令添加污点也是一样的。

kubectl taint nodes k8s-work1 hardware-type=GPU:NoSchedule

3、创建 GPU 容忍的 Pod

现在,我们可以创建一个需要 GPU 资源的 Pod,并为它添加 GPU 容忍。

vim nodeTaintPod.yml
apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: nginximage: nginxtolerations:- key: hardware-typeoperator: Equalvalue: GPUeffect: NoSchedule

这个 YAML 文件定义了一个名为 gpu-pod 的 Pod,它包含一个容器,该容器需要 GPU 资源。然后在 tolerations 部分指定了 GPU 容忍,以匹配节点上的 GPU 污点。

创建 Pod:

kubectl apply -f nodeTaintPod.yml

现在,只有具有 GPU 容忍的 Pod 才能被调度到带有 GPU 污点的节点上,以确保 GPU 资源得到合理的分配。其他普通的 Pod 不会被调度到这个节点上。

验证:

kubectl get pod -owide

image-20231031134514676

这是一个简单的示例,演示了如何使用污点和容忍来满足特定的硬件要求。你可以根据自己的需求创建不同类型的污点和容忍来管理 Pod 的调度。

那如何将 gpu-pod 驱逐出该节点呢?包括在 work1 节点上的所有 Pod

答案:我们只需要将 work1 节点打上 NoExecute 污点即可。

此时,但凡不能容忍的 Pod 都会脱离该节点,并在其他 work 节点新起 Pod。

kubectl taint nodes k8s-work1 hardware-type=GPU:NoExecute# 如下图,原本work1节点上的Pod已经全部转移到work2节点上了

image-20231031142639966

1.4 删除节点 Taint

删除方法很简单,就是在添加污点指令的末尾加个-号即可:

kubectl taint nodes k8s-work1 hardware-type=GPU:NoExecute-

image-20231031143229732

此时该节点的污点已经被删除,那之前原本在该节点上的运行的 Pod 会恢复回来吗?答案是:不会,但是可以正常的运行其他普通 Pod 了。

二、Toleration(容忍)

容忍其实在上面我们已经提到了,这里在简单说一下。

Toleration 配置方式:

1、方式一

...
tolerations:
- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"
...

2、方式二

...
tolerations:
- key: "key"operator: "Exists"effect: "NoSchedule"

注意以下两种情况:

如果一个 Toleration 的 key 为空且 operator 为 Exists,表示这个 Toleration 与任意的 key、value 和 effect 都匹配,即这个Toleration 能容忍任意的 Taint:

...
tolerations:
- operator: "Exists"
...

如果一个 Toleration 的 effect 为空,则 key 与之相同的相匹配的 Taint 的 effect 可以是任意值:

...
tolerations:
- key: "key"operator: "Exists"
...

说明:

Kubernetes 会自动给 Pod 添加一个 key 为 node.kubernetes.io/not-ready 的 Toleration 并配置 tolerationSeconds=300,同样也会给 Pod 添加一个 key 为 node.kubernetes.io/unreachable 的 Toleration 并配置 tolerationSeconds=300,除非用户自定义 key,否则会采用这个默认设置。

如果一个使用了很多本地状态的应用程序在网络断开时,仍然希望停留在当前节点上运行一段时间,愿意等待网络恢复以避免被驱逐。在这种情况下,Pod 的 Toleration 可以这样配置:

...
tolerations:
- key: "node.alpha.kubernetes.io/unreachable"operator: "Exists"effect: "NoExecute"tolerationSeconds: 6000
...

此时,这个 Pod 就不会像普通 Pod 那样立即被驱逐,而是再等上 6000 秒才被删除(驱逐)。

—END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D模拟场景开发引擎

在3D工程模拟开发中&#xff0c;有一些专门的引擎和工具可供选择&#xff0c;以帮助您创建逼真的三维模拟和模型。以下是一些用于3D工程模拟的开发引擎和工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

SCADA在污水和供水系统解决方案

1. 引言 随着城市化的不断发展&#xff0c;污水和供水系统的管理变得越来越重要。为了提高运营效率和监控系统状态&#xff0c;许多污水处理厂开始使用SCADA系统。 SCADA系统具有实时数据采集、监控和控制功能&#xff0c;可以帮助污水处理厂运营人员实时了解系统的运行情况&…

Python 学习1 基础

文章目录 基础字符串字面量常用的值类型注释变量print语句数据类型数据类型转换标识符运算符 字符串拓展小结 2023.10.28 周六 最近打算学一下Python&#xff0c;毕竟确实简单方便&#xff0c;而且那个编程语言排名还是在第一。不过不打算靠它吃饭&#xff0c;深不深入暂且不说…

linux-vsftp虚拟多用户

目录 1.安装vsftp 2.安装DB工具&#xff0c;能转化普通文件为vsftpd识别数据库加密文件 3.创建登录虚拟用户的名单 4.加密文件 6.需要修改vsftpd的配置文件 7.修改vsftp的配置文件&#xff0c;加载支持虚拟用户模式 8.针对不同用户开启不同权限 9.重启服务 10.测试 安…

记录微调chatglm3

用于记录chatglm3的过程&#xff0c;防止忘记 需要注意的 可以使用xtuner -h查看有哪些功能可以使用。 [2023-10-31 11:40:18,643] [INFO] [real_accelerator.py:158:get_accelerator] Setting ds_accelerator to cuda (auto detect) 10/31 11:40:22 - mmengine - INFO - Ar…

软件测试之接口测试详解

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给…

塔望食观察丨从“一药难求”看国内退烧药品牌是怎样炼成的

随着新冠疫情防疫的全面放开&#xff0c;感染患者不断增多&#xff0c;市民在未知的恐慌中开启了囤药模式&#xff0c;药店中的“四类药”&#xff08;退烧、止咳、抗病毒、抗生素类药品&#xff09;被一抢而空&#xff0c;尤其是以退烧类药物更为短缺&#xff0c;以解热镇痛的…

针灸养生服务预约小程序的效果如何

针灸服务的市场需求度很高&#xff0c;每个城市中都有不少相关品牌&#xff0c;对商家来说&#xff0c;如何引流拓客、打造品牌是生意开展的首要条件之一&#xff0c;且主要以同城用户为主&#xff0c;或连锁情况下为各店引流&#xff0c;但传统线下模式很难实现生意拓展。 那…

缓存和数据库一致性解决方案

引入缓存提高性能 如果你的业务处于起步阶段&#xff0c;流量非常小&#xff0c;那无论是读请求还是写请求&#xff0c;直接操作数据库即可&#xff0c;这时你的架构模型是这样的&#xff1a; 但随着业务量的增长&#xff0c;你的项目请求量越来越大&#xff0c;这时如果每次都…

双十一限时优惠!沃通SSL证书、代码签名证书年度好价

2023年11月01日至11月11日&#xff0c;沃通2023“双十一限时特惠”活动&#xff0c;精选9款SSL证书、国密SSL证书、代码签名证书产品推出年度好价&#xff0c;部分SSL证书产品低至5折&#xff0c;更有EV代码签名证书爆款特惠&#xff01;多种数字证书一站式采购&#xff0c;解决…

外汇天眼:GOMAX──假网友热心教投资,高返利活动骗入金

在通讯科技如此发达的今日&#xff0c;人们愈来愈习惯透过网路交友&#xff0c;寻找志同道合的伙伴&#xff0c;甚至发展一段亲密关系。 然而&#xff0c;近年来假交友诈骗十分猖獗&#xff0c;至今已造成许多民众极大的财务损失&#xff0c;成为无法忽视的社会问题。 不久前&a…

听GPT 讲Rust源代码--library/std(6)

题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…

基于单片机的智能电子鼻的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、智能电子鼻系统的设计方案1.1智能电子鼻系统的设计思路1.2智能电子鼻系统的设计流程图1.3智能电子鼻系统的硬件数…

leetcode第369周赛

2917. 找出数组中的 K-or 值 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。 返回 nums …

4.1 Bloom算法

一、Bloom算法介绍 1.具体效果 2.实现思路 先将原图按照一定阈值提取较亮的区域模糊提取出的图像将模糊过的图像与原图混合 3.HDR与LDR LDR&#xff08;Low Dynamic Range&#xff0c;低动态范围&#xff09; JPG、PNG格式图片RGB范围在[0,1]之间 HDR&#xff08;High Dynam…

计算机网络第3章-TCP协议(2)

TCP拥塞控制 TCP拥塞控制的三种方式&#xff1a; 慢启动、拥塞避免、快速恢复 慢启动 当一条TCP连接开始时&#xff0c;cwnd的值是一个很小的MSS值&#xff0c;这使得初始发送速率大约为MSS/RTT。 在慢启动状态&#xff0c;cwnd的值以1个MSS开始并且每当传输的报文段首次被…

使用Hystrix实现请求合并,降低服务器并发压力

1.引入Hystrix <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency> 2.在启动类上开启Hystrix功能 EnableHystrix 3.请求合并实现代码 import com…

解决Linux Debian12系统中安装VirtualBox虚拟机无法使用USB设备的问题

Debian12系统中安装VirtualBox&#xff0c;再VirtualBox虚拟机中无法使用 USB设备。如下图所示&#xff1a; 解决方法如下&#xff1a; 1.安装 Virtualbox增强功能。如下图所示&#xff1a; 2.添加相关用户、用户组&#xff08; Virtualbox 装完成后会有 vboxusers 和 vboxs…

Linux 网络驱动实验(PHY芯片LAN8720)

目录 嵌入式网络简介嵌入式下的网络硬件接口MII/RMII 接口MDIO 接口RJ45 接口I.MX6ULL ENET 接口简介 PHY 芯片详解PHY 基础知识简介LAN8720A 详解SR8201F 详解 Linux 内核网络驱动框架net_device 结构体net_device_ops 结构体sk_buff 结构体网络NAPI 处理机制 I.MX6ULL 网络驱…

SQL SERVER 表分区

1. 概要说明 SQL SERVER的表分区功能是为了将一个大表&#xff08;表中含有非常多条数据&#xff09;的数据根据某条件&#xff08;仅限该表的主键&#xff09;拆分成多个文件存放&#xff0c;以提高查询数据时的效率。创建表分区的主要步骤是 1、确定需要以哪一个字段作为分…