You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置EKS节点仅在DaemonSet就绪后调度Pod?

如何让EKS节点在DaemonSet就绪后才调度新Pod

一、针对特定DaemonSet的实现方案

方法1:利用节点就绪门(Node Readiness Gates)

节点就绪门允许你扩展节点的就绪状态判断逻辑——只有当自定义条件满足(比如目标DaemonSet的Pod在该节点上就绪),节点才会被标记为Ready,调度器只会向就绪节点分配新Pod。

步骤:

  1. 定义自定义节点条件类型,例如acme.io/required-daemonset-ready
  2. 编写自定义控制器(可用Kubebuilder快速生成,或用Python/Go脚本),实现以下逻辑:
    • 监听目标DaemonSet的Pod状态,当节点上的目标Pod进入Ready状态时,给该节点添加acme.io/required-daemonset-ready=True的条件
    • 若Pod故障退出,将该条件标记为False或移除
  3. 配置节点的就绪门:
    可以通过EKS节点组的启动脚本自动给新节点添加该配置,或手动patch节点:
    apiVersion: v1
    kind: Node
    metadata:
      name: target-node
    spec:
      readinessGates:
      - conditionType: "acme.io/required-daemonset-ready"
    

方法2:污点+容忍度配合自动清理污点

给新节点添加初始污点,阻止普通Pod调度;当目标DaemonSet的Pod就绪后,自动移除污点。

步骤:

  1. 在EKS节点组的用户数据中,配置kubelet添加初始污点:
    # 启动脚本中添加kubelet参数
    --register-with-taints=acme.io/wait-daemonset=true:NoSchedule
    
  2. 给目标DaemonSet配置容忍度,确保它能被调度到带污点的节点:
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: required-daemonset
    spec:
      template:
        spec:
          tolerations:
          - key: "acme.io/wait-daemonset"
            operator: "Equal"
            value: "true"
            effect: "NoSchedule"
    
  3. 给DaemonSet的Pod添加PostStart钩子,当Pod就绪后移除节点污点:
    containers:
    - name: main-container
      image: your-image:latest
      lifecycle:
        postStart:
          exec:
            command: ["kubectl", "taint", "nodes", "$(NODE_NAME)", "acme.io/wait-daemonset-"]
      env:
      - name: NODE_NAME
        valueFrom:
          fieldRef:
            fieldPath: spec.nodeName
    
    注意:需要给DaemonSet绑定的ServiceAccount授予nodes/update权限,否则无法执行污点操作。

二、等待所有DaemonSet就绪的实现方案

方法1:扩展就绪门监控所有DaemonSet

修改自定义控制器的逻辑:检查节点上所有DaemonSet的Pod状态,只有当所有DaemonSet的Pod都处于Ready状态时,才将节点的自定义就绪条件标记为True。

方法2:优先级+调度约束结合

  1. 确保所有DaemonSet使用高优先级(默认DaemonSet的优先级已经高于普通Pod,可无需额外配置)
  2. 给普通Pod添加节点亲和规则,要求节点满足自定义的acme.io/all-daemonsets-ready=True条件,该条件由控制器根据节点上所有DaemonSet的Pod状态动态更新。

EKS专属配置提示

在EKS中,可通过Node Group的启动脚本批量配置节点的污点或就绪门,无需手动操作单个节点。例如在用户数据中添加kubectl patch命令,自动给新节点添加就绪门配置。

内容的提问来源于stack exchange,提问作者jrz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:35:27