atdtool 支持从 values/<group>/modules/*.yaml 中加载模块配置,并按模块名合并到最终 .Values 中。
典型写法:
values/
default/
modules/
logging.yaml
cache.yaml
dev/
modules/
logging.yaml
模块文件名会成为最终 values 的 key:
modules/logging.yaml->.Values.loggingmodules/cache.yaml->.Values.cache
模块文件内部不要再额外套一层模块名。
正确示例:
# modules/logging.yaml
enabled: true
log_path: /data/log错误示例:
# modules/logging.yaml
logging:
enabled: true
log_path: /data/log原因是当前实现会自动把整个文件挂到 .Values.logging 下;如果文件里再包一层,会变成 .Values.logging.logging。
enabled: true如果更高优先级来源没有明确关闭它,那么模块会被自动注入。
如果模块文件没有 enabled: true,也可以通过更高优先级来源显式启用:
logging:
enabled: truelogging:
enabled: false一旦更高优先级来源显式关闭模块,模块文件就不会再被注入。
模块层是低优先级补齐层,不是强覆盖层。
也就是说,当同一模块 key 同时出现在:
global.yaml- charts 同名 yaml
modules/<module>.yaml
最终规则是:
- 服务级同名 yaml 优先
- chart 默认值次之
global.yaml再次之- 模块文件最后补齐缺失 key
例如:
# global.yaml
logging:
enabled: true
log_path: /global/log# example.yaml
logging:
log_path: /service/log# modules/logging.yaml
enabled: true
log_path: /module/log
sinks:
file: true最终结果是:
logging:
enabled: true
log_path: /service/log
sinks:
file: true说明:
log_path由服务级同名 yaml 决定sinks.file来自模块文件补齐
由于模块可能未启用,模板中应始终做存在性保护:
{{- if .Values.logging }}
log_path: {{ .Values.logging.log_path }}
{{- end }}
访问内部字段时也建议建立在模块存在的前提下:
{{- if and .Values.logging .Values.logging.enabled }}
log_path: {{ .Values.logging.log_path }}
{{- end }}
当同时传入多个 values 路径时:
-p ./values/default,./values/dev模块文件也遵循“后 path 优先”的规则:
dev/modules/logging.yaml会覆盖default/modules/logging.yaml中的同名 key- 但它仍然不会覆盖更高优先级来源(服务级同名 yaml / chart 默认值 /
--set)
适合放入模块层的内容包括:
- 可选能力的默认配置(如
logging、cache、feature-flags) - 多 chart 共享但并非所有实例都启用的配置
- 希望由
enabled开关统一控制的配置块