Что такое ConfigMap в Kubernetes?

«Что такое ConfigMap в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ConfigMap — это объект Kubernetes, предназначенный для хранения нефункциональных конфигурационных данных (например, переменных окружения, файлов конфигурации) в формате пар «ключ-значение» или целых файлов. Его основная цель — отделить конфигурацию от образа контейнера, что позволяет изменять настройки приложения без пересборки Docker-образов и перезапуска Pod'ов.

Пример создания ConfigMap из файла:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  # Простые ключ-значение
  LOG_LEVEL: "INFO"
  MAX_CONNECTIONS: "100"
  # Внедрение целого файла конфигурации
  nginx.conf: |
    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://backend:8080;
        }
    }

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

  1. Как переменные окружения:
    env:
      - name: LOG_LEVEL
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: LOG_LEVEL
  2. Как смонтированный том (volume):
    volumes:
      - name: config-volume
        configMap:
          name: app-config
    containers:
      ...
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config

Важное ограничение: Изменения в ConfigMap не применяются автоматически к уже работающим Pod'ам. Для обновления конфигурации требуется либо перезапуск Pod'а (например, через rollout deployment), либо использование sidecar-контейнеров (например, stakater/reloader), которые отслеживают изменения и инициируют перезапуск.