Передайте переменную, которая содержит двойные кавычки (") в своем значении, для контейнера из развертывания K8s - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь развернуть экспортер statsd (https://github.com/prometheus/statsd_exporter)) в качестве док-контейнера в кластере K8s. Однако я хочу, чтобы некоторые параметры были настраиваемыми. Для этого я передаю некоторые аргументыконтейнер через развертывание K8s в формате yaml. Если эти аргументы не содержат символ двойных кавычек ("), все работает нормально. Однако, если желаемое значение введенных переменных содержит двойные кавычки, K8s интерпретирует их неправильно (Нечто подобное описано в Передача строки json в переменную окружения в развертывании k8s для Envoy ). Я хочу установить аргумент --statsd.listen-tcp=":<port>", и я использую command и args в K8sразвертывание:

- 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, и все время возникает одна и та же проблема: двойные кавычки неправильно анализируются.

Есть идеи относительно возможного решения?

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2019

Согласно исходному коду , statsd-exporter использует kingpin для командной строки и анализатора флагов. Если я не ошибаюсь, kingpin не требует, чтобы значения были заключены в двойные кавычки.

Я бы предложил попробовать:

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

Причина в том, что согласно исходному коду здесь , входное значение для statsd.listen-tcp разделено на хост и порт, и кажется, что хост в сообщении об ошибке получает значение символа двойной кавычки ".

...