【发布时间】:2019-06-24 14:44:00
【问题描述】:
我试图弄清楚如何转义 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,用于将日志发送到 papertrail,此处提供标准 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
我可以对这两个值进行硬编码,而且效果很好。我不太明白这些 env 变量是如何工作的,但是会发生什么情况是日志被发送到节点中每个 pod 的 papertrail 中,并带有每个 pod 的标签。命名空间、pod 名称和容器名称。
env:
- name: ROUTE_URIS
value: "{{ .Values.backend.log.destination }}"
{{ .Files.Get "files/syslog_vars.yaml" | indent 13 }}
【问题讨论】:
-
预期输出是什么?换句话说,你想要达到的 SYSLOG_TAG 和 SYSLOG_HOSTNAME 的值是多少?
-
你能发布完整的
papertrail-logspout-daemonset.yml文件吗? -
@PaulLalonde 这些值就是原始 yml 文件中的值。所需的功能是获取节点中每个正在运行的容器的命名空间、容器名称和 pod 名称以发送到 papertrail。仅在不使用 helm 的情况下手动部署时效果很好。
标签: kubernetes kubernetes-helm