ConfigMap, Secret и PersistentVolume: как Kubernetes управляет конфигурацией и данными
Разбираем ключевые объекты Kubernetes, которые отделяют настройки и секреты от кода — и объясняем, почему Base64 не является шифрованием.

Содержание · 5
Практически любое приложение нуждается во внешних настройках: адресах баз данных, паролях, API-ключах, токенах. Если зашить всё это внутрь Docker-образа, сопровождение превращается в головную боль, а безопасность — в иллюзию. Kubernetes решает эту проблему через три специализированных механизма: ConfigMap, Secret и PersistentVolume.
Почему конфиг не должен жить внутри образа
Представьте: база данных переехала на другой сервер. Если адрес подключения зашит в образ, придётся изменить конфиг, пересобрать образ, загрузить его в Registry и накатить обновление в кластере — и всё это ради одного параметра.
Ещё острее проблема встаёт при работе с несколькими окружениями. Одно приложение обычно запускается минимум в трёх средах: разработка, тестирование, продакшн. У каждой свой `DB_HOST`, свои ключи, свои режимы логирования. Собирать отдельный образ для каждой среды — значит нарушать базовый принцип контейнеризации: один образ должен работать в любом окружении без изменений.
Отдельная история — пароли и токены. Если они попали внутрь образа или в репозиторий Git, любой человек с доступом к коду или Registry может их прочитать. Именно для разделения кода, конфигурации и секретов Kubernetes предоставляет специальные объекты.
ConfigMap: конфигурация отдельно от кода
ConfigMap — объект Kubernetes для хранения обычных, несекретных настроек приложения в виде пар «ключ — значение». Типичное содержимое: адреса сервисов, номера портов, режим работы, пути к директориям, параметры логирования.
Пример манифеста:
```yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_ENV: production DB_HOST: postgres DB_PORT: "5432" LOG_LEVEL: info ```
Существует два основных способа передать ConfigMap приложению. Первый — через переменные окружения: контейнер получает значения как обычные env-переменные, и приложение работает с ними стандартным способом. Второй — монтирование как файловой системы: Kubernetes подключает ConfigMap как директорию, внутри которой каждый ключ становится отдельным файлом.
Второй подход особенно востребован для приложений, которые читают конфигурацию из файлов, а не из переменных окружения: Nginx, Prometheus, Grafana, PostgreSQL, различные Java-сервисы. Смена конфига в этом случае не требует пересборки образа — достаточно обновить ConfigMap.
Secret: секреты и важный нюанс про Base64
Для хранения чувствительных данных — паролей, токенов, SSH-ключей, TLS-сертификатов, API-ключей — предназначен объект Secret. По интерфейсу он похож на ConfigMap: те же два способа передачи данных в контейнер (переменные окружения или монтирование файлов).
Пример:
```yaml apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque stringData: username: admin password: Passpass ```
Здесь важно развеять распространённое заблуждение. Многие считают, что Kubernetes автоматически шифрует содержимое Secret. Это не так. По умолчанию значения хранятся в кодировке Base64 — а это кодирование, а не шифрование. Любой, кто получит доступ к объекту, сможет мгновенно декодировать значение.
Для полноценной защиты секретов используют дополнительные инструменты:
- HashiCorp Vault — популярное решение для централизованного управления секретами, широко применяется в корпоративных инсталляциях, в том числе в компаниях ПВТ;
- AWS Secrets Manager, Azure Key Vault, Google Secret Manager — облачные варианты для соответствующих платформ;
- шифрование данных непосредственно в хранилище etcd на уровне кластера.
Тем не менее Secret остаётся стандартным механизмом в Kubernetes: он отделяет секреты от обычной конфигурации и задаёт правильную структуру даже без дополнительного шифрования.
PersistentVolume: данные, которые переживают Pod
ConfigMap и Secret решают вопрос конфигурации. Но у приложений есть ещё одна потребность — хранить данные, которые не исчезнут при перезапуске или переносе Pod на другой узел.
Обычный Volume в Kubernetes привязан к жизненному циклу Pod: удалили Pod — потеряли данные. Для баз данных, файловых хранилищ и любых сервисов с состоянием это неприемлемо.
Для решения этой задачи существуют три взаимосвязанных объекта.
PersistentVolume (PV) — независимый том хранения, который существует отдельно от приложений. Его можно представить как виртуальный диск: он продолжает существовать даже после удаления Pod. PV может использовать локальный диск сервера, Amazon EBS, Google Persistent Disk, Azure Disk, Ceph и другие системы хранения.
PersistentVolumeClaim (PVC) — запрос от приложения на получение хранилища. Разработчику не нужно знать, где физически лежат данные: он просто описывает потребность («нужен диск 10 ГиБ»), а Kubernetes сам находит подходящий PV и связывает их.
StorageClass — описание того, как Kubernetes должен создавать новые тома: SSD, HDD, высокопроизводительные NVMe или сетевые файловые системы. Когда создаётся PVC, StorageClass позволяет автоматически выделить новый PV нужного типа — этот механизм называется Dynamic Provisioning. В современных облачных платформах создавать диски вручную обычно не требуется.
Полная цепочка выглядит так: Pod → PVC → StorageClass → PV → физическое хранилище. Если Pod удаляется или переносится на другой узел, Kubernetes снова подключает тот же PV через PVC — данные остаются доступными.
При создании PV и PVC важно выбрать правильный режим доступа. ReadWriteOnce — том подключается для чтения и записи только к одному узлу, стандартный вариант для баз данных. ReadOnlyMany — несколько узлов читают одновременно, запись запрещена. ReadWriteMany — несколько узлов читают и пишут одновременно, используется сетевыми файловыми системами.
Практика: kubectl и первое приложение в Minikube
Теория приобретает смысл только в связке с практикой. kubectl — официальная консольная утилита для управления кластером. Через неё создают ресурсы, обновляют приложения, смотрят логи, подключаются к контейнерам и диагностируют проблемы.
kubectl не управляет контейнерами напрямую: каждая команда уходит в Kubernetes API Server, который входит в состав Control Plane, а дальше работают компоненты кластера. Это означает, что одной утилитой можно управлять и локальным кластером, и удалёнными в облаке.
Для подключения к нужному кластеру kubectl использует файл kubeconfig (`~/.kube/config`). Внутри него хранятся адреса API Server, данные аутентификации и список контекстов. Контекст — это сохранённый набор параметров: какой кластер, какой пользователь, какой Namespace использовать по умолчанию. Переключение между контекстами критично при работе с несколькими окружениями: случайно выполнить команду в продакшне вместо тестового стенда — классическая ошибка.
Для локального обучения и экспериментов оптимален Minikube — инструмент, запускающий полноценный Kubernetes-кластер на одном компьютере. Он бесплатен, поддерживает Linux, Windows и macOS и включает все основные компоненты Kubernetes. Для запуска достаточно установленного Docker и свободных 20 ГБ на диске.
После старта кластера командой `minikube start` можно развернуть первое приложение буквально двумя командами:
```bash kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort minikube service nginx ```
Kubernetes сам создаст Deployment, ReplicaSet и Pod, загрузит образ Nginx и откроет страницу приветствия в браузере.
Для диагностики проблем чаще всего используют четыре команды: `kubectl describe pod <name>` — подробная информация и события Pod; `kubectl logs <name>` — логи приложения; `kubectl exec -it <name> -- sh` — подключение внутрь контейнера; `kubectl get events` — события всего кластера. В большинстве случаев этого достаточно, чтобы найти причину неисправности.
Полный путь приложения в Kubernetes выглядит так: Dockerfile → сборка образа → Container Registry → kubectl apply → Deployment → ReplicaSet → Pod → Service → Ingress → пользователь. Понимание этой цепочки — основа работы DevOps-инженера с современными контейнерными платформами.
Свежие новости
Все новости
OpenAI ужесточает безопасность разработки моделей после инцидента с Hugging Face
OpenAI объявила о новых мерах безопасности при разработке и тестировании моделей. Поводом стал июльский инцидент с Hugging Face, когда модель вышла за пределы тренировочной среды через уязвимость в утилите установки пакетов.

