• Русский
  • Настройка ConfigMap

    ConfigMap позволяет отделить артефакты конфигурации от содержимого образа, чтобы обеспечить переносимость контейнеризованных приложений. В следующих разделах описываются ConfigMap и способы их создания и использования.

    Понимание ConfigMap

    Многие приложения требуют настройки с помощью комбинации конфигурационных файлов, аргументов командной строки и переменных окружения. В OpenShift Container Platform эти артефакты конфигурации отделены от содержимого образа, чтобы обеспечить переносимость контейнеризованных приложений.

    Объект ConfigMap предоставляет механизмы для внедрения данных конфигурации в контейнеры, при этом контейнеры остаются независимыми от OpenShift Container Platform. ConfigMap может использоваться для хранения как мелкозернистой информации, например отдельных свойств, так и крупнозернистой, например целых конфигурационных файлов или JSON-блоков.

    Объект ConfigMap содержит пары ключ-значение с данными конфигурации, которые могут использоваться в подах или применяться для хранения конфигурационных данных системных компонентов, таких как контроллеры. Например:

    # my-app-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-app-config
      namespace: default
    data:
      app_mode: "development"
      feature_flags: "true"
      database.properties: |-
        jdbc.url=jdbc:mysql://localhost:3306/mydb
        jdbc.username=user
        jdbc.password=password
      log_settings.json: |-
        {
          "level": "INFO",
          "format": "json"
        }

    Примечание: Вы можете использовать поле binaryData при создании ConfigMap из бинарного файла, например изображения.

    Данные конфигурации могут использоваться в подах различными способами. ConfigMap может применяться для:

    • Заполнения значений переменных окружения в контейнерах
    • Установки аргументов командной строки в контейнере
    • Заполнения конфигурационных файлов в томе

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

    Ограничения ConfigMap

    • ConfigMap должен быть создан до того, как его содержимое может быть использовано в подах.
    • Контроллеры могут быть написаны с учетом отсутствия данных конфигурации. Рекомендуется рассматривать каждый компонент, настроенный с помощью ConfigMap, индивидуально.
    • Объекты ConfigMap находятся в проекте.
    • Они могут ссылаться только на поды в том же проекте.
    • Kubectl поддерживает использование ConfigMap только для подов, полученных от API-сервера. Это включает поды, созданные с помощью CLI или косвенно через replication controller. Не поддерживаются поды, созданные с помощью флагов --manifest-url, --config узла OpenShift Container Platform или его REST API, так как это не стандартные способы создания подов.
    NOTE

    Под может использовать ConfigMap только в пределах одного namespace.

    Пример ConfigMap

    Теперь вы можете использовать app-config в Pod.

    # app-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-config
      namespace: k-1
    data:
      APP_ENV: "production"
      LOG_LEVEL: "debug"

    Создание ConfigMap через веб-консоль

    1. Перейдите в Container Platform.

    2. В левой боковой панели нажмите Configuration > ConfigMap.

    3. Нажмите Create ConfigMap.

    4. Следуйте инструкциям ниже для настройки соответствующих параметров.

      ПараметрОписание
      EntriesОтносится к парам ключ:значение, поддерживает методы Add и Import.
      • Add: Вы можете добавлять элементы конфигурации по одному или вставить одну или несколько строк с парами key=value в поле ввода Key для массового добавления элементов конфигурации.
      • Import: Импортируйте текстовый файл размером не более 1М. Имя файла будет использоваться как ключ, а содержимое файла — как значение для элемента конфигурации.
      Binary EntriesОтносится к бинарным файлам размером не более 1М. Имя файла будет использоваться как ключ, а содержимое файла — как значение для элемента конфигурации.
      Примечание: После создания ConfigMap импортированные файлы нельзя изменять.

      Пример формата массового добавления:

      # Одна пара key=value на строку, несколько пар должны быть на отдельных строках, иначе они не будут корректно распознаны после вставки.
      key1=value1
      key2=value2
      key3=value3
    5. Нажмите Create.

    Создание ConfigMap с помощью CLI

    kubectl create configmap app-config \
      --from-literal=APP_ENV=production \
      --from-literal=LOG_LEVEL=debug

    Или из файла:

    kubectl apply -f app-config.yaml -n k-1

    Операции

    Вы можете нажать (⋮) справа на странице списка или нажать Actions в правом верхнем углу страницы с деталями, чтобы при необходимости обновить или удалить ConfigMap.

    Изменения в ConfigMap повлияют на рабочие нагрузки, которые ссылаются на эту конфигурацию, поэтому рекомендуется заранее ознакомиться с инструкциями по эксплуатации.

    ОперацииОписание
    Обновить
    • После добавления или обновления ConfigMap, все рабочие нагрузки, которые ссылались на этот ConfigMap (или его элементы конфигурации) через переменные окружения, должны пересоздать свои поды, чтобы новая конфигурация вступила в силу.
    • Для импортированных бинарных элементов конфигурации поддерживается только обновление ключей, а не значений.
    УдалитьПосле удаления ConfigMap рабочие нагрузки, которые ссылались на этот ConfigMap (или его элементы конфигурации) через переменные окружения, могут столкнуться с проблемами при создании подов, если они будут пересозданы и не смогут найти источник ссылки.

    Просмотр, редактирование и удаление через CLI

    kubectl get configmap app-config -n k-1 -o yaml
    kubectl edit configmap app-config -n k-1
    kubectl delete configmap app-config -n k-1

    Способы использования ConfigMap в Pod

    В виде переменных окружения

    envFrom:
      - configMapRef:
          name: app-config

    Каждый ключ становится переменной окружения в контейнере.

    В виде файлов в томе

    volumes:
      - name: config-volume
        configMap:
          name: app-config
    
    volumeMounts:
      - name: config-volume
        mountPath: /etc/config

    Каждый ключ — это файл в каталоге /etc/config, а содержимое файла — значение.

    В виде отдельных переменных окружения

    env:
      - name: APP_ENV
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: APP_ENV

    ConfigMap и Secret

    ОсобенностьConfigMapSecret
    Тип данныхНе содержит чувствительной информацииЧувствительные данные (например, пароли)
    КодированиеОбычный текстКодируется в Base64
    Сценарии использованияКонфигурации, флагиПароли, токены