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