Том

Данные для работы приложений в контейнерах можно хранить в самих контейнерах, но при этом возникают проблемы:

  • Когда контейнер аварийно завершает работу, kubelet перезапускает его, но файлы теряются — контейнер запускается с чистым состоянием.
  • Файлы в контейнере недоступны для других контейнеров, работающих в том же поде.

Эти проблемы решаются с помощью томов Kubernetes.

Для работы с томами Kubernetes оперирует объектами API Kubernetes: Volume, PersistentVolume, PersistentVolumeClaim, StorageClass.

Том

Том — общее хранилище для совместного использования объектами в разных контейнерах, развернутых в пределах одного или нескольких подов. Пользователь указывает в спецификации пода тома, которые будет содержать под, и путь, по которому контейнеры монтируют эти тома.

Тома разделяются согласно их жизненному циклу:

  • Временные (Volume) — имеют то же время жизни, что и содержащие их поды. Эти тома создаются при создании пода и сохраняются при перезапуске контейнера. Когда под останавливается или удаляется, его тома уничтожаются.
  • Постоянные (PersistentVolume) — имеют свой собственный жизненный цикл. В этих томах данные сохраняются при удалении пода. Том можно размонтировать, например, для переноса данных на другой под или узел.

Временные и постоянные тома могут быть разных типов, в зависимости от хранилища. Ознакомьтесь с типами томов, поддерживаемых в Kubernetes.

Работа с постоянными томами

Работа с постоянными томами Kubernetes осуществляется с помощью объектов API PersistentVolume и PersistentVolumeClaim.

  • PersistentVolumes, PV — это ресурсы кластера Kubernetes, которые существуют независимо от подов. Это означает, что диск и данные, предоставленные PV, продолжают существовать при изменении кластера, а также при удалении и повторном создании подов.

    Ресурсы объекта PersistentVolume могут быть подготовлены динамически с помощью объектов PersistentVolumeClaims или заранее созданы администратором кластера Kubernetes.

  • PersistentVolumeClaim, PVC — используются для указания объектов PersistentVolumes в спецификации пода, так как объекты PersistentVolumes не могут быть указаны напрямую.

    Объекты PersistentVolumeClaim запрашивают определенный размер, режим доступа и класс хранилищ для объекта PersistentVolume. Если объект PersistentVolume, удовлетворяющий запросу, существует или может быть подготовлен, объект PersistentVolumeClaim связывается с необходимым объектом PersistentVolume. Кластер Kubernetes монтирует объект PersistentVolumeClaim в качестве тома для пода.

Пользователям часто необходимы объекты PersistentVolumes с различными свойствами. Администраторы кластеров Kubernetes могут предлагать различные объекты PersistentVolumes благодаря классам хранилищ.

Подготовка томов

В Managed Service for Kubernetes можно использовать объекты PersistentVolumes на основе дисков Compute Cloud. Тип используемого диска и другие параметры можно установить с помощью соответствующих классов хранилищ.

Предупреждение

Диски Compute Cloud создаются в определенной зоне доступности. Это влияет на то, где могут быть перезапущены поды.

При удалении кластера Kubernetes объекты PersistentVolumeClaim и диски Compute Cloud для динамически и статически созданных объектов PersistentVolumes не удаляются автоматически.

Динамическая подготовка тома

В большинстве случаев нет необходимости вручную создавать объекты PersistentVolumes и диски Compute Cloud. Вместо этого можно создать объекты PersistentVolumeClaim, и Kubernetes автоматически подготовит необходимый объект PersistentVolume и создаст диск.

Как динамически подготовить том читайте в разделе Динамическая подготовка тома.

Статическая подготовка тома

Помимо создания новых дисков для подготовки объектов PersistentVolumes, вы можете использовать уже существующие диски Облака.

Подробнее о статической подготовке тома с использованием облачных дисков читайте в разделе Статическая подготовка тома.

Удаление томов

В зависимости от настроек объектов PersistentVolume и PersistentVolumeClaim соответствующие тома и диски могут удаляться автоматически или вручную.

  • При динамической подготовке тома: после удаления объекта PersistentVolumeClaim на основе классов хранилищ yc-network-hdd или yc-network-ssd, соответствующие объект PersistentVolume и диск Compute Cloud будут удалены.

  • При статической подготовке тома: вы можете указать, нужно ли удалять диск Compute Cloud при удалении объекта PersistentVolumeClaim. Для этого воспользуйтесь параметром persistentVolumeReclaimPolicy в PersistentVolumeSpec. По умолчанию для статически подготовленных подов используется значение Retain и диск Compute Cloud не удаляется.

Подробнее о томах читайте в документации Kubernetes.