• Русский
  • Настройка 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
    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 узла OpenShift Container Platform, его флага --config или REST API, поскольку это не стандартные способы создания подов.
    NOTE

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

    Пример ConfigMap

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

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

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

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

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

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

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

      ПараметрОписание
      EntriesОтносится к парам ключ:значение, поддерживает методы Добавить и Импортировать.
      • Добавить: Вы можете добавлять элементы конфигурации по одному или вставить одну или несколько строк с парами key=value в поле ввода ключа для массового добавления.
      • Импортировать: Импортируйте текстовый файл размером не более 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

    Операции

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

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

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

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

    kubectl get configmap app-config -o yaml
    kubectl edit configmap app-config
    kubectl delete configmap app-config

    Способы использования 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-кодирование
    Сценарии использованияКонфигурации, флагиПароли, токены