Kubernetes: Как расширить переменные env из configmap - PullRequest
0 голосов
/ 25 августа 2018

Я использую карты конфигурации для ввода переменных env в мои контейнеры.Некоторые из переменных создаются путем объединения переменных, например:

~ / .env file

HELLO=hello
WORLD=world
HELLO_WORLD=${HELLO}_${WORLD}

Затем я создаю карту конфигурации

kubectl create configmap env-variables --from-env-file ~/.env

Манифесты развертывания ссылаются на карту конфигурации.

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-image
        image: us.gcr.io/my-image
        envFrom:
        - configMapRef:
            name: env-variables

Когда я выполняю свои текущие модули и выполняю команду

$ printenv HELLO_WORLD

Я ожидаючтобы увидеть hello_world, но вместо этого я вижу ${HELLO}_${WORLD}.Переменные не раскрываются, и поэтому мои приложения, которые ссылаются на эти переменные, получат нерасширенное значение.

Как обеспечить расширение переменных?

Если это имеет значение, мои изображенияиспользуя альпийский.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Я думаю о том, чтобы просто развернуть переменные перед созданием configMap и загрузкой в ​​kubernetes

Другим параллельным подходом будет использование kustomize :

kustomize позволяет настраивать необработанные файлы YAML без шаблонов для нескольких целей, оставляя исходный YAML нетронутым и пригодным для использования как есть.

Это похоже на make в том, что то, что он делает, объявлено в файле, и это похоже на sed, в котором он генерирует отредактированный текст.

Часть sed должна иметь возможность генерировать правильное расширенное значение в вашем файле yaml.

0 голосов
/ 25 августа 2018

Я не могу найти какую-либо документацию по интерполяции переменных среды, но мне удалось заставить это работать, удалив интерполированную переменную из карты конфигурации и перечислив ее непосредственно в развертывании.Это также работает, если все переменные перечислены непосредственно в развертывании.Похоже, что kubernetes не применяет интерполяцию к переменным, загруженным из configmaps.

Например, это будет работать:

Configmap

apiVersion: v1
data:
  HELLO: hello
  WORLD: world
kind: ConfigMap
metadata:
  name: env-variables
  namespace: default

Развертывание:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-image
        image: us.gcr.io/my-image
        envFrom:
        - configMapRef:
            name: env-variables
        env:
        - name: HELLO_WORLD
          value: $(HELLO)_$(WORLD)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...