当前位置: 首页 > article >正文

什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度)

什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度)

在 Kubernetes(K8s)中,Taints(污点)和 Tolerations(容忍度)用于影响 Pod 调度到节点的行为,它们一起帮助实现更精细的资源管理和隔离。

Taints(污点)

  • 作用:Taints 是节点级的约束,它们允许一个节点拒绝特定的 Pod 运行,除非该 Pod 具有相应的容忍度。

  • 使用方式:可以通过 kubectl taint 命令给节点添加 taint,例如:

    kubectl taint nodes node1 key=value:NoSchedule
    

    这意味着 除非 Pod 有相应的容忍度,否则不会调度到 node1

  • Taint 影响调度的三种方式

    • NoSchedule:不允许 Pod 被调度到该节点。

    • PreferNoSchedule:尽量避免调度,但仍可能调度。

    • NoExecute:如果 Pod 没有匹配的 toleration,会被驱逐。

Tolerations(容忍度)

  • 作用:Tolerations 允许 Pod 忽略某些 Taints,从而可以调度到有这些 Taints 的节点。

  • 定义方式:在 Pod 的 spec 部分指定 toleration,例如:

    apiVersion: v1
    kind: Pod
    metadata:name: example-pod
    spec:tolerations:- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"
    

    这表示该 Pod 允许被调度到带有 key=value:NoSchedule 的节点。

应用场景

  • 隔离工作负载:确保特定工作负载仅运行在特定节点上,比如 GPU 计算节点或高性能存储节点。

  • 节点维护:在节点维护时使用 NoExecute 驱逐 Pod,避免 Pod 继续运行在该节点上。

  • 高可用性管理:结合 PreferNoSchedule 让 Kubernetes 尽量避免将 Pod 调度到某些节点,但在必要时仍可调度。

它们一起提供了灵活的调度策略,让 Kubernetes 能够更智能地管理 Pod 与节点的关系。

为什么 Taints 和 Tolerations 在 Kubernetes 中如此重要?

1. 精细化调度控制

  • Kubernetes 的默认调度器会尝试在所有可用节点之间均衡地分配 Pod。然而,在某些情况下,你希望某些 Pod 只能运行在特定的节点上,而不允许其他 Pod 被调度到这些节点。

  • Taints 允许你向节点添加约束,而 Tolerations 使特定 Pod 能够忽略这些约束,实现定向调度。

2. 资源优化与隔离

  • 在 Kubernetes 集群中,不同类型的应用可能有不同的资源需求,例如:

    • 计算密集型应用需要运行在 GPU 节点上。

    • 数据库服务希望运行在高 IOPS 存储节点上。

    • 普通应用可以运行在常规节点上。

  • 通过 TaintsTolerations,你可以确保不同的工作负载被正确调度到适合的硬件资源上,避免资源竞争和不必要的性能损耗。

3. 保障关键应用的稳定性

  • 关键业务应用需要高可靠性和稳定性,而不希望受到其他应用影响。例如:

    • 生产环境的 Pod 不应该和测试环境的 Pod 运行在同一节点。

    • Kubernetes 可能会调度低优先级任务到关键节点,占用资源,从而影响关键任务的运行。

  • 通过 Taints,可以确保关键节点只允许运行特定类型的 Pod,从而避免不必要的干扰。

4. 故障容忍与节点维护

  • 在维护节点时,你可能希望驱逐所有 Pod,使该节点可以进行系统更新或硬件更换。

  • 通过 NoExecute 类型的 Taints,可以自动驱逐未容忍该 taint 的 Pod,确保维护操作不会影响应用运行。

  • 另外,Kubernetes 也可以使用 Taints 来标记健康状况异常的节点,防止新 Pod 调度到有故障的节点上,提高集群的可靠性。

5. 软约束与调度倾向

  • PreferNoSchedule 类型的 Taints 允许 Kubernetes 尽量避免将 Pod 调度到某个节点,但在资源紧张时仍然可以调度。

  • 这在高可用架构中非常重要,比如:

    • 你有一个备用数据中心,只在主数据中心资源耗尽时才使用它。

    • 你希望某些节点优先运行生产工作负载,但在压力过大时也允许其他 Pod 运行。

Taints 和 Tolerations 的实际应用示例 

关键服务节点隔离

场景:公司有一个专门运行数据库的高性能节点,不希望普通应用程序调度到该节点,以免影响数据库的资源使用。

实现方式

  • 给数据库节点添加 taint

    kubectl taint nodes db-node dedicated=db:NoSchedule
    
  • 让数据库 Pod 具有相应的 toleration

    spec:tolerations:- key: "dedicated"operator: "Equal"value: "db"effect: "NoSchedule"
    

