gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:57:45 25 4
gpt4 key购买 nike

我正在尝试将 statsd 导出器 ( https://github.com/prometheus/statsd_exporter ) 软件部署为 K8s 集群中的 docker 容器。但是,我希望一些参数是可配置的。为了做到这一点,我通过 K8s 部署以 yaml 格式将一些参数传递给容器。当这些参数不包含双引号字符 (") 时,一切正常。但是,如果引入的变量的所需值包含双引号,K8s 会以错误的方式解释它们(类似的内容在 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 变量传递,并且总是发生同样的问题:双引号没有以正确的方式解析。

关于一些可能的解决方案的任何想法?

谢谢!

最佳答案

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

我建议尝试:

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

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

关于variables - 将值中包含双引号 (") 的变量从 K8s 部署传递到容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58732312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com