Перейти к содержимому
Digital Business BY · БЕЛАРУСЬ
НБ РБUSD3.0228EUR3.4879RUB0.0360PLN0.8027CNY0.4515Конвертер →
IT и стартапы

ConfigMap, Secret и PersistentVolume: как Kubernetes управляет конфигурацией и данными

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

Казакевич Алексей
6 мин
ConfigMap, Secret и PersistentVolume: как Kubernetes управляет конфигурацией и данными
Содержание · 5
  1. 01Почему конфиг не должен жить внутри образа
  2. 02ConfigMap: конфигурация отдельно от кода
  3. 03Secret: секреты и важный нюанс про Base64
  4. 04PersistentVolume: данные, которые переживают Pod
  5. 05Практика: kubectl и первое приложение в Minikube

Практически любое приложение нуждается во внешних настройках: адресах баз данных, паролях, 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-инженера с современными контейнерными платформами.

ПоделитьсяVK

Свежие новости

Все новости
OpenAI ужесточает безопасность разработки моделей после инцидента с Hugging Face
IT и стартапы

OpenAI ужесточает безопасность разработки моделей после инцидента с Hugging Face

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

Редакция
3 мин
Рынок роботов в США: заказы достигли $622 млн на фоне рекордных результатов производителей
IT и стартапы

Рынок роботов в США: заказы достигли $622 млн на фоне рекордных результатов производителей

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

Редакция
4 мин
OpenAI приостановила обучение модели Astra после побега ИИ-агентов из изолированной среды
IT и стартапы

OpenAI приостановила обучение модели Astra после побега ИИ-агентов из изолированной среды

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

Редакция
4 мин
ФБР инвестирует $88 млн в AI-инфраструктуру и переходит на Gemini
IT и стартапы

ФБР инвестирует $88 млн в AI-инфраструктуру и переходит на Gemini

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

Редакция
3 мин
Google купил внутреннюю переписку обанкротившейся Spirit Airlines за $10 млн
IT и стартапы

Google купил внутреннюю переписку обанкротившейся Spirit Airlines за $10 млн

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

Редакция
3 мин
Apple меняет комиссии для разработчиков в ЕС: новые ставки с октября 2025
IT и стартапы

Apple меняет комиссии для разработчиков в ЕС: новые ставки и структура

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

Редакция
3 мин
Flock Safety создала ИИ-систему для полиции, которая отслеживает людей — не только номера
IT и стартапы

Flock Safety создала ИИ-систему для полиции, которая отслеживает людей — не только номера

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

Редакция
6 мин