K8S 之 Taints(污点)与 Tolerations(容忍)

K8S 之 Taints(污点)与 Tolerations(容忍)
👨‍🎓博主简介

🏅ZEEKLOG博客专家
🏅云计算领域优质创作者
🏅华为云开发者社区专家博主
🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗

文章目录

一、核心概念

1.1 什么是 Taints(污点)

污点是节点的"禁止调度"标签,专门用来阻止 Pod 部署到该节点上。
  • 如何判断节点有没有污点
kubectl describe node<master-node>|grep Taints 
返回:
<none> 节点无污点,任何 Pod 都可调度;
node-role.kubernetes.io/master:NoSchedulenode-role.kubernetes.io/control-plane:NoSchedule 有污点,Pod 需添加对应 容忍:tolerations 或 去除污点:taints Pod才能进行调度;
  • 去除污点
# 去除 master 污点(K8s 1.23 及以下) kubectl taint node<master-node-name> node-role.kubernetes.io/master:NoSchedule- # 去除 control-plane 污点(K8s 1.24+) kubectl taint node<master-node-name> node-role.kubernetes.io/control-plane:NoSchedule- 
  • 恢复污点
# 重新添加 Master 污点(K8s 1.23 及以下) kubectl taint node<master-node> node-role.kubernetes.io/master:NoSchedule # 或 control-plane 污点(K8s 1.24+) kubectl taint node<master-node> node-role.kubernetes.io/control-plane:NoSchedule 

作用

  • 保护特定节点(如 Master)不被业务 Pod 占用
  • 标记故障节点,阻止新 Pod 调度
  • 实现专用节点(如 GPU、SSD 节点)的独占使用

1.2 什么是 Tolerations(容忍)

容忍是 Pod 的"通行证",让 Pod 能够突破节点限制,部署到被禁止调度的节点上。
# Pod 配置示例spec:tolerations:# 两种可同时存在# K8s 1.20- 推荐使用 control-plane 标签-key: node-role.kubernetes.io/master effect: NoSchedule operator: Exists # K8s 1.20+ 推荐使用 control-plane 标签-key: node-role.kubernetes.io/control-plane effect: NoSchedule operator: Exists 

作用

  • 允许监控组件部署到 Master 节点
  • 允许特定应用使用专用硬件节点
  • 实现故障节点的临时应急调度

1.3 两者的关系

特性Taint(污点)Toleration(容忍)
作用对象节点Pod
功能排斥 Pod突破排斥
设置方式kubectl taintYAML spec.tolerations
类比"禁止入内"的门禁“特殊通行证”
核心逻辑:污点是节点的"拒绝策略",容忍是 Pod 的"豁免凭证"。两者独立存在,但必须配对匹配才能实现精准调度控制。
注意事项:如果污点不存在,则不需要写容忍。

二、污点详解

2.1 污点语法格式

kubectl taint node<node-name><key>=<value>:<effect>
字段说明示例
key污点标识node-role.kubernetes.io/master
value可选值默认:true
effect排斥效果NoSchedule / PreferNoSchedule / NoExecute

2.2 三种 Effect 效果

Effect含义使用场景
NoSchedule不调度新 Pod保护 Master 节点
PreferNoSchedule尽量不调度(软限制)资源紧张时的偏好设置
NoExecute不调度 + 驱逐已有 Pod节点故障、维护下线

2.3 常用命令

  • 标准三件套:添加、查看、删除
# 1. 添加污点 kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule # 2. 查看污点 kubectl describe node k8s-master |grep Taints # 2.1 查看多个污点:-A数值可调节 kubectl describe node k8s-master |grep -A2 Taints # 3. 去除污点(key:effect-) kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule- 

2.4 生产场景示例(自定义标识)

# 场景1:标记 GPU 专用节点 kubectl taint node gpu-node-1 hardware=gpu:NoSchedule # 场景2:标记节点维护中(驱逐所有 Pod) kubectl taint node node-2 maintenance=true:NoExecute 

三、容忍详解

3.1 容忍语法结构

注意:写容忍前,需查看污点值来确认容忍的内容kubectl describe node k8s-master | grep Taints
spec:tolerations:-key:"master"# 污点标识(必填,必须和污点key一致)value:"gpu"# 污点值(operator=Equal 时必填)effect:"NoSchedule"# 污点效果(operator=Equal 时必填必填,需和污点效果一致)operator:"Equal"# 操作符:Equal / Exists(必填)# tolerationSeconds: 3600 # 容忍多久后被驱逐(仅 NoExecute)

3.2 两种 Operator 匹配模式

Operator逻辑适用场景
Equalkey + value + effect 全匹配精确匹配特定污点
Exists只要 key 存在即匹配(无视 value)兼容多版本、通用匹配

3.3 特殊用法

# 1. 仅匹配 key,无视 effect(但建议都写上)tolerations:-key:"node-role.kubernetes.io/master"operator:"Exists"# 3. 设置容忍时间(NoExecute 效果下,多久后被强制驱逐)tolerations:-key:"maintenance"value:"true"effect:"NoExecute"operator:"Equal"tolerationSeconds:3600# 1小时后自动驱逐

四、实例:开启污点,容忍启用与不启用的区别展示

使用DaemonSet方式部署Nginx服务,并展示有污点的情况下,启用容忍与不启用的区别;
  • 查看是否有污点
kubectl describe node k8s-master |grep Taints 

存在污点。

4.1 开启污点,不添加容忍

  • nginx-daemonset.yaml
