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

能否仅在指定节点部署DaemonSet?含活跃部署与非关联命名空间节点场景

问题1:是否可以仅在存在活跃Deployment的节点上部署DaemonSet?

可以实现,核心思路是通过节点标签联动+DaemonSet的节点选择规则完成,具体步骤如下:

  • 给运行目标Deployment Pod的节点自动打标签:通过MutatingAdmissionWebhook或自定义脚本/Operator实现监控逻辑——当Deployment的Pod被调度到节点时,自动给节点添加标签(比如has-active-deployment=yes);当节点上该Deployment的所有Pod被移除后,自动删除对应标签。
  • 配置DaemonSet的节点选择规则:在DaemonSet的YAML中,通过spec.nodeSelector直接匹配标签,或用更灵活的spec.affinity.nodeAffinity设置亲和性,仅选择带有has-active-deployment=yes标签的节点。
  • 注意:必须保证标签的添加/移除逻辑闭环,否则DaemonSet可能会留在已无活跃Deployment Pod的节点上。
问题2:如何让cAdvisor的DaemonSet仅运行在与自身命名空间服务无关的节点上?

这里的“无关节点”指未运行该命名空间下Pod的节点,实现方式如下:

  1. 给运行自身命名空间Pod的节点打标签:用MutatingAdmissionWebhook或自定义监控脚本,当节点上存在目标命名空间的Pod时,添加标签(比如runs-my-ns-pods=yes);当节点上该命名空间的Pod全部移除后,删除该标签。
  2. 配置cAdvisor DaemonSet的节点亲和性规则,主动排除带有上述标签的节点,示例YAML片段:
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cadvisor
spec:
  selector:
    matchLabels:
      name: cadvisor
  template:
    metadata:
      labels:
        name: cadvisor
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              # 排除带有runs-my-ns-pods=yes标签的节点
              - key: runs-my-ns-pods
                operator: NotIn
                values:
                - "yes"
              # 匹配未设置该标签的节点
              - key: runs-my-ns-pods
                operator: DoesNotExist
      containers:
      - name: cadvisor
        image: gcr.io/cadvisor/cadvisor:latest
        ports:
        - containerPort: 8080
  1. 若已明确服务仅运行在特定节点组,可直接给这些节点打标签,再用上述亲和性规则排除,无需动态监控Pod调度情况。

内容的提问来源于stack exchange,提问作者H. Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:45:56