这样,只有明确拥有 toleration 的数据库 Pod 能运行在该节点上,而其他普通应用不会调度到此节点。

GPU 计算任务专用节点

场景:数据科学团队需要使用 GPU 计算资源,但希望限制 GPU 节点的使用范围,只允许机器学习任务在上面运行。

实现方式

  • 给 GPU 节点添加 taint

    kubectl taint nodes gpu-node accelerator=gpu:NoSchedule
    
  • 让 ML 工作负载的 Pod 具有 toleration

    spec:tolerations:- key: "accelerator"operator: "Equal"value: "gpu"effect: "NoSchedule"
    

这样,只有 ML 任务能够调度到 GPU 节点,而普通应用程序不会占用 GPU 资源。

灾难恢复策略

场景:有一个备用数据中心节点,只在主数据中心故障时使用,因此希望 Kubernetes 尽量避免调度 Pod 到该节点,但仍允许在必要时运行。

实现方式

  • 给备用节点添加 taint

    kubectl taint nodes backup-node location=backup:PreferNoSchedule
    
  • 允许 Pod 运行在该节点(如果需要):

    spec:tolerations:- key: "location"operator: "Equal"value: "backup"effect: "PreferNoSchedule"
    

这样,Kubernetes 尽量不会调度 Pod 到 backup-node,但在资源紧张或主数据中心故障时,可以运行 Pod。

临时维护节点

场景:某个节点需要进行系统维护,希望临时驱逐所有正在运行的 Pod,以便维护完成后重新调度。

实现方式

  • 给节点添加 NoExecute 类型的 taint

    kubectl taint nodes maintenance-node maintenance=true:NoExecute
    
  • 仅允许短时任务 Pod 保留(其他会被驱逐):

    spec:tolerations:- key: "maintenance"operator: "Equal"value: "true"effect: "NoExecute"tolerationSeconds: 3600  # 允许 Pod 存活 1 小时
    

这样,所有没有 toleration 的 Pod 都会被立即驱逐,而带 tolerationSeconds 的 Pod 能在维护节点上存活一段时间后再被删除。

这些 Taints 和 Tolerations 可以让 Kubernetes 更高效地管理资源、优化 Pod 调度,同时确保服务可靠性和安全性。

 Powered by Moshow@https://zhengkai.blog.csdn.net/

相关文章:

什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度)

什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度) 在 Kubernetes(K8s)中,Taints(污点)和 Tolerations(容忍度)用于影响 Pod 调度到节点的行为…...

C++类模板的运用

使用vector实现一个简单的本地注册登录系统 注册&#xff1a;将账号密码存入vector里面&#xff0c;注意防重复判断 登录&#xff1a;判断登录的账号密码是否正确 #include <iostream> #include <vector> #include <string> #include <algorithm>us…...

人工智能:深度学习关键技术与原理详解

深度学习作为机器学习的核心分支&#xff0c;通过构建多层神经网络实现对复杂数据的高效建模。其关键技术及原理可分为以下几个方面&#xff1a; 一、关键技术 神经网络结构 多层感知机&#xff08;MLP&#xff09;&#xff1a;基础的前馈神经网络&#xff0c;通过全连接层堆叠…...

coze生成流程图和思维导图工作流

需求&#xff1a;通过coze平台实现生成流程图和思维导图&#xff0c;要求支持文档上传 最终工作流如下&#xff1a; 入参&#xff1a; 整合用户需求文件内容的工作流&#xff1a;https://blog.csdn.net/YXWik/article/details/147040071 选择器分发&#xff0c;不同的类型走…...

【数据库】达梦arm64安装

话不多说&#xff0c;快速开始~ 1.下载 进入官网&#xff1a; 产品下载 | 达梦在线服务平台 下载安装包。 选飞腾、鲲鹏都可以&#xff0c;都是arm架构的。我选择的是&#xff1a; 直接下载地址是https://download.dameng.com/eco/adapter/DM8/202502/dm8_20250117_HWarm920…...

AR 赋能儿童娱乐:剧本杀与寻宝小程序搭建秘籍​

在科技飞速发展的当下&#xff0c;儿童娱乐领域正经历着一场创新变革。AR&#xff08;增强现实&#xff09;技术的融入&#xff0c;为儿童剧本杀与寻宝游戏带来了前所未有的沉浸式体验。通过搭建专属小程序&#xff0c;孩子们能够在虚拟与现实交织的世界中开启奇幻冒险。接下来…...

交换机可以代替路由器的功能吗

