What would you like to be added?
希望 Advanced DaemonSet 能支持:根据 Node 的 label 对创建的 Pod 做差异化 patch。
类似 Argo Rollouts 的 patches 机制,但按节点维度生效。比如在不同类型的节点上,自动注入不同的 env、label 或资源限制。
Why is this needed?
我们在用 OpenKruise 管理 Nydus(镜像加速组件)的 DaemonSet。集群中有两类节点:
- 大磁盘节点:有 2TB+ 本地存储,用于关键业务
- 普通节点:只有 500GiB 存储
Nydus 支持通过 LOCAL_CACHE_SIZE 和 FEATURE_GATE_LARGE_DISK 控制本地缓存大小。我们希望:
- 用 一个 DaemonSet 统一管理所有 Nydus 实例
- 在大磁盘节点上自动启用大缓存配置,普通节点用默认值
目前只能通过 维护多个 DaemonSet 实现,导致:
如果没有原生支持,我们只能自己实现 Mutating Webhook,或者硬拆成多个 DaemonSet —— 都不是理想的长期方案。
Proposed Solution
建议在 AdvancedDaemonSetSpec 中增加 patches 字段:
patches:
- selector:
matchLabels:
node-role/nydus-storage: large
patch:
spec:
template:
metadata:
labels:
nydus/cache: "large"
spec:
containers:
- name: nydusd
env:
- name: LOCAL_CACHE_SIZE
value: "2Ti"
- name: FEATURE_GATE_LARGE_DISK
value: "true"
逻辑:
- 创建 Pod 前,根据其绑定的 Node label 判断是否匹配
selector
- 如果匹配,应用对应的
patch
- 否则使用默认模板
- 这样既能保持单 DaemonSet 的简洁性,又能支持异构节点场景。
其他可行的技术方案
- 多个 DaemonSet:现在就在用,但配置重复、管理麻烦,升级策略也得维护多份。
- Mutating Webhook:技术上可行,但需要额外部署服务、管理证书,且存在性能和可用性风险。
一些补充
这个需求在很多场景都比较常见:
- 监控/日志 agent 在不同机型上配置不同采样率或资源限制
- CNI 插件在同一个集群的边缘节点或低配节点启用精简模式
- GPU/加速器节点上的设备插件需要注入特定环境变量或 volume
- 存储 Daemon(如 LVM、ZFS)根据本地磁盘容量自动调整配置
如果 Advanced DaemonSet 能原生支持“按 Node label 打补丁”,将极大提升其在真实生产环境中的灵活性和实用性。
What would you like to be added?
希望 Advanced DaemonSet 能支持:根据 Node 的 label 对创建的 Pod 做差异化 patch。
类似 Argo Rollouts 的
patches机制,但按节点维度生效。比如在不同类型的节点上,自动注入不同的 env、label 或资源限制。Why is this needed?
我们在用 OpenKruise 管理 Nydus(镜像加速组件)的 DaemonSet。集群中有两类节点:
Nydus 支持通过
LOCAL_CACHE_SIZE和FEATURE_GATE_LARGE_DISK控制本地缓存大小。我们希望:目前只能通过 维护多个 DaemonSet 实现,导致:
如果没有原生支持,我们只能自己实现 Mutating Webhook,或者硬拆成多个 DaemonSet —— 都不是理想的长期方案。
Proposed Solution
建议在
AdvancedDaemonSetSpec中增加patches字段:逻辑:
selectorpatch其他可行的技术方案
一些补充
这个需求在很多场景都比较常见:
如果 Advanced DaemonSet 能原生支持“按 Node label 打补丁”,将极大提升其在真实生产环境中的灵活性和实用性。