Том
Данные для работы приложений в контейнерах можно хранить в самих контейнерах, но при этом возникают проблемы:
- Когда контейнер аварийно завершает работу,
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.
Подробнее о статической подготовке тома с использованием облачных дисков читайте в разделе Статическая подготовка тома.
Увеличение размера томов
В Managed Service for Kubernetes поддерживается «горячее» увеличение размера томов с помощью объекта 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
Использование зашифрованных дисков
В Managed Service for Kubernetes для постоянных томов поддерживается использование дисков Compute Cloud, зашифрованных с помощью пользовательских симметричных ключей Yandex Key Management Service.
Примечание
Чтобы использовать зашифрованные диски, у облачного сервисного аккаунта, назначенного кластеру Managed Service for Kubernetes, должна быть роль kms.keys.encrypterDecrypter
на ключ или каталог.
Для статической подготовки тома вы можете использовать существующий зашифрованный диск, аналогично обычному диску из Compute Cloud.
Для динамической подготовки тома вам понадобится создать новый класс хранилища (StorageClass
) с указанием идентификатора симметричного ключа в поле parameters:kmsKeyId
.
Манифест для класса хранилища с шифрованием:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: <название_класса_хранилища>
provisioner: disk-csi-driver.mks.ycloud.io
volumeBindingMode: WaitForFirstConsumer
parameters:
type: <тип_диска>
csi.storage.k8s.io/fstype: ext4
kmsKeyId: <идентификатора_симметричного_ключа>
allowVolumeExpansion: true
reclaimPolicy: Delete
Где:
metadata:name
— произвольное название класса хранилища.parameters:type
— тип диска в Compute Cloud. Возможные значения:network-ssd
— сетевой SSD-диск.network-hdd
— сетевой HDD-диск.network-ssd-nonreplicated
— нереплицируемый SSD-диск.network-ssd-io-m3
— сверхбыстрое сетевое хранилище с тремя репликами (SSD).
parameters:kmsKeyId
— идентификатор симметричного ключа.
Подробнее об использовании зашифрованных дисков см. на странице Использование зашифрованных дисков для постоянных томов.