K8s Q A Env Vars: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
 
Строка 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

Текущая версия на 16: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