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

news2025/4/17 6:10:45

什么是 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/

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

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

相关文章

C++类模板的运用

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

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…

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;} }

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

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…

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;是一个非常著名的算法&…

如何将内网的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 位…

LTSPICE仿真电路:(二十六)跨阻放大器简单仿真

1.前言 由于有个机会刚好了解了下跨阻&#xff0c;简单做个这个仿真&#xff0c;实际上跨阻放大器应该要复杂的多&#xff0c;由于跨阻放大器实际上是将电流转换为电压&#xff0c;最需要注意的参数肯定是运放的偏置电流 2.跨阻放大器仿真 这篇是纯记录 这是一个将0-50uA电流…