Визначення змінних середовища для контейнера
Ця сторінка показує, як визначити змінні середовища для контейнера у Kubernetes Pod.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Визначення змінної середовища для контейнера
При створенні Pod ви можете задати змінні середовища для контейнерів, які запускаються в Pod. Щоб задати змінні середовища, включіть поле env
або envFrom
у файлі конфігурації.
Поля env
та envFrom
мають різний ефект.
env
- дозволяє вам задати змінні середовища для контейнера, вказуючи значення безпосередньо для кожної змінної, яку ви називаєте.
envFrom
- дозволяє вам задати змінні середовища для контейнера, посилаючись на ConfigMap або Secret. Коли ви використовуєте
envFrom
, всі пари ключ-значення у зазначеному ConfigMap або Secret встановлюються як змінні середовища для контейнера. Ви також можете вказати спільний префіксовий рядок.
Докладніше про ConfigMap та Secret.
Ця сторінка пояснює, як використовувати env
.
У цьому завданні ви створюєте Pod, який запускає один контейнер. Конфігураційний файл для Pod визначає змінну середовища з імʼям DEMO_GREETING
та значенням "Привіт із середовища"
. Ось маніфест конфігурації для Pod:
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/hello-app:2.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
Створіть Pod на основі цього маніфесту:
kubectl apply -f https://k8s.io/examples/pods/inject/envars.yaml
Перегляньте перелік запущених Podʼів:
kubectl get pods -l purpose=demonstrate-envars
Вивід буде подібний до:
NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 0 9s
Перегляньте змінні середовища контейнера Pod:
kubectl exec envar-demo -- printenv
Вивід буде подібний до такого:
NODE_VERSION=4.4.2 EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 HOSTNAME=envar-demo ... DEMO_GREETING=Привіт із середовища DEMO_FAREWELL=Такий солодкий прощальний слова
Примітка:
Змінні середовища, встановлені за допомогою полівenv
або envFrom
, перевизначають будь-які змінні середовища, вказані в образі контейнера.Примітка:
Змінні середовища можуть посилатися одна на одну, проте важливий порядок. Змінні, які використовують інші, визначені в тому ж контексті, повинні йти пізніше у списку. Також уникайте циклічних посилань.Використання змінних середовища у вашій конфігурації
Змінні середовища, які ви визначаєте у конфігурації Pod у .spec.containers[*].env[*]
, можна використовувати в інших частинах конфігурації, наприклад, у командах та аргументах, які ви задаєте для контейнерів Pod. У наступній конфігурації прикладу, змінні середовища GREETING
, HONORIFIC
та NAME
встановлені на Warm greetings to
, The Most Honorable
та Kubernetes
відповідно. Змінна середовища MESSAGE
комбінує набір усіх цих змінних середовища, а потім використовує їх як аргумент командного рядка, переданий контейнеру env-print-demo
.
Імена змінних середовища складаються з літер, цифр, підкреслення, крапок або дефісів, але перший символ не може бути цифрою. Якщо ввімкнуто функціональну можливість RelaxedEnvironmentVariableValidation
, можна використовувати всі друковані символи ASCII, окрім "=" для імен змінних середовища.
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: bash
env:
- name: GREETING
value: "Warm greetings to"
- name: HONORIFIC
value: "The Most Honorable"
- name: NAME
value: "Kubernetes"
- name: MESSAGE
value: "$(GREETING) $(HONORIFIC) $(NAME)"
command: ["echo"]
args: ["$(MESSAGE)"]
Після створення команда echo Warm greetings to The Most Honorable Kubernetes
виконується в контейнері.
Що далі
- Дізнайтеся більше про змінні середовища.
- Дізнайтеся про використання secret як змінних середовища.
- Дивіться EnvVarSource.