如何在Helm的Deployment条件中引用ConfigMap的efslogs.enabled值?
问题解答
不行,Helm模板渲染阶段无法直接读取Kubernetes集群中已存在的ConfigMap内容,需根据你的ConfigMap创建方式来处理:
情况1:ConfigMap是通过Helm模板生成的
如果这个efsconfig ConfigMap是当前Helm Chart的模板文件生成的,且它的efslogs.enabled值仍来自values.yaml(比如你把原来的efslogs块迁移到了efsconfig.efslogs节点下),那可以直接在Deployment的条件判断里引用Values里的对应字段:
{{- if .Values.efsconfig.efslogs.enabled }} - name: EFS_DRIVE_MOUNTES value: "true" {{- end}}
本质上ConfigMap和Deployment的判断逻辑共用同一个Values来源,能保持模板的一致性。
情况2:ConfigMap是集群中预先创建的(非Helm管理)
这种情况下Helm在渲染模板时无法获取ConfigMap的内容,有两种可选方案:
- 方案A:将ConfigMap的值同步到Helm Values
在安装/升级Chart时,通过命令行把ConfigMap里的值传入Values:
之后Deployment模板里同样用helm install your-chart . --set efsconfig.efslogs.enabled=$(kubectl get configmap efsconfig -o jsonpath='{.data.efslogs\.enabled}'){{- if .Values.efsconfig.efslogs.enabled }}来判断。 - 方案B:在应用层面判断
把ConfigMap的efslogs.enabled作为环境变量注入Pod,然后在应用代码里根据这个环境变量执行对应逻辑,但这种方式无法在Deployment模板层面做条件渲染(比如动态添加环境变量),因为模板渲染时无法获取该值。
内容的提问来源于stack exchange,提问作者Vazgen Torosyan
相关产品推荐
相关产品推荐

