Облачная платформаВсе платформы

Настройка переменных среды

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Контейнер переменные среды (например, DB_HOST=db.example.com) являются параметрами конфигурации, динамически передаваемыми во время работы контейнера. Они позволяют гибко настраивать поведение приложений и параметры без пересборки образа. Они предоставляют:

  • Динамическая конфигурация приложений: Вы можете внедрять разные значения переменных (например, DB_HOST=prod.db.com или DB_HOST=test.db.com) для изменения поведения приложений без пересборки образа. Даже если контейнер перезапускается из‑за планирования, информация конфигурации остаётся действительной, включая информацию о подключении к базе данных, API‑конечные точки и переключатели функций.
  • Конфигурация изоляции среды: Та же образ используется с разными переменными среды для адаптации к средам разработки, тестирования и производства. Например, ENV_MODE=production включает конфигурацию среды production.
  • Управление безопасностью конфиденциальных данных: Конфиденциальные данные, такие как пароли и ключи, передаются безопасно с использованием механизмов, таких как секреты. Конфиденциальные данные не захардкожены в образе или коде.

Вы можете изменять переменные среды даже после развертывания нагрузок, повышая гибкость конфигурации нагрузки. Настройка переменных среды в CCE имеет ту же функцию, что и указание ENV в Dockerfile. Для получения дополнительной информации см. Определение переменных среды для контейнера.

Добавление переменных среды в консоли

Прежде чем использовать ConfigMap или secret в качестве переменной среды, убедитесь, что ConfigMap и secret созданы в кластере. Для подробностей о том, как создать ConfigMap и secret, см. Создание ConfigMap и Создание Secret.

  1. Войдите в консоль CCE.
  2. Нажмите название кластера, чтобы перейти в консоль кластера, выберите Workloads в навигационной панели и нажмите Создать нагрузку в правом верхнем углу.
  3. В Информация о контейнере (Настройки контейнера > Информация о контейнере),Переменные среды.
  4. Настраивайте переменные среды по необходимости. Кластеры CCE поддерживают несколько типов переменных среды. Для получения подробностей см. Table 1.

    • Чтобы добавить переменные среды по одной, нажмите Добавить переменную и выберите Тип, Имя переменной, и Значение переменной/Ссылка.
    • Чтобы добавить переменные среды пакетно, нажмите Пакетное редактирование пользовательских переменных. Затем в появившемся диалоговом окне введите переменные среды в формате "Variable name=Variable value or variable reference".

    Рисунок 1 Настройка переменных среды


    Таблица 1 Переменные среды

    Параметр

    Описание

    Тип

    Тип переменной среды. Возможные варианты:

    • Custom: Введите имя переменной среды и значение.
    • Добавлено из ConfigMap: Импортировать все ключи из ConfigMap как переменные среды.

      Как показано в Figure 1, все ключи в configmap-example импортируются как переменные среды.

    • Добавлено из ключа ConfigMap: Импортировать значение ключа из ConfigMap как значение переменной среды.

      Как показано в Figure 1, значение configmap_key в configmap-example импортируется как значение переменной среды. Если значение configmap_key является configmap_value, значение key1 является configmap_value.

    • Добавлено из secret: Импортировать все ключи из secret как переменные среды.

      Как показано в Figure 1, все ключи в secret-example импортируются как переменные среды.

    • Добавлено из ключа secret: Импортировать значение ключа из secret как значение переменной среды.

      Как показано в Figure 1, значение secret_key в secret-example импортируется как переменная среды. Если значение secret_key является secret_value, значение key2 является secret_value.

    • Значение переменной/Ссылка: Использовать поле, определённое pod, в качестве значения переменной среды.

      Как показано в Figure 1, имя pod импортируется как значение key3.

    • Ссылка на ресурс: Значение Request или Limit

      Как показано в Figure 1, ограничение CPU для container-1 импортируется как значение key4.

    Имя переменной

    Имя переменной среды, установленной в контейнере.

    Значение переменной/Ссылка

    Значение переменной среды или значение переменной среды, полученное из других источников.

  5. Настройте другие параметры и нажмите Создать нагрузку в правом нижнем углу. Через некоторое время статус нагрузки меняется на .Running

