【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

news2024/11/27 4:21:04

【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

  • 1、污点(Taints)
  • 2、容忍度(Tolerations)
  • 3、示例演示-测试污点的具体应用场景
    • 3.1 给节点打污点,创建pod
    • 3.2 删除节点污点


💖The Begin💖点点关注,收藏不迷路💖

在 Kubernetes(k8s)中,污点(Taints)与容忍度(Tolerations)是两个重要的概念,它们用于控制 Pod 对节点的调度行为。污点允许节点标记自身,以指示它们不接受特定类型的 Pod,而容忍度允许 Pod 标记自身,以指示它们可以容忍特定类型的节点。

本文将深入探讨污点与容忍度的概念、用法以及如何在 Kubernetes 集群中使用它们。

1、污点(Taints)

污点是 Kubernetes 中节点的一个属性,它用于标记节点不接受哪些类型的 Pod。节点上的污点会阻止具有相同键值对的 Pod 被调度到该节点上。用在节点上,定义的是污点。

组成结构:key=value:Effect

1、查看节点(Node)资源对象的 spec.taints 字段的详细说明

kubectl explain node.spec.taints

污点包含以下几个关键属性:

1、Key(键): 污点的键,用于唯一标识污点。
2、Value(值): 污点的值,与键一起构成键值对,用于具体指定污点的类型。
3、Effect(效果): 污点的效果,表示当 Pod 与节点的污点匹配时所采取的行动。常见的效果包括:

  • NoSchedule:阻止调度新的 Pod 到节点上。
  • PreferNoSchedule:尽量避免调度新的 Pod 到节点上,但不是强制性的。
  • NoExecute:将节点上已有的 Pod 驱逐出去,直到 Pod 满足对应的容忍度规则。

4、timeAdded: 表示污点(Taint)被添加的时间,这个字段只有在 NoExecute 类型的污点中才会被写入。这意味着它仅在节点上已经存在的 Pod 需要被驱逐时才会记录。

污点的效果详解:

在这里插入图片描述

在这里插入图片描述

# 添加污点到节点
kubectl taint nodes <node-name> <key>=<value>:<effect>


# 删除节点污点
kubectl taint nodes <node-name> key-

key- 表示要删除的污点的键。在键后面加上 -,以表示删除该键对应的污点。


# 查看节点的污点信息
kubectl describe nodes <node-name>

kubectl describe nodes k8s-master

在这里插入图片描述

例如:查看 kube-apiserver-k8s-master Pod 的详细信息

kubectl describe pod kube-apiserver-k8s-master

在这里插入图片描述

在这里插入图片描述

2、容忍度(Tolerations)

容忍度是 Pod 的一个属性,它允许 Pod 在调度时容忍具有指定污点的节点。通过为 Pod 添加容忍度,可以让 Pod 在特定类型的节点上运行。
用在Pod上,定义的是容忍度,能容忍哪些污点。

# 在 Pod 的规范中添加容忍度
tolerations:
- key: <key>
  operator: <operator>
  value: <value>
  effect: <effect>
  tolerationSeconds: <seconds>


例如:

apiVersion: v1  # 指定 Kubernetes API 版本为 v1
kind: Pod  # 定义资源类型为 Pod
metadata:  # 元数据部分,包含 Pod 的名称等信息
  name: special-pod  # 指定 Pod 的名称为 special-pod
spec:  # Pod 的规格部分,包含容器和容忍度等信息
  containers:  # 容器部分,定义 Pod 中的容器
  - name: special-container  # 容器的名称为 special-container
    image: nginx  # 容器使用的镜像为 nginx
  tolerations:  # 容忍度部分,定义 Pod 的容忍度
  - key: special-node  # 定义容忍度的键为 special-node
    operator: Exists  # 定义容忍度的操作符为 Exists,表示只要存在该键即可容忍
    effect: NoSchedule  # 定义容忍度的效果为 NoSchedule,表示节点上有特定污点时不会调度该 Pod

3、示例演示-测试污点的具体应用场景

3.1 给节点打污点,创建pod