交换机在一定程度上可以承担部分路由器的功能&#xff0c;但不能完全代替路由器&#xff0c;原因如下&#xff1a; 1、工作层次不一样&#xff1a; a、交换机工作在数据链路层&#xff0c;主要功能是基于MAC地址&#xff08;物理地址&#xff09;进行数据帧的转发&#xff0c…...

leetcode274.H指数

直接排序完后进行遍历 class Solution {public int hIndex(int[] citations) {Arrays.sort(citations);int result 0;for (int i citations.length-1; i >0; i--) {if(citations[i]>citations.length-i)resultcitations.length-i;elsebreak;}return result;} }...

人工智能基础知识详解:从概念到前沿技术与应用

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;已不再是科技前沿的神秘概念&#xff0c;而是融入我们日常工作的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从医疗影像诊断到生成式艺术创作&…...

JavaScript | 对象

对象 JS中&#xff0c;对象是一组无序的相关属性和方法的集合&#xff0c;所有的事物都是对象&#xff0c;例如&#xff1a;字符串、数值、数组、函数等 对象是由属性与方法组成的 属性&#xff1a;事物的特征&#xff0c;在对象中用属性来表示(一般用名词)方法&#xff1a;…...

内网文件传输新体验,聊天、传输、自定义,一应俱全

Flix 是一款高效、便捷的跨平台局域网文件传输工具&#xff0c;支持 Windows、macOS、Android、iOS 和 Linux 等多种操作系统。它以简洁直观的聊天式界面为特色&#xff0c;让用户能够像发送消息一样轻松地传输文件&#xff0c;无需复杂的设置或登录。Flix 支持大文件和多种格式…...

Vue PDF Annotation plugin library online API examples

This article introduces the online version of the ElasticPDF API tutorial for the PDF annotation plug-in library in Vue projects. The API includes ① Export edited PDF data; ② Export annotations json data; ③ Reload old annotations; ④ Change files; ⑤ Se…...

Go 学习笔记 · 进阶篇 · 第一天:接口与多态

&#x1f436;Go接口与多态&#xff1a;继承没了&#xff0c;但自由炸裂&#xff01; 最近翻 Go 的代码&#xff0c;突然看到这么一段&#xff1a; type Animal interface {Speak() string }我一愣&#xff0c;咦&#xff1f;这不就是 Java 里常见的“接口”吗&#xff1f; …...

C语言传参寄存器压栈流程总结

相关 《Linux函数调用栈的实现原理&#xff08;X86&#xff09;》 总结 rsp向低地址生长&#xff08;栈顶&#xff09;&#xff0c;rbp记录旧值&#xff08;栈底&#xff09;。 intel x86测试&#xff0c;六个和六个以内的参数用寄存器传递。8个参数场景&#xff0c;6个用寄存…...

C盘清理——快速处理

C盘清理 | 快速处理 软件&#xff1a;小番茄C盘清理 https://ccleancdn.xkbrowser.com/cleanmaster/FanQieClean_13054_st.exe 前言&#xff1a;为什么需要专业的C盘清理工具&#xff1f; 作为一位长期与Windows系统打交道的技术博主&#xff0c;我深知C盘空间不足带来的痛苦…...

前端服务配置详解:从入门到实战

前端服务配置详解&#xff1a;从入门到实战 一、环境配置文件&#xff08;.env&#xff09; 1.1 基础结构 在项目根目录创建 .env 文件&#xff1a; # 开发环境 VUE_APP_API_BASE_URL http://localhost:3000/api VUE_APP_VERSION 1.0.0# 生产环境&#xff08;.env.produc…...

历年跨链合约恶意交易详解(四)——Chainswap20210711

