K8s Q A Env Vars
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