Основные концепции

Хранение данных в Kubernetes основано на трёх ключевых понятиях: PersistentVolume (PV), PersistentVolumeClaim (PVC) и StorageClass. Они определяют, как запрашивается, выделяется и настраивается хранилище внутри кластера. В основе часто лежат драйверы CSI (Container 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

  1. emptyDir — это временный том типа пустой директории.

  2. Он создаётся при запуске Pod на узле, и хранилище располагается на локальной файловой системе этого узла (по умолчанию диск узла).

  3. При удалении Pod данные в emptyDir также удаляются.

Для более подробного использования смотрите Using an emptyDir

hostPath

В Kubernetes том hostPath — это специальный тип тома, который отображает файл или директорию с файловой системы хост-узла непосредственно в контейнер Pod.

  • Позволяет Pod получить доступ к файлам или директориям на хост-узле.

  • Полезен для:

    • Доступа к ресурсам уровня хоста (например, сокет Docker)

    • Отладки

    • Использования предварительно существующих данных на узле

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 обычно состоит из двух компонентов:

  1. Компонент контроллера: работает в кластере (часто как Deployment) и отвечает за операции высокого уровня, такие как создание или удаление томов. Для сетевого хранилища он также может управлять подключением и отключением томов к узлам.
  2. Компонент узла: работает на каждом узле (часто как DaemonSet) и отвечает за монтирование и отмонтирование тома на конкретном узле. Он взаимодействует с kubelet, чтобы обеспечить доступность тома для Pod.

Когда пользователь создаёт PVC, ссылающийся на StorageClass с CSI драйвером, драйвер CSI отслеживает этот запрос и выделяет хранилище при необходимости динамического выделения. После создания хранилища драйвер уведомляет Kubernetes, который создаёт соответствующий PV и связывает его с PVC. Когда Pod использует этот PVC, компонент узла драйвера обрабатывает монтирование тома, делая хранилище доступным внутри контейнера.


Используя PV, PVC, StorageClass и CSI, Kubernetes предоставляет мощный декларативный подход к управлению хранилищем. Администраторы могут определить один или несколько StorageClass, представляющих разные бэкенды или уровни производительности, а разработчики просто запрашивают хранилище через PVC — не беспокоясь о внутренней инфраструктуре.