如何在非本地管理的Helm Chart中集成自定义ConfigMap并随其卸载?
解决方案:将自定义ConfigMap集成到第三方Helm Chart部署中
有几种可行的办法满足你的需求,不用本地管理第三方Chart仓库,还能让卸载Chart时一并移除自定义ConfigMap:
1. 利用第三方Chart自带的额外资源参数(最省心)
很多成熟的官方Helm Chart(比如New Relic的)会提供extraManifests这类参数,允许你直接传入自定义的K8s资源YAML。你只需要:
- 在自己的
values.yml里添加如下内容:extraManifests: - apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-infra-config data: infra-config.yml: | # 这里填你的基础设施配置内容 key1: value1 key2: value2 - 安装时指定这个values文件:
helm install my-newrelic newrelic/newrelic-infrastructure --version <固定版本号> -f ./my-values.yml
这样安装后,ConfigMap会和New Relic的资源同属一个Helm Release,卸载时helm uninstall my-newrelic会一并删除它。
2. 用极简Wrapper Chart封装(最灵活)
如果第三方Chart没有提供额外资源的入口,你可以创建一个超简单的“包装”Chart,只做两件事:引用第三方Chart作为依赖、添加你的自定义ConfigMap模板,完全不用修改第三方Chart的代码:
- 创建一个新的目录作为Wrapper Chart,比如
newrelic-wrapper,里面的Chart.yaml内容如下:apiVersion: v2 name: newrelic-wrapper version: 0.1.0 dependencies: - name: newrelic-infrastructure version: "<你固定的版本号>" repository: "https://helm-charts.newrelic.com" - 在这个目录下创建
templates文件夹,里面新增你的ConfigMap模板infra-configmap.yaml:apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-infra-config data: infra-config.yml: | {{- .Values.infra.config | nindent 4 }} - 写自己的
values.yml,包含New Relic Chart的配置和你的ConfigMap内容:# New Relic官方Chart的配置 newrelic-infrastructure: licenseKey: "你的密钥" # 其他官方配置项... # 自定义ConfigMap的内容 infra: config: | key1: value1 key2: value2 - 安装Wrapper Chart即可:
helm install my-newrelic ./newrelic-wrapper -f ./my-values.yml
这个方案的好处是完全隔离第三方Chart的更新,你只需要维护几行配置,卸载时同样用helm uninstall就能把所有资源清掉。
3. 用Helm Post-Renderer动态注入资源
如果不想维护任何本地Chart文件,可以用Helm的--post-renderer功能,在渲染第三方Chart的模板后,自动追加你的ConfigMap内容:
- 写一个简单的shell脚本
add-configmap.sh:
(#!/bin/bash cat - ./my-configmap.yamlmy-configmap.yaml是你的ConfigMap文件,注意把metadata.name设为和Release关联的名字,比如{{ .Release.Name }}-infra-config) - 安装时用post-renderer参数:
helm install my-newrelic newrelic/newrelic-infrastructure --version <固定版本号> -f ./my-values.yml --post-renderer ./add-configmap.sh
这种方式完全不用维护Chart结构,但需要确保脚本和ConfigMap文件路径正确,卸载时同样会一并删除ConfigMap。
内容的提问来源于stack exchange,提问作者Branden
相关产品推荐
相关产品推荐

