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

DaemonSet 无法在带有污点的节点上启动 Pod

1. 污点(Taints)的作用

根据知识库中的描述:

  • 污点(Taint) 是节点上的标记,用于限制哪些 Pod 可以被调度到该节点。
  • NoSchedule 效果 表示:未配置对应容忍的 Pod 不能被调度到该节点,但已存在的 Pod 不受影响。
  • node-role.kubernetes.io/platform-node:NoSchedule 是一个典型的污点,通常用于标记特定用途的节点(例如控制平面节点或专用基础设施节点)。

2. DaemonSet 的工作原理

DaemonSet 的设计目标是确保 每个符合要求的节点上运行一个 Pod 副本。然而,如果节点被设置了污点(如 node-role.kubernetes.io/platform-node:NoSchedule),DaemonSet 控制器会遵循以下规则:

  • 默认情况下,DaemonSet 的 Pod 模板如果没有配置对应的容忍(Tolerations),则会被 拒绝调度到带有该污点的节点
  • 这是因为 Kubernetes 调度器会严格检查节点的污点和 Pod 的容忍是否匹配。

3. 为什么 DaemonSet 的 Pod 无法启动?

假设某个节点被标记为 node-role.kubernetes.io/platform-node:NoSchedule,而 DaemonSet 的 Pod 模板中没有配置以下容忍:

tolerations:
- key: "node-role.kubernetes.io/platform-node"operator: "Exists"effect: "NoSchedule"

此时会发生以下情况:

  1. 污点与容忍不匹配:节点的污点 node-role.kubernetes.io/platform-node:NoSchedule 要求 Pod 必须有对应的容忍才能调度到该节点。
  2. DaemonSet 的 Pod 无法通过调度检查:由于 Pod 没有配置容忍,Kubernetes 调度器会拒绝将 Pod 调度到该节点。
  3. 结果:DaemonSet 控制器会持续尝试调度 Pod 到该节点,但始终失败,最终导致该节点上没有对应的 Pod。

4. 解决方案:为 DaemonSet 添加容忍

要让 DaemonSet 的 Pod 能够在带有 node-role.kubernetes.io/platform-node:NoSchedule 污点的节点上运行,需要在 DaemonSet 的 Pod 模板中显式添加对应的容忍。例如:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: example-daemonset
spec:template:spec:containers:- name: example-containerimage: example-imagetolerations:  # 添加容忍配置- key: "node-role.kubernetes.io/platform-node"operator: "Exists"  # 匹配任意值effect: "NoSchedule"
关键点解释
  • operator: Exists:表示只要节点存在 node-role.kubernetes.io/platform-node 这个键的污点,无论其值是什么,Pod 都可以容忍。
  • effect: NoSchedule:明确针对 NoSchedule 效果的污点。

5. 其他可能原因

虽然污点是主要原因,但其他因素也可能导致 DaemonSet Pod 无法启动:

  1. 节点状态异常:节点处于 NotReadySchedulingDisabled 状态。
  2. 资源不足:节点的 CPU/内存等资源不足以运行 Pod。
  3. Pod 容器镜像问题:镜像拉取失败或镜像不存在。
  4. 命名空间配额限制:命名空间的资源配额(Resource Quota)限制了 Pod 的创建。

6. 验证与排查步骤

  1. 检查节点的污点

    kubectl describe node <node-name> | grep Taints
    

    确认节点是否存在 node-role.kubernetes.io/platform-node:NoSchedule 污点。

  2. 检查 DaemonSet 的容忍配置

    kubectl get daemonset <daemonset-name> -o yaml
    

    确认 Pod 模板中是否包含对应的容忍。

  3. 检查事件日志

    kubectl describe pod <pod-name> -n <namespace>
    

    查看 Pod 的调度失败原因(如 TaintNode 相关错误)。


总结

DaemonSet 无法在带有 node-role.kubernetes.io/platform-node:NoSchedule 污点的节点上启动 Pod 的根本原因是:Pod 模板未配置对应的容忍,导致调度器拒绝调度。
通过在 DaemonSet 的 Pod 模板中添加容忍配置,可以解决这一问题。但需谨慎操作:控制平面节点(如带有 node-role.kubernetes.io/control-plane:NoSchedule 的节点)通常不建议部署用户 Pod,以免影响集群稳定性。

http://www.xdnf.cn/news/989.html

相关文章:

  • 解决离线部署气隙相关问题
  • 前端实现数据导出成excel
  • 【eNSP实验】带环回接口的多区域OSPF
  • 黑马安装docker网络问题linux
  • OpenCV day7
  • 制作一款打飞机游戏16:空间优化
  • 生产环境问题排查:日志分析与性能瓶颈定位(一)
  • [wifiI]CCA
  • 关于QTableWidget控件中不显示Item的问题解决方法
  • 速通FlinkCDC3.0
  • 【数字图像处理】图像纹理分析
  • 使用 Vue Router 和 Vite 构建的自动路由生成系统
  • 基于unsloth微调一个越狱大模型
  • 经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)
  • Spark,配置hadoop集群2
  • set、multiset、map、multimap在OJ的使用
  • 深度学习预训练和微调
  • 在Ubuntu上查看PCL(Point Cloud Library)的版本
  • MSSQL-数据库还原报错-‘32(另一个程序正在使用此文件,进程无法访问。)‘
  • Cursor可视化大屏搭建__0420
  • java及mysql日期问题
  • RPA系统应用通用文字识别技术,推动 RPA 在各个领域的广泛应用和发展
  • 公有云攻防5(云函数)
  • Java学习手册:Cookie 与 Session 管理
  • 用全新发布的ChatGPT-o3搜文献写综述、专业审稿、降重润色,四个步骤轻松搞定全部论文难题!
  • 电子电器架构 ---软件定义汽车的电子/电气(E/E)架构
  • RolmOCR重磅开源:基于Qwen2.5-VL,速度提升40%,手写/倾斜文档识别准确率超92%
  • 基于定时器查询模式的LED闪烁(STC89C52单片机)
  • MCP:AI时代的“万能插座”,开启大模型无限可能
  • 策略模式:优雅应对多变的业务需求