如何在Helm中实现类似kubectl从env文件创建Secret的功能
Helm实现kubectl --from-env-file生成Secret的方案
你原有代码的问题在于直接将整个env文件作为单个值编码后塞入Secret的data字段,不符合Secret的键值对结构,所以和kubectl create secret generic --from-env-file的生成结果差异很大。
正确模板代码
确保你的env文件放在Helm Chart根目录(和Chart.yaml同级),Secret模板写法如下:
kind: Secret apiVersion: v1 metadata: name: my-env-list type: Opaque data: {{- /* 逐行读取env文件 */}} {{- range $line := splitList "\n" (.Files.Get "envfile") }} {{- /* 跳过空行和#开头的注释行,和kubectl处理逻辑对齐 */}} {{- if and $line (not (hasPrefix "#" (trimSpace $line))) }} {{- /* 仅拆分第一个等号,避免value包含等号时被错误截断 */}} {{- $kv := split "=" $line }} {{ $kv._0 | trimSpace }}: {{ $kv._1 | trimSpace | b64enc }} {{- end }} {{- end }}
可选优化
如果你的env文件中value首尾带有单引号或双引号,可以将编码行修改为如下内容,自动去除多余引号:
{{ $kv._0 | trimSpace }}: {{ $kv._1 | trimSpace | trimAll "\"'" | b64enc }}
验证方式
执行helm template .命令在本地渲染模板,查看生成的Secret结构,即可确认和kubectl命令生成的结果完全一致。
内容的提问来源于stack exchange,提问作者Sayon Roy Choudhury
相关产品推荐
相关产品推荐

