Установка requirepass с аргументами при развертывании Redis в k8s работает с $ (), но не с $ {} - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь развернуть Redis (путем создания диаграммы Хелма) в качестве StatefulSet в кластере Kubernetes.Я не создаю другой образ Redis поверх официального образа Redis Docker, скорее я просто пытаюсь использовать значения по умолчанию, доступные в Официальном образе Redis Docker , и просто предоставляю свои redis.conf и requirepass во время выполнения.

Чтобы предоставить redis.conf, я использую ConfigMap и монтирую его в /config/redis.conf в контейнере.

Теперь я хочу передать опцию --requirepass как args в Кубернетескак показано ниже:

...
containers: [
  {
    name: redis,
    image: {
      repository: redis,
      tag: 5.0
    },
    imagePullPolicy: Always,
    workingDir: /data/,
    args: [ "/config/redis.conf", "--requirepass", "<password>" ],  # line of concern
    ports: [
      containerPort: 6379
    ],
    env: [
      {
        name: REDIS_AUTH,
        valueFrom: {
          secretKeyRef: {
            name: redis,
            key: password
          }
        }
      }
    ],
...

Сбой следующей строки:

args: [ "/config/redis.conf", "--requirepass", "${REDIS_AUTH}" ]

и наоборот, это работает:

args: [ "/config/redis.conf", "--requirepass", "$(REDIS_AUTH)" ]

Хотя синтаксис $()предназначен для подстановки команд, а REDIS_AUTH является переменной окружения, а не исполняемым файлом, как это работает, а ${REDIS_AUTH} - нет?

1 Ответ

2 голосов
/ 29 сентября 2019

Это особенность Kubernetes, которая позволяет расширять переменную среды в поле command или args, а затем использовать синтаксис $() вместо синтаксиса ${}.

Проверьте эту ссылку: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#use-environment-variables-to-define-arguments

...