将值中包含双引号(“)的变量从K8s部署传递到容器

我正在尝试将statsd导出器(https://github.com/prometheus/statsd_exporter)软件部署为K8s集群中的docker容器。但是,我希望一些参数是可配置的。为此,我通过yaml格式的K8s部署将一些参数传递给容器。当这些参数不包含双引号字符(“)时,一切正常。但是,如果所引入变量的期望值包含双引号,则K8会以错误的方式解释它们(Pass json string to environment variable in a k8s deployment for Envoy中对此进行了类似描述)。我要设置的是--statsd.listen-tcp=":<port>"参数,并且在K8s部署中使用commandargs

- name: statsd-exporter
  image: prom/statsd-exporter:v0.12.2
    ...
  command: ["/bin/statsd_exporter"]
  args: ['--log.level="debug"','--statsd.listen-tcp=":9999"']

当我在K8s中部署它并检查“运行中”部署的内容时,一切似乎都正确:

command:
- /bin/statsd_exporter
args:
- --log.level="debug"
- --statsd.listen-tcp=":9999"

但是,容器永远不会启动,并出现以下错误:

time="..." level=fatal msg="Unable to resolve \": lookup \": no such host" source="main.go:64"

我认为K8s试图“忽略”双引号,并通过它们将反斜杠添加到容器中,因此后者无法理解它们。我还尝试将args写为

args: ["--log.level=\"debug\"","--statsd.listen-tcp=\":9999\""]

,同样的事情发生。我也尝试过将它们作为env变量传递,并且始终都发生相同的问题:双引号没有以正确的方式进行解析。

关于某种可能的解决方案有什么想法吗?

谢谢!

wyaacc 回答:将值中包含双引号(“)的变量从K8s部署传递到容器

根据source code,statsd-exporter将kingpin用于命令行和标志解析器。如果我没记错的话,主销不需要值用双引号引起来。

我建议尝试:

statsd.listen-tcp

原因是,根据源代码here"的输入值分为主机和端口,似乎每个错误消息的主机都获得了双引号的值字符YYYY-MM

本文链接:https://www.f2er.com/3151402.html

大家都在问