Функциональность модуля может измениться, но основные возможности сохранятся. Совместимость с будущими версиями обеспечивается, но может потребовать дополнительных действий по миграции.
Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с поддерживаемыми дистрибутивами.
Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется.
Контроллер работает с двумя типами ресурсов:
BlockDevice
;LVMVolumeGroup
.
Работа с ресурсами BlockDevice
Создание ресурса BlockDevice
Контроллер регулярно сканирует существующие девайсы на узле, и в случае, если девайс удовлетворяет всем необходимым
условиям со стороны контроллера, создается custom resource
(CR) BlockDevice
с уникальным именем, в котором отображена
полная и необходимая информация о соответствующем девайсе.
Требования контроллера к девайсу
- Не является drbd-устройством.
- Не является псевдодевайсом (то есть не loop device).
- Не является
Logical Volume
. - Файловая система отсутствует или соответствует
LVM2_MEMBER
. - У блок-девайса отсутствуют партиции.
- Размер блок-девайса больше 1 Gi.
- Если девайс — виртуальный диск, у него должен быть серийный номер.
Информацию из полученного ресурса контроллер будет использовать для своей дальнейшей работы с ресурсами LVMVolumeGroup
.
Обновление ресурса BlockDevice
Контроллер самостоятельно обновляет информацию в ресурсе, если состояние указанного в нем блок-девайса поменялось на узле.
Удаление ресурса BlockDevice
Контроллер автоматически удалит ресурс, если указанный в нем блок-девайс стал недоступен. Удаление произойдёт только в следующих случаях:
- если ресурс был в статусе Consumable;
- если блок-девайс принадлежит
Volume Group
, у которой нет LVM-тегаstorage.deckhouse.io/enabled=true
(этаVolume Group
не управляется нашим контроллером).
Контроллер выполняет вышеперечисленные виды работ автоматически и не требует вмешательства со стороны пользователя.
В случае ручного удаления ресурса, он будет пересоздан контроллером.
Работа с ресурсами LVMVolumeGroup
Ресурсы BlockDevice
необходимы для создания и обновления ресурсов LVMVolumeGroup
.
На данный момент поддерживаются только локальные Volume Group
.
LVMVolumeGroup
-ресурсы предназначены для взаимодействия с LVM Volume Group
на узлах и отображения актуальной информации об их состоянии.
Создание ресурса LVMVolumeGroup
Ресурс LVMVolumeGroup
может быть создан 2 способами:
-
Автоматическое создание:
- Контроллер автоматически сканирует информацию о существующих
LVM Volume Group
на узлах и создает ресурс в случае, если уLVM Volume Group
имеется LVM-тегstorage.deckhouse.io/enabled=true
и соответствующий ей Kubernetes-ресурс отсутствует. - В этом случае контроллер самостоятельно заполнит все поля
Spec
-секции ресурса, кроме поляthinPools
. Пользователю необходимо вручную добавить вSpec
ресурса информацию оThin-pool
, имеющимся на узле, в случае, если он хочет, чтобы данныйThin-pool
попал под управление контроллера.
- Контроллер автоматически сканирует информацию о существующих
-
Пользовательское создание:
-
Пользователь вручную создает ресурс, заполняя только поля
metadata.name
иspec
, в котором указывает желаемое состояние новойVolume Group
. -
Конфигурация, указанная пользователем, пройдет специальную валидацию на корректность.
-
После успешного прохождения валидации контроллер использует указанную конфигурацию, чтобы по ней создать указанную
LVM Volume Group
на узле и обновить пользовательский ресурс актуальной информацией о состоянии созданнойLVM Volume Group
. -
Пример ресурса для создания локальной
LVM Volume Group
из несколькихBlockDevice
:apiVersion: storage.deckhouse.io/v1alpha1 kind: LvmVolumeGroup metadata: name: "vg-0-on-node-0" spec: type: Local blockDeviceNames: - dev-c1de9f9b534bf5c0b44e8b1cd39da80d5cda7c3f - dev-f3269d92a99e1f668255a47d5d3500add1462711 actualVGNameOnTheNode: "vg-0"
-
Пример ресурса для создания локальной
LVM Volume Group
иThin-pool
на ней из несколькихBlockDevice
:apiVersion: storage.deckhouse.io/v1alpha1 kind: LvmVolumeGroup metadata: name: "vg-thin-on-node-0" spec: type: Local blockDeviceNames: - dev-0428672e39334e545eb96c85f8760fd59dcf15f1 - dev-456977ded72ef804dd7cec90eec94b10acdf99b7 actualVGNameOnTheNode: "vg-thin" thinPools: - name: thin-1 size: 250Gi
Обратите внимание, что в ресурсе не указывается узел, на котором будет создана
Volume Group
. Узел берется из ресурсовBlockDevice
, имена которых указаны вspec.blockDeviceNames
.Внимание! Все выбранные блок-девайсы должны принадлежать одному узлу для
LVMVolumeGroup
с типом ‘Local’. -
Обновление ресурса LVMVolumeGroup
Контроллер в автоматическом режиме обновляет поле status
ресурса LVMVolumeGroup
, отображая актуальные данные о соответствующей LVM Volume Group
на узле.
Пользователю не рекомендуется собственноручно вносить изменения в поле status
.
Контроллер не обновляет поле
spec
, так как указанное поле отображает желаемое состояниеLVM Volume Group
. Пользователь может вносить изменения в полеspec
, чтобы изменить состояние указанной в ресурсеLVM Volume Group
на узле.
Удаление ресурса LVMVolumeGroup
Контроллер автоматически удалит ресурс, если указанная в нем Volume Group
стала недоступна по той или иной причине (например на узле были отключены все блочные устройства, из которых состояла Volume Group
).
Пользователь может удалить LVM Volume Group
с узла и связанные с ним LVM Physical Volume
, выполнив команду на удаление ресурса LVMVolumeGroup
.
kubectl delete lvg %lvg-name%
Внимание! Если удаляемый ресурс
LVMVolumeGroup
содержитLogical Volume
(даже если это толькоThin-pool
, который указан вspec
) пользователю необходимо самостоятельно удалить всеLogical Volume
, которые содержит удаляемаяVolume Group
. В противном случае ни ресурс, ниVolume Group
удалены не будут.
Пользователь может запретить удаление
LVMVolumeGroup
ресурса, повесив на ресурс специальную аннотациюstorage.deckhouse.io/deletion-protection
. При наличии данной аннотации контроллер не будет удалять ни ресурс, ни соответствующуюVolume Group
до тех пор, пока аннотация не будет снята с ресурса.