Короткий ответ
ConfigMap хранит некритичные конфигурационные данные (переменные окружения, файлы настроек) отдельно от образа контейнера и может быть подключён к Pod как переменные окружения или как смонтированный том с файлами.
Как это работает подробнее
ConfigMap — это объект Kubernetes с набором пар ключ-значение или целых файлов; он хранится в etcd в открытом виде (без шифрования по умолчанию) и не предназначен для секретов. При монтировании как volume каждый ключ становится отдельным файлом в указанной директории.
Пример кода
manifest.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
LOG_LEVEL: "info"
---
apiVersion: v1
kind: Pod
metadata: { name: demo }
spec:
containers:
- name: app
image: myapp:1.0
envFrom:
- configMapRef: { name: app-config }Что использовать на практике
- Практика. ConfigMap позволяет использовать один и тот же образ контейнера в разных окружениях (dev/staging/prod), подставляя разную конфигурацию снаружи образа, что соответствует принципу "один артефакт — много окружений". Для горячей перезагрузки конфигурации приложение должно само отслеживать изменения файла, Kubernetes не перезапускает Pod автоматически.
Подводные камни
- Риски. хранить пароли и токены в ConfigMap вместо Secret — Secret тоже не шифрует данные по умолчанию, но разделение облегчает контроль доступа и аудит; ожидать, что изменение ConfigMap мгновенно применится к переменным окружения уже запущенного контейнера — переменные окружения читаются только при старте процесса.