1、不定义容忍度

1、使用 kubectl taint 命令来给节点打上污点。以下是具体的命令:

[root@k8s-master ~]# kubectl taint nodes k8s-node01 special-node=true:NoSchedule
node/k8s-node01 tainted
[root@k8s-master ~]#

## 为 k8s-node01 的节点打上一个名为 special-node 的污点,值为 true,效果为 NoSchedule,

## 即表示这个节点上的 Pod 将不会被调度,除非它们定义了对应的容忍度。

2、创建pod,不定义容忍度,yaml清单:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx-container
    image: nginx

## 定义了一个简单的 Pod,其中包含一个名为 nginx-container 的容器,使用了 Nginx 的镜像。

## 由于没有定义任何容忍度,因此这个 Pod 将会尝试在集群中的任何节点上被调度。


3、更新资源文件

kubectl apply -f nginx-pod.yaml

4、查看pod
kubectl get pods -o wide

在这里插入图片描述

2、定义污点效果-设置排斥等级

1、删除前面创建的污点
kubectl taint nodes k8s-node01 special-node-

2、定义排斥等级,效果为 NoExecute
kubectl taint nodes k8s-node01 special-node=true:NoExecute

这意味着该节点上的 Pod 如果不满足容忍度条件,将会被驱逐(Evicted)。

3、定义容忍度

创建一个名为 nginx-pod 的 Pod,并定义容忍度以允许在带有 special-node=true:NoExecute 污点的节点上调度:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx-container
    image: nginx
tolerations:
- key: special-node  # 污点的键值
  operator: Equal    # 操作符,这里使用等于
  value: "true"      # 污点的值为 true
  effect: NoExecute  # 污点的效果为 NoExecute,即会驱逐不满足容忍度的 Pod


# 在spec 部分的 tolerations 字段中定义了容忍度,指定了对于带有 special-node=true:NoExecute 污点的节点的容忍度。

3.2 删除节点污点

要删除节点上的污点,使用 kubectl taint 命令,并指定 - 作为值。

# 删除 k8s-node01 的节点上名为 special-node 的污点。

kubectl taint nodes k8s-node01 special-node-

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 前言 本篇主要内容&#xff1a;类的6个默认成员函数中的拷贝构造函数…

算法练习第17天|104.二叉树的最大深度 、559.N叉树的最大深度

104.二叉树的最大深度 104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 什么是二叉树的深度和高度&#xff1f; 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最大深度…

03_信号和槽

信号和槽 系统的信号和槽自定义信号和槽Lambda表达式 系统的信号和槽 下面我们完成一个小功能&#xff0c;上面我们已经学习了按钮的创建&#xff0c;但是还没有体现出按钮的功能&#xff0c;按钮最大的功能也就是点击后触发一些事情&#xff0c;比如我们点击按钮&#xff0c;…

链表里面头节点存在的目的

头节点存在的目的&#xff1a; 在单链表的使用中&#xff0c;头结点&#xff08;Header Node&#xff09;是一个常用的概念&#xff0c;特别是在进行链表操作时。头结点不是数据域中实际存储的数据节点&#xff0c;而是作为链表操作的辅助节点&#xff0c;它包含对第一个实际数…

二路归并排序的算法设计和复杂度分析(C语言)

目录 实验内容&#xff1a; 实验过程&#xff1a; 1.算法设计 2.程序清单 3.运行结果 4.算法复杂度分析 实验内容&#xff1a; 二路归并排序的算法设计和复杂度分析。 实验过程&#xff1a; 1.算法设计 二路归并排序算法&#xff0c;分为两个阶段&#xff0c;首先对待排…

HADOOP大数据处理技术7-JavaSe

一粒尘埃 在空气中凝结 最后生成磅礴的风 ​ 生活有时会像一场暴风雨&#xff0c;狂风骤雨让人无法呼吸&#xff0c;但即使如此&#xff0c;也请记住&#xff0c;每一次风雨过后都会是一轮明媚的阳光。在黑暗中寻找光明&#xff0c;在困境中寻找希望&#xff0c;因为最终胜利属…

