Хранение данных в Kubernetes основано на трех ключевых понятиях: PersistentVolume (PV), PersistentVolumeClaim (PVC) и StorageClass. Они определяют, как запрашивается, выделяется и настраивается хранилище внутри кластера. В основе часто лежат драйверы CSI (Container Storage Interface), которые отвечают за фактическое предоставление и подключение хранилища. Давайте кратко рассмотрим каждый компонент, а затем выделим роль CSI-драйвера.
PersistentVolume (PV) — это часть хранилища в кластере, которая была выделена (либо статически администратором, либо динамически через StorageClass). Он представляет собой базовое хранилище — например, диск у облачного провайдера или сетевую файловую систему — и рассматривается как ресурс в кластере, аналогично узлу.
PersistentVolumeClaim (PVC) — это запрос на хранилище. Пользователи определяют, сколько хранилища им нужно и режим доступа (например, чтение-запись). Если подходящий PV доступен или может быть динамически создан (через StorageClass), PVC связывается с этим PV. После связывания Pod’ы могут ссылаться на PVC для сохранения или совместного использования данных.
Generic Ephemeral Volumes для Kubernetes — это функция, введённая в Kubernetes, которая позволяет использовать CSI-управляемые временные
тома в течение жизненного цикла Pod, аналогично emptyDir, но более мощная и позволяющая монтировать любой тип CSI тома (с поддержкой снимков, масштабирования и т. д.).
Для дополнительной информации смотрите Generic ephemeral volumes
emptyDir — это временный том типа пустой директории.
Он создаётся при запуске Pod на узле, и хранилище располагается на локальной файловой системе этого узла (по умолчанию диск узла).
При удалении Pod данные в emptyDir также удаляются.
Для дополнительной информации смотрите Using an emptyDir
В Kubernetes том hostPath — это специальный тип тома, который отображает файл или директорию с файловой системы хост-узла непосредственно в контейнер Pod.
Позволяет Pod получить доступ к файлам или директориям на узле-хосте.
Полезно для:
Доступа к ресурсам уровня хоста (например, сокет Docker)
Отладки
Использования уже существующих данных на узле
ConfigMap в Kubernetes — это объект API, используемый для хранения неконфиденциальных данных конфигурации в виде пар ключ-значение. Он позволяет отделить конфигурацию от кода приложения, делая приложения более переносимыми и удобными в управлении.
В Kubernetes Secret — это объект API, который хранит конфиденциальные данные, такие как:
пароли
OAuth токены
SSH ключи
TLS сертификаты
учётные данные баз данных
Secrets помогают защитить эти данные, избегая их прямого хранения в спецификациях Pod или образах контейнеров.
StorageClass описывает как тома должны динамически выделяться. Он сопоставляется с конкретным провиженером (часто CSI-драйвером) и может включать параметры, такие как уровни хранения, характеристики производительности или другие настройки бэкенда. Создавая несколько StorageClass, вы можете предложить разработчикам различные типы хранилища.
Диаграмма: Взаимосвязь между PVC, PV и StorageClass.
Container Storage Interface (CSI) — это стандартный API, который Kubernetes использует для интеграции с драйверами хранилища. Он позволяет сторонним провайдерам создавать плагины вне ядра Kubernetes, то есть вы можете устанавливать или обновлять драйвер хранилища без изменения самого Kubernetes.
CSI драйвер обычно состоит из двух компонентов:
Когда пользователь создаёт PVC, ссылающийся на StorageClass с CSI-драйвером, драйвер отслеживает этот запрос и выделяет хранилище при необходимости динамического провиженинга. После создания хранилища драйвер уведомляет Kubernetes, который создаёт соответствующий PV и связывает его с PVC. Когда Pod использует этот PVC, компонент узла драйвера обрабатывает монтирование тома, делая хранилище доступным внутри контейнера.
Используя PV, PVC, StorageClass и CSI, Kubernetes предоставляет мощный декларативный подход к управлению хранилищем. Администраторы могут определить один или несколько StorageClass для представления различных бэкендов или уровней производительности, а разработчики просто запрашивают хранилище через PVC — не заботясь об инфраструктуре под капотом.