• Русский
  • Основные понятия

    Хранение данных в 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 получить доступ к файлам или директориям на хост-узле.

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

      • доступа к ресурсам уровня хоста,
      • отладки,
      • использования уже существующих данных на узле.

    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 — не заботясь о внутренней инфраструктуре.