Том
Данные для работы приложений в контейнерах можно хранить в самих контейнерах, но при этом возникают проблемы:
- Когда контейнер аварийно завершает работу,
kubelet
перезапускает его, но файлы теряются — контейнер запускается с чистым состоянием. - Файлы в контейнере недоступны для других контейнеров, работающих в том же поде.
Эти проблемы решаются с помощью томов Kubernetes.
Том — общее хранилище для совместного использования объектов в разных контейнерах, развернутых в пределах одного или нескольких подов. Пользователь указывает в спецификации пода тома, которые будут содержать под, и путь, по которому контейнеры монтируют эти тома.
Для работы с томами Kubernetes оперирует объектами API KubernetesVolume
, PersistentVolume
, PersistentVolumeClaim
, StorageClass
.
Тома разделяются согласно их жизненному циклу:
- Временные (
Volume
) — имеют то же время жизни, что и содержащие их поды. Эти тома создаются при создании пода и сохраняются при перезапуске контейнера. Когда под останавливается или удаляется, его тома уничтожаются. - Постоянные (
PersistentVolume
) — имеют свой собственный жизненный цикл. В этих томах данные сохраняются при удалении пода. Том можно размонтировать, например, для переноса данных на другой под или узел Managed Service for Kubernetes.
Временные и постоянные тома могут быть разных типов, в зависимости от хранилища. Ознакомьтесь с типами томов
Работа с постоянными томами
Работа с постоянными томами Kubernetes осуществляется с помощью объектов API PersistentVolume
и PersistentVolumeClaim
.
-
PersistentVolumes
, PV — это ресурсы кластера Managed Service for Kubernetes, которые существуют независимо от подов. Это означает, что диск и данные, предоставленные PV, продолжают существовать при изменении кластера Managed Service for Kubernetes, а также при удалении и повторном создании подов.Ресурсы объекта
PersistentVolume
могут быть подготовлены динамически с помощью объектовPersistentVolumeClaims
или заранее созданы администратором кластера Managed Service for Kubernetes. -
PersistentVolumeClaim
, PVC — используются для указания объектовPersistentVolumes
в спецификации пода, так как объектыPersistentVolumes
не могут быть указаны напрямую.Объекты
PersistentVolumeClaim
запрашивают определенный размер, режим доступа и класс хранилищ для объектаPersistentVolume
. Если объектPersistentVolume
, удовлетворяющий запросу, существует или может быть подготовлен, объектPersistentVolumeClaim
связывается с необходимым объектомPersistentVolume
. Кластер Managed Service for Kubernetes монтирует объектPersistentVolumeClaim
в качестве тома для пода.
Пользователям часто необходимы объекты PersistentVolumes
с различными свойствами. Администраторы кластеров Managed Service for Kubernetes могут предлагать различные объекты PersistentVolumes
благодаря классам хранилищ.
Внимание
При удалении кластера Managed Service for Kubernetes диски Compute Cloud, связанные с PersistentVolumes
, не удаляются автоматически.
Режимы подключения постоянных томов
Managed Service for Kubernetes поддерживает два режима подключения (volumeMode
) постоянных томов (PersistentVolume
): с файловой системой (Filesystem
) и без нее (Block
).
Если volumeMode
не указан, значение по умолчанию: Filesystem
.
Том с файловой системой
Вы можете указать в PersistentVolumeClaim
режим подключения volumeMode: Filesystem
, тогда Managed Service for Kubernetes создаст файловую систему на блочном хранилище перед его первым монтированием к поду.
Как подготовить под с томом в режиме volumeMode: Filesystem
, читайте в разделе Динамическая подготовка тома.
Том без файловой системы
Вы можете установить значение volumeMode: Block
, чтобы подключить том в качестве блочного хранилища без создания файловой системы. Приложение, запущенное на поде с таким томом, должно уметь работать с хранилищем без файловой системы.
Как подготовить под с томом в режиме volumeMode: Block
, читайте в разделе Подключение тома в блочном режиме.
Подготовка томов
В Managed Service for Kubernetes можно использовать объекты PersistentVolumes
на основе дисков Yandex Compute Cloud. Тип используемого диска и другие параметры можно установить с помощью соответствующих классов хранилищ.
В Managed Service for Kubernetes доступны следующие типы дисков:
- Сетевой SSD-диск (
network-ssd
) — быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе. - Сетевой HDD-диск (
network-hdd
) — стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе. - Нереплицируемый SSD-диск (
network-ssd-nonreplicated
) — сетевой диск с повышенной производительностью без избыточности. - Сверхбыстрое сетевое хранилище с тремя репликами (SSD) (
network-ssd-io-m3
) — высокопроизводительный диск, который обладает теми же скоростными характеристиками, что иnetwork-ssd-nonreplicated
, но одновременно обеспечивает избыточность.
Внимание
Диски Compute Cloud создаются в определенной зоне доступности. Это влияет на то, где могут быть перезапущены поды.
Динамическая подготовка тома
В большинстве случаев нет необходимости вручную создавать объекты PersistentVolumes
и диски Compute Cloud. Вместо этого можно создать объекты PersistentVolumeClaim
, и Managed Service for Kubernetes автоматически подготовит необходимый объект PersistentVolume
и создаст диск.
Как динамически подготовить том, читайте в разделе Динамическая подготовка тома.
Статическая подготовка тома
Помимо создания новых дисков для подготовки объектов PersistentVolumes
, вы можете использовать уже существующие диски Yandex Cloud.
Подробнее о статической подготовке тома с использованием облачных дисков читайте в разделе Статическая подготовка тома.
Увеличение размера томов
Вы можете увеличить размер тома Kubernetes после его создания. Увеличить размер можно только после завершения работы пода с томом.
Чтобы увеличить размер тома:
- Убедитесь, что в описании класса хранилища (
StorageClass
) указан параметрallowVolumeExpansion: true
. - Удалите под с томом, для которого нужно увеличить размер.
- Отредактируйте объект
PersistentVolumeClaim
, чтобы запросить больше места. - Дождитесь увеличения размера тома.
- Создайте под, к которому будет монтирован том.
Как увеличить размер тома, читайте в разделе Увеличение размера тома для подов.
Удаление томов
В зависимости от настроек объектов PersistentVolume
и PersistentVolumeClaim
соответствующие тома и диски могут удаляться автоматически или вручную.
- При динамической подготовке тома: после удаления объекта
PersistentVolumeClaim
на основе классов хранилищyc-network-hdd
илиyc-network-ssd
, соответствующие объектPersistentVolume
и диск Compute Cloud будут удалены. - При статической подготовке тома: для спецификации PersistentVolumeSpec
всегда используется значение параметраpersistentVolumeReclaimPolicy: Retain
, при этом диск Compute Cloud не удаляется при удалении объектаPersistentVolumeClaim
. Значение параметраDelete
, заданное вручную, не приведет к удалению диска.
При удалении кластера Managed Service for Kubernetes диски Compute Cloud, связанные с PersistentVolumes
, не удаляются автоматически.
Подробнее о томах читайте в документации Kubernetes