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

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

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

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

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

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

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

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

  1. Войдите в CCE console.
  2. Нажмите имя кластера, чтобы перейти в консоль кластера, выберите Workloads в navigation pane и нажмите Create Workload в правом верхнем углу.
  3. В Container Information (Container Settings > Container Information) выберите Environment Variables.
  4. Настройте переменные среды по необходимости. Кластеры CCE поддерживают несколько типов переменных среды. Подробности см. в Table 1.

    • Чтобы добавить переменные среды по одной, нажмите Add Variable и укажите Type, Variable Name и Variable Value/Reference.
    • Чтобы добавить переменные среды пакетно, нажмите Batch Edit Custom Variables. Затем в открывшемся диалоговом окне введите переменные среды в формате "Variable name=Variable value or variable reference".

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


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

    Параметр

    Описание

    Тип

    Тип переменной среды. Доступны следующие варианты:

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

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

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

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

    • Added from secret: Импортировать все ключ‑значения из secret в виде переменных среды.

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

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

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

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

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

    • Resource Reference: Значение Request или Limit, определённое контейнером, используется как значение переменной окружения.

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

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

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

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

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

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

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

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

  1. Используйте kubectl для доступа к кластеру. Подробности см. Accessing a Cluster Using 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. Проверьте имя pod.

    kubectl get pod

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

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

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

    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.