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

k8s 学习记录 (六)_Pod 污点和容忍性详解

一、前言

在 Kubernetes 集群中,我们已经了解了节点亲和性和 Pod 亲和性,它们在 Pod 调度方面提供了很大的灵活性。今天,我们来探讨另外两个重要的概念 ——Pod 污点(Taints)和容忍性(Tolerations),它们同样在 Pod 的调度和节点资源分配中扮演着关键角色。

二、Pod 污点(Taints)

污点是应用在节点上的一种标记,它的作用是让节点拒绝接受某些 Pod 的调度,除非这些 Pod 明确表示可以容忍这些污点。可以将污点看作是节点对 Pod 的一种 “排斥规则”。

使用kubectl taint`命令来给节点添加污点。命令格式如下:

kubectl taint nodes <node-name> <taint-key>=<taint-value>:<taint-effect>

其中:

  • node-name:要添加污点的节点名称。
  • taint-key:污点的键,用于标识污点的类型。
  • taint-value:污点的值,与键一起构成污点的具体标识。
  • taint-effect:污点的效果,常见的有以下三种:
    • NoSchedule:表示 Pod 不能被调度到带有该污点的节点上,即使 Pod 已经在该节点上运行,也不会被重新调度到其他节点。
    • PreferNoSchedule:这是一种软限制,尽量避免将 Pod 调度到带有该污点的节点上,但如果没有其他合适的节点,还是会调度过去。
    • NoExecute:不仅 Pod 不能被调度到带有该污点的节点上,而且如果 Pod 正在该节点上运行,当污点被添加时,Pod 会根据其容忍性决定是否被驱逐。

例如,我们给名为node1的节点添加一个污点,使其不允许普通 Pod 调度:

kubectl taint nodes node1 dedicated=special-user:NoSchedule

这个命令表示node1节点被标记为仅供特定用户使用,普通 Pod 如果没有相应的容忍性,将无法被调度到该节点。

三、Pod 容忍性(Tolerations)

容忍性是 Pod 的一种属性,它允许 Pod 调度到带有特定污点的节点上。也就是说,容忍性是 Pod 对节点污点的一种 “免疫能力”。

在 Pod 的配置文件中定义容忍性,示例如下:

yaml

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:tolerations:- key: "dedicated"operator: "Equal"value: "special-user"effect: "NoSchedule"containers:- name: my-containerimage: nginx:1.14.2ports:- containerPort: 80

在上述配置中:

  • key:对应节点污点的键。
  • operator:用于指定匹配操作符,有Equal(表示值必须完全匹配)和Exists(表示只要存在该键的污点就匹配,忽略值)两种。
  • value:对应节点污点的值,当opera为Equal时需要指定。
  • effect:对应节点污点的效果,只有当 Pod 的容忍性中effect与节点污点的effect相匹配时,才会考虑容忍该污点。

如果一个 Pod 需要容忍多种污点,可以在=spec.tolerations字段中定义多个容忍项。

四、深入理解容忍性的应用场景

1. 独占节点资源:在集群中,某些节点可能配置了特殊的硬件资源,如 GPU。为了确保这些节点仅被特定的任务使用,可以给这些节点添加污点,然后让需要使用这些资源的 Pod 设置相应的容忍性,这样就实现了资源的独占。
2. 维护和升级节点:当需要对某个节点进行维护或升级时,可以给该节点添加` NoExecute` 类型的污点。此时,具有相应容忍性的 Pod 可以继续在该节点上运行,而没有容忍性的 Pod 会被驱逐,避免了服务中断。

五、总结

Pod 污点和容忍性是 Kubernetes 调度系统中非常重要的特性,它们通过节点和 Pod 之间的 “排斥” 与 “容忍” 机制,实现了更加精细的资源分配和调度控制。合理使用污点和容忍性,可以让集群的资源管理更加高效,确保不同类型的 Pod 能够在合适的节点上运行,提高整个集群的稳定性和性能。

相关文章:

  • 20250429 垂直地表发射激光测量偏转可以验证相对性原理吗
  • Lua 第14部分 数据结构
  • 【论文阅读】PEEKABOO: Interactive Video Generation via Masked-Diffusion
  • Educational Codeforces Round 178 (Rated for Div. 2)
  • 在yolo中Ultralytics是什么意思呢?超越分析的智能
  • 【专题五】位运算(1):常见位运算操作总结
  • 【Java学习】Java的CGLIB动态代理:通俗解释与使用指南
  • 短视频矩阵批量剪辑与场景剪辑功能 OEM 定制开发
  • deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试
  • 【开源项目】基于sherpa-onnx的实时语音识别系统 - LiveASR
  • 从Windows开发迁移到信创开发的指南:国产替代背景下的技术路径与实践
  • swagger2升级至openapi3的利器--swagger2openapi
  • 跨平台项目部署全攻略:Windows后端+Mac前端在服务器的协同实战
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • jupyter已经安装但是无法通过命令行启动
  • AI编程工具“幻觉”风险与飞算JavaAl的破局之道
  • 万界星空科技QMS质量管理系统几大核心功能详解
  • Webug4.0通关笔记03- 第4关POST注入和第5关过滤注入
  • DeepSeek破界而来:重构大规模深度检索的算力与边界
  • GTC Taipei 2025 医疗域前瞻:从AI代理到主权生态,解码医疗健康与生命科学的未来图景
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 从腰缠万贯到债台高筑、官司缠身:尼泊尔保皇新星即将陨落?
  • 北美票房|《罪人》遭媒体唱衰,好莱坞业内人士集体反击
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查
  • 媒体:每一个“被偷走的人生”,都该得到公道和正义
  • 核电开闸!国常会核准10台新机组,拉动超2000亿投资,新项目花落谁家?