Знакомство с Kubernetes. Часть 8: Переменные окружения
Jun 18, 2018 07:02 · 348 words · 2 minute read
В данной статье рассмотрим какие ресурсы и переменные окружения доступны контейнерам и как переопределять переменные окружения для контейнера при запуске пода (Pod) в кластере Kubernetes. Давайте разберемся!
В 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-образе.
Чуть больше информации о переменных окружения можно получить здесь. Кроме того, в отдельных статьях мы также рассмотрим использование секретов (Secrets) и конфигмапов (ConfigMaps) - как частных случаев установки переменных окружения внутри docker-контейнеров.