Визначення значень змінних середовища за допомогою контейнера ініціалізації

СТАН ФУНКЦІОНАЛУ: Kubernetes v1.35 [beta](стандартно увімкнено)

Ця сторінка показує, як налаштувати змінні середовища для контейнерів у Pod за допомогою файлу.

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Версія вашого Kubernetes сервера має бути не старішою ніж v1.34.

Для перевірки версії введіть kubectl version.

Як працює дизайн

В цьому завданні ви створите Pod, який отримує змінні середовища з файлів, проєцюючи ці значення в запущений контейнер.

apiVersion: v1
kind: Pod
metadata:
  name: envfile-test-pod
spec:
  initContainers:
    - name: setup-envfile
      image:  nginx
      command: ['sh', '-c', "echo \"DB_ADDRESS=\'address\'\nREST_ENDPOINT=\'endpoint\'\" > /data/config.env"]
      volumeMounts:
        - name: config
          mountPath: /data
  containers:
    - name: use-envfile
      image: nginx
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: DB_ADDRESS
          valueFrom:
            fileKeyRef:
              path: config.env
              volumeName: config
              key: DB_ADDRESS
              optional: false
  restartPolicy: Never
  volumes:
    - name: config
      emptyDir: {}

В маніфесті ви можете побачити, що initContainer монтує том emptyDir і записує змінні середовища у файл всередині нього, а звичайні контейнери посилаються на нього як на файл, так і на ключ змінної середовища через поле fileKeyRef, не потребуючи монтування тому. Коли поле optional встановлено в false, вказаний key у fileKeyRef повинен існувати у файлі змінних середовища.

Том буде змонтовано лише в контейнер, який записує у файл (initContainer), тоді як контейнер-споживач, який споживає змінну середовища, не матиме змонтованого тому.

Формат файлу env відповідає стандарту файлів env kubernetes.

Під час ініціалізації контейнера kubelet отримує змінні середовища з вказаних файлів у томі emptyDir і надає їх контейнеру.

Створіть Pod:

kubectl apply -f https://k8s.io/examples/pods/inject/envars-file-container.yaml

Перевірте, чи контейнер у Pod працює:

kubectl get pods

```shell
# Якщо новий Pod ще не справний, повторіть цю команду кілька разів.
kubectl get pods

Перевірте журнали контейнера на наявність змінних середовища:

kubectl logs dapi-test-pod -c use-envfile | grep DB_ADDRESS

Вивід показує значення вибраних змінних середовища:

DB_ADDRESS=address

Синтаксис файлів env

Формат файлу env, який використовує Kubernetes, є чітко визначеним підмножиною семантики змінних середовища для POSIX-сумісного bash. Будь-який файл env, який підтримує Kubernetes, створюватиме ті самі змінні середовища, що й POSIX-сумісний bash. Однак POSIX-сумісний bash підтримує деякі додаткові формати, які Kubernetes не приймає.

Приклад:

MY_VAR='my-literal-value'

Правила

  • Оголошення змінної: використовуйте форму VAR='value'. Пробіли навколо = ігноруються; пробіли на початку рядка ігноруються; порожні рядки ігноруються.
  • Значення в лапках: значення повинні бути укладені в одинарні лапки (').
    • Вміст всередині одинарних лапок зберігається буквально. Не застосовується обробка екрануючих послідовностей, згортання пробілів або інтерпретація символів.
    • Нові рядки всередині одинарних лапок зберігаються (підтримуються багаторядкові значення).
  • Коментарі: рядки, що починаються з #, розглядаються як коментарі та ігноруються. Символ # всередині значення в одинарних лапках не є коментарем.

Приклади:

# comment
DB_ADDRESS='address'

MULTI='line1
line2'

Непідтримувані форми

  • Значення без лапок заборонені:
    • VAR=value — не підтримується.
  • Значення в подвійних лапках заборонені:
    • VAR="value" — не підтримується.
  • Кілька сусідніх рядків у лапках не підтримуються:
    • VAR='val1''val2' — не підтримується.
  • Будь-яка форма інтерполяції, розширення або конкатенації не підтримується:
    • VAR='a'$OTHER або VAR=${OTHER} — не підтримується.

Сувора вимога щодо використання одинарних лапок гарантує, що kubelet сприймає значення буквально під час завантаження змінних середовища з файлів.

Що далі

Змінено December 30, 2025 at 9:49 AM PST: [uk] Ukrainian translation (all-in-one) (976e26f53c)