apiVersion: v1 kind: Namespace metadata:name: nginx ---apiVersion: apps/v1 kind: DaemonSet metadata:name: nginx-daemonset namespace: nginx labels:app: nginx spec:selector:matchLabels:app: nginx template:metadata:labels:app: nginx spec:hostNetwork:truecontainers:-name: nginx image: nginx:1.24.0 ports:-containerPort:80resources:requests:cpu:"100m"memory:"128Mi"limits:cpu:"500m"memory:"256Mi"
  • 运行启动nginx服务
kubectl apply -f nginx-daemonset.yaml 
  • 查看pod及运行所在节点
kubectl get pods -n nginx -o wide 

可以看到并没有再k8s-master节点上跑,因为此节点开启了NoSchedule污点,所以不会再此节点上创建pod;

4.2 开启污点,添加容忍

  • nginx-daemonset.yaml
apiVersion: v1 kind: Namespace metadata:name: nginx ---apiVersion: apps/v1 kind: DaemonSet metadata:name: nginx-daemonset namespace: nginx labels:app: nginx spec:selector:matchLabels:app: nginx template:metadata:labels:app: nginx spec:hostNetwork:truetolerations:# ← 添加容忍度,可以添加多个容忍-key: node-role.kubernetes.io/master effect: NoSchedule operator: Exists -key: node-role.kubernetes.io/control-plane effect: NoSchedule operator: Exists containers:-name: nginx image: nginx:1.24.0 ports:-containerPort:80resources:requests:cpu:"100m"memory:"128Mi"limits:cpu:"500m"memory:"256Mi"
  • 先删除刚刚创建的pod
kubectl delete -f nginx-daemonset.yaml 
  • 运行启动nginx服务
kubectl apply -f nginx-daemonset.yaml 
  • 查看pod及运行所在节点
kubectl get pods -n nginx -o wide 

可以看到k8s-master节点上也跑起来了,共3个节点都跑起来了;

五、生产建议

  1. Master 节点保持污点,仅在必要 DaemonSet(监控、日志)中添加容忍
  2. 专用节点采用 “标签+污点” 双机制:标签用于定向调度,污点用于隔离保护
  3. NoExecute 慎用,设置 tolerationSeconds 避免业务长时间挂起
  4. 版本兼容:K8s 1.24+ 使用 control-plane 替代 master,建议两者同时容忍

Read more

YOLO26来了,更好、更快、更小的 YOLO 模型,使用YOLO26训练自己的数据集和推理(附YOLO26网络结构图),租用 GPU 服务器训练教程,YOLO26创新点解析

YOLO26来了,更好、更快、更小的 YOLO 模型,使用YOLO26训练自己的数据集和推理(附YOLO26网络结构图),租用 GPU 服务器训练教程,YOLO26创新点解析

目录 * 摘要 * YOLO26更新点 * ⚡⚡C3k2 小优化 * ☑️ YOLO26 C3k2代码 * ☑️ YOLO11 C3k2代码 * ⚡⚡移除分布焦点损失(DFL) * ⚡⚡端到端、无需 NMS 推理 * ⚡⚡ProgLoss 与 STAL * ☑️ProgLoss * ☑️STAL (小目标感知标签分配) * ⚡⚡MuSGD优化器 * 从机器人到制造业:YOLO26 的用例 * 🐴一、YOLO26 源码下载与模型下载 * ⚡⚡YOLO26模型结构图 * ⚡⚡1.源码下载 * ⚡⚡2.官网的预训练模型下载 * 🐴二、数据集准备 * ⚡⚡LabelImg & Labelme * ☑️ LabelImg(仅限矩形检测框) * ☑️ Labelme * ⚡⚡ X-AnyLabeling * ⚡⚡ 旋转框 (OBB) 标注工具:roLabelImg * ⚡⚡1.目标检测数据集标注软件 * ⚡⚡2.voc数据集格式转换

By Ne0inhk
高并发系统的网络参数优化与服务超时管理(QPS 10w+)

高并发系统的网络参数优化与服务超时管理(QPS 10w+)

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[[email protected]] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? * 专栏导航: 码农阿豪系列专栏导航 面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️ Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻 Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡 全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀 目录 * 高并发系统的网络参数优化与服务超时管理 * 背景与现状 * 问题分析 * 网络参数优化实践 * 1. 文件句柄限制 * 2. 调整端口范围 * 3. 连接复用 * 4. 最大连接数 * 5.

By Ne0inhk
Flutter 组件 fletch 的适配 鸿蒙Harmony 实战 - 驾驭高性能网络爬虫、实现鸿蒙端多并发与自定义拦截器的资产自动化抓取方案

Flutter 组件 fletch 的适配 鸿蒙Harmony 实战 - 驾驭高性能网络爬虫、实现鸿蒙端多并发与自定义拦截器的资产自动化抓取方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 fletch 的适配 鸿蒙Harmony 实战 - 驾驭高性能网络爬虫、实现鸿蒙端多并发与自定义拦截器的资产自动化抓取方案 前言 在数据驱动的鸿蒙(OpenHarmony)应用开发中,很多时候我们需要从外部网络环境大规模采集实时资讯、获取海量资源路径或者是进行自动化的接口探测。传统的 http 库虽然简单,但在面对数十路并发下载、复杂的 Cookie 状态维持以及多级的请求拦截(Interceptor)时,往往显得捉襟见肘。 fletch 正是一款专为高性能、工业级抓取任务设计的 Dart 网络增强库。它不仅支持极致的并发限流,更提供了一套类似拦截器管线的强大插件化能力。 适配到鸿蒙系统后,配合鸿蒙底层的网络切片和能效策略,fletch 能让你的数据采集应用在保持低功耗的同时,展现出前所未有的吞吐力。本文将为你深入剖析 fletch 在鸿蒙实战环境下的深度集成与优化。 一、原理解析 / 概念介绍 1.1

By Ne0inhk