K8s Q A Env Vars: различия между версиями
Sirmax (обсуждение | вклад) (Новая страница: «Категория:K8s Категория:K8s_Вопросы_И_Ответы») |
Sirmax (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
[[Категория:K8s]] |
[[Категория:K8s]] |
||
[[Категория:K8s_Вопросы_И_Ответы]] |
[[Категория:K8s_Вопросы_И_Ответы]] |
||
+ | |||
+ | =Env Variables= |
||
+ | |||
+ | В Kubernetes запущенному контейнеру доступны несколько важных ресурсов: |
||
+ | <BR> |
||
+ | файловая система, представляющая собой комбинацию docker-образа (слои) и одного или нескольких томов; |
||
+ | * информация о самом контейнере |
||
+ | * информация о других объектах в кластере. |
||
+ | <BR> |
||
+ | Информация о самом контейнере обычно включает в себя: |
||
+ | <BR> |
||
+ | * имя хоста (hostname) - это имя пода (Pod), в котором работает контейнер. Доступно через команду hostname или вызов функции gethostname; |
||
+ | * пространство имен пода (Pod) - доступно как переменные окружения; |
||
+ | * пользовательские переменные окружения из манифеста (описания) пода (Pod) - поговорим о них позже; |
||
+ | * переменные окружения, указанные статически в docker-образе (например, при сборке). |
||
+ | * Информация о других объектах в кластере Kubernetes доступна контейнеру тоже в качестве переменных среды. Например, служба с именем foo, внутри контейнера с именем bar будет отображаться в переменных окружения так: |
||
+ | <PRE> |
||
+ | FOO_SERVICE_HOST=<the host the service is running on> |
||
+ | FOO_SERVICE_PORT=<the port the service is running on> |
||
+ | </PRE> |
||
+ | При создании пода (Pod), можно установить переменные окружения для контейнеров, которые работают в данном поде. Для этого нужно добавить в файл конфигурации (манифест) поле env или envFrom, например так: |
||
+ | <PRE> |
||
+ | apiVersion: v1 |
||
+ | kind: Pod |
||
+ | metadata: |
||
+ | name: envar-demo |
||
+ | labels: |
||
+ | purpose: demonstrate-envars |
||
+ | spec: |
||
+ | containers: |
||
+ | - name: envar-demo-container |
||
+ | image: gcr.io/google-samples/node-hello:1.0 |
||
+ | env: |
||
+ | - name: DEMO_GREETING |
||
+ | value: "Hello from the environment" |
||
+ | - name: DEMO_FAREWELL |
||
+ | value: "Such a sweet sorrow" |
||
+ | </PRE> |
||
+ | Сохраним предложенный манифест в файле envars.yaml и запустим под в кластере Kubernetes: |
||
+ | |||
+ | kubectl create -f envars.yaml |
||
+ | <BR> |
||
+ | Проверим список запущенных подов: |
||
+ | <PRE> |
||
+ | kubectl get pods -l purpose=demonstrate-envars |
||
+ | Результат предыдущей команды будет примерно таким: |
||
+ | |||
+ | NAME READY STATUS RESTARTS AGE |
||
+ | envar-demo 1/1 Running 0 9s |
||
+ | </PRE> |
||
+ | Подключаемся к запущенному контейнеру: |
||
+ | |||
+ | kubectl exec -it envar-demo -- /bin/bash |
||
+ | Выводим на экран переменные окружения с помощью команды printenv (вывод сокращен): |
||
+ | <PRE> |
||
+ | root@envar-demo:/# printenv |
||
+ | |||
+ | NODE_VERSION=4.4.2 |
||
+ | EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 |
||
+ | HOSTNAME=envar-demo |
||
+ | ... |
||
+ | DEMO_GREETING=Hello from the environment |
||
+ | DEMO_FAREWELL=Such a sweet sorrow |
||
+ | <PRE> |
||
+ | Примечание. Стоит помнить, что переменные, установленные с помощью env или envFrom переопределяют значения переменных установленных в docker-образе. |
||
+ | |||
+ | Чуть больше информации о переменных окружения можно получить [https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/ Env Vars] |
||
+ | |||
+ | частные случаи установки переменных окружения внутри docker-контейнеров: |
||
+ | * Secrets |
||
+ | * ConfigMaps |
Текущая версия на 15:42, 8 января 2024
Env Variables
В Kubernetes запущенному контейнеру доступны несколько важных ресурсов:
файловая система, представляющая собой комбинацию docker-образа (слои) и одного или нескольких томов;
- информация о самом контейнере
- информация о других объектах в кластере.
Информация о самом контейнере обычно включает в себя:
- имя хоста (hostname) - это имя пода (Pod), в котором работает контейнер. Доступно через команду hostname или вызов функции gethostname;
- пространство имен пода (Pod) - доступно как переменные окружения;
- пользовательские переменные окружения из манифеста (описания) пода (Pod) - поговорим о них позже;
- переменные окружения, указанные статически в docker-образе (например, при сборке).
- Информация о других объектах в кластере Kubernetes доступна контейнеру тоже в качестве переменных среды. Например, служба с именем foo, внутри контейнера с именем bar будет отображаться в переменных окружения так:
FOO_SERVICE_HOST=<the host the service is running on> FOO_SERVICE_PORT=<the port the service is running on>
При создании пода (Pod), можно установить переменные окружения для контейнеров, которые работают в данном поде. Для этого нужно добавить в файл конфигурации (манифест) поле env или envFrom, например так:
apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: DEMO_GREETING value: "Hello from the environment" - name: DEMO_FAREWELL value: "Such a sweet sorrow"
Сохраним предложенный манифест в файле envars.yaml и запустим под в кластере Kubernetes:
kubectl create -f envars.yaml
Проверим список запущенных подов:
kubectl get pods -l purpose=demonstrate-envars Результат предыдущей команды будет примерно таким: NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 0 9s
Подключаемся к запущенному контейнеру:
kubectl exec -it envar-demo -- /bin/bash Выводим на экран переменные окружения с помощью команды printenv (вывод сокращен):
root@envar-demo:/# printenv NODE_VERSION=4.4.2 EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 HOSTNAME=envar-demo ... DEMO_GREETING=Hello from the environment DEMO_FAREWELL=Such a sweet sorrowПримечание. Стоит помнить, что переменные, установленные с помощью env или envFrom переопределяют значения переменных установленных в docker-образе. Чуть больше информации о переменных окружения можно получить Env Vars частные случаи установки переменных окружения внутри docker-контейнеров: * Secrets * ConfigMaps