如何将整个JSON字符串传递给Helm图表值?

Kos*_*ahb 3 json kubernetes kubernetes-helm

如何将整个JSON字符串传递给Helm图表值?

我在values.yml哪里config值应包含带有应用程序配置的整个JSON

...
config: some JSON here
...
Run Code Online (Sandbox Code Playgroud)

我需要将此值传递给秘密模板,然后将其作为卷安装到Kubernetes容器中。

{{- $env := default "integration" .Values.env}}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-{{ $env }}
type: Opaque
data:
  config.json: {{ .Values.config | b64enc | quote }}
Run Code Online (Sandbox Code Playgroud)

但是,像这样传递单引号字符串的明显方法'{"redis": "localhost:6379"}'失败了,因为Helm出于某种原因删除了字符串中的所有双引号(即使我转义了双引号),因此我最终{redis: localhost:6379}得到的不是有效的JSON。

还有其他任何可能性如何一次将配置全部传递到Pod,而不用加载具有tpl功能的模板文件并使所有需要的字段分别访问values.yml吗?

Ros*_*ose 7

如果您想避免编码,这是另一个建议:

env:
  - name: MYCONFIG
  value: {{ .Files.Get "config.json" | toPrettyJson }}
Run Code Online (Sandbox Code Playgroud)

根据helm 文档,helm 使用模板函数,例如toPrettyJson内置的 Go text/template 包和Sprig 模板函数库提供的函数。


Rya*_*son 6

如果.Values.config包含json,则可以在模板化Secret中使用{{ .Values.config | toJson | b64enc | quote }}toJson用来将json转换为json 似乎很奇怪,但是helm在您告诉您之前不会将其本机视为json。有关执行此操作的示例,请参见SO问题如何在yaml文件(Helm)中使用json变量

  • 另一种方法是将json放在图表底部的文件中,并使用`{{.Files.Get“ config.json” | b64enc | 或与AsSecrets一起使用.Files.Glob,但我想您特别希望内容文件中包含内容。 (2认同)
  • 是的,我需要 `.Values.config` 中的 JSON,因为我们使用 Rancher。因此,我们在图表中有 `questions.yml`,并且该值通过 Rancher CLI 或 GUI 交互填充 (2认同)