Рынок роботов в США: заказы достигли $622 млн на фоне рекордных результатов производителей
Во втором квартале 2026 года северноамериканские компании заказали 8 940 роботов на $622 млн — рост выручки производителей составил 21,3% при увеличении числа единиц лишь на 4,3%. Производители — от Teradyne до ABB — фиксируют рекордные показатели.

OpenAI приостановила обучение модели Astra после побега ИИ-агентов из изолированной среды
OpenAI остановила часть тренировочных процессов для модели Astra и объявила о новых мерах безопасности. Поводом стал инцидент, при котором ИИ-агенты вышли за пределы изолированных сред и взломали Hugging Face — и компания не заметила этого неделями.

ФБР инвестирует $88 млн в AI-инфраструктуру и переходит на Gemini
ФБР готово потратить до $88 млн на серверы и оборудование для расширения AI-мощностей. Бюро также намерено развернуть модель Gemini от Google на собственной инфраструктуре — с лицензией по выделенной ёмкости, а не по числу пользователей.

Cursor запустил хостинг кода Origin — прямой конкурент GitHub
Cursor запустил Origin — платформу для хостинга кода с репозиториями, pull-request'ами и совместной работой. Старт совпал с шестичасовым глобальным сбоем GitHub.

Google купил внутреннюю переписку обанкротившейся Spirit Airlines за $10 млн
Google заплатил $10 млн за 100 млн писем, около 500 млн сообщений в Teams и 30 млн строк кода обанкротившейся Spirit Airlines. Это первый случай, когда внутренние операционные данные компании стали предметом конкурентных торгов на аукционе по банкротству.

Apple меняет комиссии для разработчиков в ЕС: новые ставки и структура
Apple вводит новую структуру комиссий для приложений в ЕС: от 5% для дистрибуции вне App Store до 26% для крупных разработчиков, использующих встроенную оплату Apple. Изменения вступают в силу с 1 октября.

Flock Safety создала ИИ-систему для полиции, которая отслеживает людей — не только номера
Flock Safety годами уверяла, что её камеры не идентифицируют людей. Wired получил код новой ИИ-системы OS Investigate и выяснил: она делает именно это — строит досье, находит ассоциатов и ищет людей по поведенческим паттернам.

Etched привлёк $700 млн при оценке $21 млрд — рост вдвое за месяц
Стартап Etched за один месяц удвоил оценку с $10,3 до $21 млрд, привлёкши $700 млн под руководством Jane Street. Фонд не просто вложился — он уже запустил стойку с чипами Etched в своём дата-центре.