Назад | Перейти на главную страницу

Обновление переменных среды Kubernetes во время выполнения

Kubernetes предоставляет информацию о других сервисах (всем запущенным модулям в одном пространстве имен) с использованием переменных среды. Например:

куда UIMANAGEMENT_V6_2_2 это название развертывания нашей службы.

Мы хотели бы использовать эти данные для реализации простого обнаружения сервисов, но я только что понял, что эта информация не обновляется внутри уже запущенных модулей во время выполнения - когда в кластере развертывается новая служба. Это просто проблема конфигурации k8s или обновление среды выполнения в настоящее время не поддерживается?

Спасибо.

Обновление переменных среды на запущенных модулях не поддерживается в Kubernetes.

Однако если вы развернете свои поды в Kubernetes как deployment.apps, вы можете изменить переменную среды в развертывании, что заставит Kubernetes развернуть новые экземпляры вашего модуля с новым значением переменной среды и завершить работу старых модулей с использованием более старого значения переменной.

Например, если вы развертываете модуль с помощью Pod api вот так:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
    env:
    - name: TEST_VAR
      value: "123"

Вы не сможете kubectl edit pod nginx-pod обновить значение, установленное для TEST_VAR. Если вы когда-нибудь захотите обновить TEST_VAR env, вам необходимо удалить модуль и заново создать его с обновленным значением «вручную».

Вместо этого вы должны развернуть модуль, используя Deployment.app api, вот так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        env:
        - name: TEST_VAR
          value: "123"

Что позволит вам сделать kubectl edit deployments.apps nginx-deployment, или даже проще, kubectl set env deployment/nginx-deployment TEST_VAR="456", чтобы обновить TEST_VAR стоимость. Kubernetes удалит и заново создаст поды.