T细胞耗竭

目录 T Cell Exhaustion T 细胞衰竭路径上的细胞和分子路标 研究起源 介绍 T 细胞耗竭的发生路径 耗尽的T细胞亚群的解剖分离和迁移 持续TCR刺激的收益递减 通过共调节受体进行发育微调 细胞因子介导的耗尽T细胞亚群的特异性 T细胞耗竭和表观遗传 T Cell Exhaustion…

最新:阿里云服务器--学生优惠版购买以及配置方法

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…

Linux Docker容器安装和使用(最简洁快速方式)

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。本篇讲…

论文笔记:(INTHE)WILDCHAT:570K CHATGPT INTERACTION LOGS IN THE WILD

iclr 2024 spotlight reviewer 评分 5668 1 intro 由大型语言模型驱动的对话代理&#xff08;ChatGPT&#xff0c;Claude 2&#xff0c;Bard&#xff0c;Bing Chat&#xff09; 他们的开发流程通常包括三个主要阶段 预训练语言模型在被称为“指令调优”数据集上进行微调&…

25. 【Android教程】列表控件 ListView

在学习了 ScrollView 及 Adapter 两节内容之后&#xff0c;大家应该对 ListView 有了一些基本的了解&#xff0c;它是一个列表样式的 ViewGroup&#xff0c;将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的…

阿里云优惠券种类介绍及领取教程详解

随着互联网技术的快速发展&#xff0c;越来越多的企业和个人开始将业务和数据迁移到云端。阿里云作为国内领先的云服务提供商&#xff0c;为广大用户提供了丰富多样的云产品和服务。为了回馈用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中优惠券就是其中一种常见…

如何研究解决问题

如何研究解决问题 目录概述需求&#xff1a; 设计思路实现思路分析1.如何研究解决问题寻找解决方案如何借鉴过往经验 范例1.过程2.寻求的专家意见 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0…

ctf.show_web13

上传一句话木马 1.php文件&#xff0c;显示 再改后缀为.jpg&#xff0c;显示错误文件大小 用dirsearch扫一下 备份文件.bak 下载文件源码 <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tm…

新版AndroidStudio使用switch-case语句时出现Constant expression required错误

原因: 在新版的Android Studio中使用JDK17以上版本&#xff0c;会出现switch语句报错"Constant expression required"的问题&#xff0c;这是因为在JDK17中switch语句的条件表达式支持使用枚举类型&#xff0c;而这个特性还没有被支持。 解决方法: ①在gradle.prope…

java二维数组

一、二维数组的概述&#xff1a; 目录 二维数组的概述&#xff1a; 二维数组图解&#xff1a; 二维数组的四种创建方式&#xff1a; Java 用sort对二维数组进行排序 二维数组简单概述&#xff1a;Java中的二维数组一般应用在矩阵的一些运算、棋盘游戏中棋盘的实现、二维数据…

使用阿里云试用Elasticsearch学习:5. 地理位置

我们拿着纸质地图漫步城市的日子一去不返了。得益于智能手机&#xff0c;我们现在总是可以知道 自己所处的准确位置&#xff0c;也预料到网站会使用这些信息。我想知道从当前位置步行 5 分钟内可到的那些餐馆&#xff0c;对伦敦更大范围内的其他餐馆并不感兴趣。 但地理位置功…

【Linux】磁盘阵列RAID技术

目录 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 1.2 为什么要使用RAID技术&#xff1f; 二、RAID级别 2.1 常见的RAID级别 2.2 常见RAID介绍 三、RAID特性对比 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 把多块独立的物理磁盘按不同的方式组合起来形成一个硬盘…

基于zookeeper安装Kafka集群

操作系统&#xff1a;centOS 9 Stream&#xff0c;6台&#xff0c;基于vmware虚拟机创建 准备工作 确认系统环境&#xff1a; 确保所有服务器已安装了最新更新。安装Java Development Kit (JDK) 8或更高版本&#xff0c;因为ZooKeeper和Kafka都是基于Java开发的。例如&#x…

【安全】查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…