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

同YAML文件内Deployment如何引用ConfigMap配置checksum注解

答案

不能直接实现,原因和可行方案如下:

  • 你代码里写的{{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}是Helm模板语法,该语法的引用维度是独立的模板文件,不是同一个YAML内用---分隔的资源块。这个语句的逻辑是加载当前模板目录下名为configmap.yaml的独立文件内容计算哈希,根本不会识别同文件里写的ConfigMap块。
  • 原生Kubernetes本身没有同清单文件内跨资源块引用的能力:用---分隔的多个资源在提交时会被拆成独立对象逐个发送给API Server处理,对象之间没有绑定关系,不存在“同文件资源互访”的内置逻辑。
可落地的实现方式
  • 标准Helm实践:把ConfigMap拆分到同目录下独立的configmap.yaml文件,Deployment单独放在deployment.yaml,你原来写的checksum注解就可以正常工作——ConfigMap内容变更时哈希值自动变化,触发Deployment滚动更新,这也是生产环境最常用的写法。
  • 单文件Helm写法:如果一定要把三个资源放在同一个文件里,可以先把ConfigMap内容定义为Helm具名模板,分别在ConfigMap资源声明、checksum注解处引用这个模板,示例:
{{- define "app.config" -}}
# 此处填写ConfigMap完整配置
apiVersion: v1
kind: ConfigMap
data:
  test.conf: |
    key=value
{...}
{{- end -}}
---
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include "app.config" . | sha256sum }}
{...}
---
apiVersion: v1
kind: Service
{...}
---
{{ include "app.config" . }}
  • Kustomize方案:如果不用Helm,可以用Kustomize内置的configMapGenerator,它会自动为ConfigMap生成带内容哈希的名称,自动同步到Deployment的引用配置,ConfigMap变更时会自动触发Pod滚动更新,不需要手动维护checksum注解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:20