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