hostprofi.ru
Подобрать хостинг
Термин

ConfigMap

краткое определение

Объект Kubernetes для хранения конфигурационных данных отдельно от Docker-образа приложения.

ConfigMap — объект Kubernetes для хранения конфигурационных данных в формате ключ-значение. Позволяет отделить конфигурацию от Docker-образа: изменить URL базы данных или параметры кеша без пересборки контейнера.

Как работает

ConfigMap создаётся в кластере как отдельный ресурс и монтируется в Pod двумя способами: как переменные среды или как файлы в файловую систему контейнера. Pod ссылается на ConfigMap по имени — при обновлении данных в ConfigMap примонтированные файлы обновляются автоматически (с небольшой задержкой до 60 секунд), переменные среды требуют перезапуска Pod.

Создание ConfigMap

# Из литерала
kubectl create configmap app-config   --from-literal=DATABASE_URL=postgres://localhost:5432/db   --from-literal=CACHE_TTL=300

# Из файла конфигурации
kubectl create configmap nginx-config --from-file=nginx.conf

# Из директории (все файлы)
kubectl create configmap app-configs --from-file=./configs/

# YAML-манифест
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_URL: "postgres://localhost:5432/db"
  nginx.conf: |
    server {
      listen 80;
      location / { proxy_pass http://backend; }
    }

История

ConfigMap появился в Kubernetes 1.2 (2016). До этого конфигурацию передавали через переменные среды напрямую в спецификации Pod — неудобно и негибко. ConfigMap стал частью принципа «12-факторного приложения»: хранить конфигурацию отдельно от кода. Secret — аналог ConfigMap для чувствительных данных: пароли, токены, TLS-сертификаты. Secret хранится в base64-кодировании и не попадает в логи kubectl.

Использование в Pod

# Как переменные среды
env:
  - name: DB_URL
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: DATABASE_URL

# Как файл в контейнере
volumes:
  - name: config-volume
    configMap:
      name: nginx-config
volumeMounts:
  - name: config-volume
    mountPath: /etc/nginx/conf.d

ConfigMap vs Secret vs Helm values

ConfigMap — для несекретных настроек: URL, таймауты, флаги фич. Secret — для паролей, API-ключей, TLS. Helm values — параметризация на уровне деплоя, генерирует ConfigMap/Secret автоматически. Для централизованного управления секретами используют HashiCorp Vault с оператором External Secrets.

На что обращать внимание

ConfigMap ограничен 1 MB данных — не подходит для хранения больших файлов или бинарных данных. Обновление ConfigMap не перезапускает Pod автоматически — нужно rollout restart: kubectl rollout restart deployment/myapp. В Coolify и других PaaS-инструментах аналог ConfigMap — переменные окружения приложения, управляемые через UI.

Immutable ConfigMap

В Kubernetes 1.21+ ConfigMap поддерживает поле immutable: true. Неизменяемый ConfigMap не проверяется kube-apiserver при каждом монтировании, что снижает нагрузку на API сервер в больших кластерах с тысячами Pod. Изменить иммутабельный ConfigMap нельзя — нужно создать новый с другим именем и обновить ссылки в Pod-спецификации.

Интеграция с CI/CD

В Helm chart ConfigMap генерируется из шаблона с переменными, специфичными для окружения. Файл values-production.yaml содержит production-значения, values-staging.yaml — staging. Деплой: helm upgrade myapp ./chart -f values-production.yaml.

External Secrets Operator синхронизирует секреты из HashiCorp Vault, AWS Secrets Manager или Yandex Lockbox в Kubernetes Secrets автоматически. При ротации секрета в Vault Secret в кластере обновляется без ручного вмешательства — безопаснее, чем хранить пароли в ConfigMap или переменных среды Pod.

Ограничения и альтернативы

Максимальный размер одного ConfigMap — 1 MB. Для хранения больших файлов конфигурации (сертификаты, словари) используйте отдельные PersistentVolume или облачное хранилище с монтированием через CSI-драйвер.

Другие термины