Kubernetes helm configmap在values.yaml中包含客户端脚本
我必须将客户端脚本文件作为configmap包含在内,并装载到pod中,以了解如何在values.yaml中为下面的结构创建configmapKubernetes helm configmap在values.yaml中包含客户端脚本,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我必须将客户端脚本文件作为configmap包含在内,并装载到pod中,以了解如何在values.yaml中为下面的结构创建configmap app: server: client-cli1.sh: | #!/bin/bash echo "Hello World" client-cli2.sh: | #!/bin/bash echo "Hello World" 这是配置映射文件 apiVersion: v1 kind: Co
app:
server:
client-cli1.sh: |
#!/bin/bash
echo "Hello World"
client-cli2.sh: |
#!/bin/bash
echo "Hello World"
这是配置映射文件
apiVersion: v1
kind: ConfigMap
metadata:
name: cli-config
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val }}
{{ end }}
我收到错误“将YAML转换为JSON时出错:YAML:第14行:找不到预期的':'”
注意:不能更改结构,也不能使用文件功能,因为生成发生在其他地方,只提供values.ymal
如何解析此项。尝试以下操作:
apiVersion: v1
kind: ConfigMap
metadata:
name: cli-config
data:
{{ toYaml .Values.app.server | indent 2 }}
您可以将
头盔模板
与相同的-f
和-set
标志一起使用,以查看模板的输出。这是调试这类问题的关键,您可以在继续阅读之前尝试一下,以了解出了什么问题以及是否已修复
Kubernetes使用的YAML文件对缩进非常敏感。Helm的Go文本/模板引擎并不特别了解YAML结构。您可能会看到,脚本第二行的echo
根本没有缩进,这违反了YAML的缩进规则
有两个答案:
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val | indent 4 }}
{{ end }}
toJson
将字符串转换为JSON字符串,包括转义换行等细节。YAML 1.2旨在成为JSON的超集,因此应该可以:
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: {{ $val | toJson }}
{{ end }}
因此,您可以使用toYaml
让Helm为您完成艰苦的工作:
data:
{{ .Values.app.server | toYaml | indent 2 }}
使用
helm template
进行检查,以确保这些输出符合您的预期。第一个选项将生成更可读的ConfigMap YAML;第二种是更简洁的模板;但两者应该是等效的。当我运行第一行时,并没有在添加的地方只添加echo语句。这是因为#被认为是values.yaml中的注释?“内容可以安全地以选项卡或“#”字符开头。”