Облачная платформаAdvanced

Настройка переменных окружения

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

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

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

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

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

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

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

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

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


    Table 1 Переменные среды

    Параметр

    Описание

    Тип

    Тип переменной окружения. Параметры перечислены ниже:

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

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

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

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

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

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

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

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

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

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

    • Ссылка на ресурс: Значение Запрос или Лимит определено контейнером и используется в качестве значения переменной окружения.

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

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

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

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

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

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

Добавление переменных окружения с помощью kubectl

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

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

    kubectl get configmap configmap-example -oyaml

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

    apiVersion: v1
    data:
    configmap_key: configmap_value
    kind: ConfigMap
    ...

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

    kubectl get secret secret-example -oyaml

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

    apiVersion: v1
    data:
    secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl is the value of secret_value in Base64 mode.
    kind: Secret
    ...

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

    vi nginx-deployment.yaml

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

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

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

    kubectl create -f nginx-deployment.yaml

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

    deployment.apps/env-example created

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

    kubectl get pod

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

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

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

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

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

    / # env
    key=value # Custom environment variable
    key1=configmap_value # Added from a ConfigMap key
    key2=secret_value # Added from a secret key
    key3=env-example-695b759569-lx9jp # metadata.name defined by the pod
    key4=1 # limits.cpu defined by container1. The value is rounded up, in unit of cores.
    configmap_key=configmap_value # Added from a ConfigMap. The key value in the original ConfigMap key is imported.
    secret_key=secret_value # Added from a secret. The key value in the original secret is imported.