Переопределить значения env, определенные в спецификации контейнера - PullRequest
0 голосов
/ 28 января 2019

У меня есть карта конфигурации, в которой я определил следующее отображение значения ключа в разделе data:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: test
  name: test-config
data:
  TEST: "CONFIGMAP_VALUE"

, затем в определении моего контейнера (в манифесте размещения / набора состояний) у меня естьследующее:

        env:
        - name: TEST
          value: "ANOTHER_VALUE"
        envFrom:
        - configMapRef:
            name: test-config

При этом я ожидал, что значение из configmap (TEST = "CONFIGMAP_VALUE") переопределит значение (по умолчанию), указанное в спецификации контейнера (TEST = "ANOTHER_VALUE"), но это не так (TEST всегда получает значение из спецификации контейнера).Я не смог найти соответствующую документацию по этому поводу - возможно ли добиться такого переопределения значения переменной env?

1 Ответ

0 голосов
/ 28 января 2019

От Kubernetes api referencenece: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#container-v1-core

envFrom: Список источников для заполнения переменных среды в контейнере.Ключи, определенные в источнике, должны быть C_IDENTIFIER.Все недействительные ключи будут сообщены как событие при запуске контейнера.Если ключ существует в нескольких источниках, значение, связанное с последним источником, будет иметь приоритет.Значения, определенные Env с дублирующим ключом, будут иметь приоритет.Не может быть обновлено.

Так что выше ясно сказано, что env будет иметь приоритет перед envFrom .

Когда ключ существуетв нескольких источниках значение, связанное с последним источником, будет иметь приоритет.

Итак, переопределение см. ниже:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: default
  name: test-config
data:
  TEST: "CONFIGMAP_VALUE"
---
apiVersion: v1
kind: Pod
metadata:
  name: busy
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox
    env:
    - name: TEST
      value: "DEFAULT_VAULT"
    - name: TEST
      valueFrom:
        configMapKeyRef:
          name: test-config
          key: TEST
    command:
    - "sh"
    - "-c"
    - >
      while true; do
        echo "$(TEST)";
        sleep 3600;
      done

Проверка:

kubectl logs busy -n default
CONFIGMAP_VALUE
...