Хранение данных в 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 драйвером, драйвер CSI отслеживает этот запрос и выделяет хранилище при необходимости динамического выделения. После создания хранилища драйвер уведомляет Kubernetes, который создаёт соответствующий PV и связывает его с PVC. Когда Pod использует этот PVC, компонент узла драйвера обрабатывает монтирование тома, делая хранилище доступным внутри контейнера.
Используя PV, PVC, StorageClass и CSI, Kubernetes предоставляет мощный декларативный подход к управлению хранилищем. Администраторы могут определить один или несколько StorageClass, представляющих разные бэкенды или уровни производительности, а разработчики просто запрашивают хранилище через PVC — не беспокоясь о внутренней инфраструктуре.