漏洞合约函数 function receive(uint256 fromChainId, address to, uint256 nonce, uint256 volume, Signature[] memory signatures) virtual external payable {_chargeFee();require(received[fromChainId][to][nonce] 0, withdrawn already);uint N signatures.length;r…...

Python基于OpenCV和SVM实现中文车牌识别系统GUI界面

说明&#xff1a;这是一个系统实战项目&#xff0c;如需项目代码可以直接到文章最后关注获取。 项目背景 随着智能交通系统和智慧城市的发展&#xff0c;车牌识别技术在车辆管理、交通监控、停车场收费等领域发挥着重要作用。传统的车牌识别系统主要针对英文和数字的识别&…...

有瓶颈设备的多级生产计划问题:基于Matlab的深度解析与实践

内容摘要 本文围绕有瓶颈设备的多级生产计划问题展开&#xff0c;通过实例详细阐述问题背景、建立数学模型&#xff0c;并用Matlab代码进行求解。旨在帮助读者理解该问题的本质&#xff0c;掌握利用Matlab解决此类生产计划优化问题的方法&#xff0c;为企业在实际生产中合理规…...

网络性能优化参数关系解读 | TCP Nagle / TCP_NODELAY / TCP_QUICKACK / TCP_CORK

注&#xff1a;本文为 “网路性能优化” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 TCP_NODELAY 详解 lenky0401 发表于 2012-08-25 16:40 在网络拥塞控制领域&#xff0c;Nagle 算法&#xff08;Nagle algorithm&#xff09;是一个非常著名的算法&…...

mac命令操作

mac命令操作 快速删除一行&#xff1a; control u 剪切文件&#xff1a;步骤1、先进行Command c 进行选择复制文件&#xff0c;2、进行commandoptionv进行移动文件&#xff0c;如果commandv是进行复制文件。 commandcontrolD 三个键即可屏幕取词进行翻译 mac中可以使用快捷方…...

react 18 可中断的理解以及应用

React 的“可中断&#xff08;interruptible&#xff09;”渲染&#xff0c;指的是 React 在执行渲染过程中可以暂停、中断、再继续或放弃更新。这是 React 18 引入的并发特性的一部分&#xff0c;目的是让界面响应更流畅&#xff0c;防止“卡顿”。 &#x1f4d6; 举个例子&am…...

【Python】Python环境管理工具UV安装gdal

目录 一、UV简介1.2 UV高效包管理工具二、UV配置流程步骤1:安装UV工具步骤2:配置环境变量(Windows)三、UV包管理实战3.1 常用命令速查3.2 完整 `uv` 工作流(无需手动 `venv`)**1. 创建项目****2. 初始化依赖管理(可选)****3. 添加依赖****4. 运行代码****5. 更新/移除依…...

如何将内网的IP地址映射到外网?详细方法与步骤解析

01 为什么需要将内网IP映射到外网 在当今数字化时代&#xff0c;远程访问内网资源已成为许多企业和个人的刚需。将内网IP地址映射到外网的主要目的是允许外部网络访问内网中的特定服务&#xff0c;比如Web服务器、远程桌面、文件共享等应用场景。无论是企业需要远程办公访问内…...

HTTP 响应头 Strict-Transport-Security 缺失漏洞

HTTP 响应头 Strict-Transport-Security 缺失漏洞 这个漏洞就是说明网站的HTTP响应头中没有设置Strict-Transport-Security&#xff0c;没有设置则可以通过将https自己手动改成htttp的方式进行访问。不安全 解决方法 1.nginx配置 nginx中增加如下配置&#xff1a; location / …...

【SPSS/EXCEl】主成分分析构建__综合评价指数

学习过程中实验操作的记录 1.数据准备和标准化&#xff1a; (1)区分正负相关性:判断每个因子是正向指标还是负向指标,计算每个的最大值和最小值 (2) 标准化: Min-Max标准化 Min-Max标准化&#xff08;最大最小值法&#xff09;&#xff1a; 将数据映射到指定的区间&#xff…...

电池分选机:新能源时代的品质守护者|深圳比斯特自动化

在这个新能源蓬勃发展的时代&#xff0c;电池作为能量的存储与释放单元&#xff0c;其性能与质量直接关系到整个系统的稳定运行与效率提升。而电池分选机&#xff0c;作为电池生产流程中的关键一环&#xff0c;正扮演着品质守护者的角色&#xff0c;为新能源产业的高质量发展保…...

STM32江科大----IIC

声明&#xff1a;本人跟随b站江科大学习&#xff0c;本文章是观看完视频后的一些个人总结和经验分享&#xff0c;也同时为了方便日后的复习&#xff0c;如果有错误请各位大佬指出&#xff0c;如果对你有帮助可以点个赞小小鼓励一下&#xff0c;本文章建议配合原视频使用❤️ 如…...

顺序表——C语言实现

目录 一、线性表 二、顺序表 1.实现动态顺序表 SeqList.h SeqList.c Test.c 问题 经验&#xff1a;free 出问题&#xff0c;2种可能性 解决问题 &#xff08;2&#xff09;尾删 &#xff08;3&#xff09;头插&#xff0c;头删 &#xff08;4&#xff09;在 pos 位…...

ARM 汇编启动代码详解:从中断向量表到中断处理

ARM 汇编启动代码详解&#xff1a;从中断向量表到中断处理 引言 在嵌入式系统开发中&#xff0c;ARM 处理器&#xff08;如 Cortex-A 系列&#xff09;的启动代码是系统初始化和运行的基础。启动代码通常包括中断向量表的创建、初始化硬件状态&#xff08;如关闭缓存和 MMU&a…...