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