Добавление переменных среды с помощью kubectl

Предположим, что ConfigMap и secret уже доступны в кластере. Для подробностей о том, как их создать, см. Создание ConfigMap и Создание Secret.

  1. Используйте kubectl для доступа к кластеру. Для подробностей см. Доступ к кластеру с помощью kubectl.
  2. Проверьте ConfigMap в кластере. В этом примере ConfigMap называется configmap-example.

    kubectl get configmap configmap-example -oyaml

    Вывод команды:

    apiVersion: v1\ndata:\n configmap_key: configmap_value\nkind: ConfigMap\n...

  3. Проверьте secret в кластере. В этом примере secret называется secret-example.

    kubectl get secret secret-example -oyaml

    Вывод команды:

    apiVersion: v1\ndata:\n secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVlc2VjcmV0X3ZhbHVl — значение secret_value в режиме Base64.\nkind: Secret\n...

  4. Создайте файл с именем nginx-deployment.yaml. nginx-deployment.yaml — пример имени файла, и его можно переименовать при необходимости.

    vi nginx-deployment.yaml

    Настройте переменные среды в YAML‑файле нагрузки. Ниже приведён пример:

    apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: env-example\n namespace: default\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: env-example\n template:\n metadata:\n labels:\n app: env-example\n spec:\n containers:\n - name: container-1\n image: nginx:alpine\n imagePullPolicy: Always\n resources:\n requests:\n cpu: 250m\n memory: 512Mi\n limits:\n cpu: 250m\n memory: 512Mi\n env:\n - name: key # Define the environment variable name and value.\n value: value\n - name: key1 # Import the value of a key in the ConfigMap as the value of an environment variable.\n valueFrom:\n configMapKeyRef :\n name: configmap-example\n key: configmap_key\n - name: key2 # Import the value of a key in the secret as the value of an environment variable.\n valueFrom:\n secretKeyRef :\n name: secret-example\n key: secret_key\n - name: key3 # Use the field defined by the pod as the value of an environment variable.\n valueFrom:\n fieldRef :\n apiVersion: v1\n fieldPath: metadata.name\n - name: key4 # Use the value of the resource request or limit defined in the container as the value of an environment variable.\n valueFrom:\n resourceFieldRef :\n containerName: container1\n resource: limits.cpu\n divisor: 1\n envFrom:\n - configMapRef: # Import all key values in a ConfigMap as environment variables.\n name: configmap-example\n - secretRef: # Import all key values in a secret as environment variables.\n name: secret-example\n imagePullSecrets:\n - name: default-secret

  5. Создайте Deployment.

    kubectl create -f nginx-deployment.yaml

    Если отображается информация, аналогичная следующей, нагрузка создаётся:

    deployment.apps/env-example created

  6. Проверьте имя pod.

    kubectl get pod

    Вывод команды:

    NAME READY STATUS RESTARTS AGE\nenv-example-695b759569-lx9jp 1/1 Running 0 17m

  7. Посмотрите переменные среды в pod.

    kubectl exec env-example-695b759569-lx9jp -- printenv

    Если отображается информация, аналогичная следующей, переменные среды успешно настроены:

    / # env\nkey=value # Пользовательская переменная среды\nkey1=configmap_value # Добавлено из ключа ConfigMap\nkey2=secret_value # Добавлено из ключа secret\nkey3=env-example-695b759569-lx9jp # metadata.namemetadata.name определено pod\nkey4=1 # limits.cpulimits.cpu определено container1. Значение округляется вверх, в единицах ядер.\nconfigmap_key=configmap_value # Добавлено из ConfigMap. Значение ключа из оригинального ConfigMap импортировано.\nsecret_key=secret_value # Добавлено из secret. Значение ключа из оригинального secret импортировано.