首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >转义helm yml以进行部署

转义helm yml以进行部署
EN

Stack Overflow用户
提问于 2019-06-24 22:44:01
回答 1查看 2.8K关注 0票数 0

我正在尝试找出如何转义yml文件的这些部分,以便与helm一起使用。

            - name: SYSLOG_TAG
              value: '{{ index .Container.Config.Labels "io.kubernetes.pod.namespace" }}[{{ index .Container.Config.Labels "io.kubernetes.pod.name" }}]'
            - name: SYSLOG_HOSTNAME
              value: '{{ index .Container.Config.Labels "io.kubernetes.container.name" }}'

yml文件是用于将日志发送到书面记录的DaemonSet,此处包含标准kubernetes手动部署https://help.papertrailapp.com/kb/configuration/configuring-centralized-logging-from-kubernetes/的说明。这里有一个完整的yml文件https://help.papertrailapp.com/assets/files/papertrail-logspout-daemonset.yml的链接。

我找到了一些关于如何转义大括号和引号的答案,但似乎仍然不能让它工作。如果有某种方法可以让helm不对每个完整的值求值,这将是最简单的。

我最后一次尝试是这样的,但仍然导致错误。

              value: ''"{{" index .Container.Config.Labels \"io.kubernetes.pod.namespace\" "}}"["{{" index .Container.Config.Labels \"io.kubernetes.pod.name\" "}}"]''
            - name: SYSLOG_HOSTNAME
              value: ''"{{" index .Container.Config.Labels \"io.kubernetes.container.name\" "}}"''

这是错误:

Error: UPGRADE FAILED: YAML parse error on templates/papertrail-logspout-daemonset.yml: error converting YAML to JSON: yaml: line 21: did not find expected key

我可以硬编码这两个值,它工作得很好。我不太理解这些环境变量是如何工作的,但是发生的情况是,日志被发送到一个节点中每个pod的书面记录中,其中包含来自每个pod的标签。命名空间、实例名称、容器名称。

          env:
            - name: ROUTE_URIS
              value: "{{ .Values.backend.log.destination }}"
{{ .Files.Get "files/syslog_vars.yaml" | indent 13 }}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 08:48:31

我想到了两种明智的方法。

一种方法是定义一个可扩展为字符串{{的模板,此时您可以在变量扩展中使用该字符串。您不需要特别转义}}

{{- define "cc" }}{{ printf "{{" }}{{ end -}}
- name: SYSLOG_HOSTNAME
  value: '{{cc}} index .Container.Config.Labels "io.kubernetes.container.name" }}'

第二种方法是创建一个包含这些环境变量片段的外部文件,这种方法耗时较长,但转义较少。

# I am files/syslog_vars.yaml
- name: SYSLOG_HOSTNAME
  value: '{{ index .Container.Config.Labels "io.kubernetes.container.name" }}'

然后你就可以include the file了。这不会在文件中应用任何模板,它只是将其作为文字文本读取。

env:
{{ .Files.Get "files/syslog_vars.yaml" | indent 2 }}

最后一种技术的要点是,Helm读取任意文件,展开所有模板,然后尝试将结果文本解释为YAML。其中的indent 2部分需要与env:块的其余部分匹配;如果这是部署规范的深层部分,则可能需要8到10个空格。helm template会在不进行额外处理的情况下将图表呈现为文本,这对调试非常有帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56739017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档