Модуль находится в процессе активного развития. Функциональность может существенно измениться.
Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с поддерживаемыми дистрибутивами.
Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется.
Контроллер работает с двумя типами ресурсов:
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-ресурс отсутствует. - В этом случае контроллер самостоятельно заполняет все поля ресурса.
- Контроллер автоматически сканирует информацию о существующих
-
Пользовательское создание:
-
Пользователь вручную создает ресурс, заполняя только поля
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
еще будет существовать на узле, контроллер создаст по существующейVolume Group
ресурс автоматически, указав для созданного ресурса новое сгенерированное имя.
Пользователь может удалить LVM Volume Group
с узла и связанные с ним LVM Physical Volume
, добавив в соответствующий LVMVolumeGroup
-ресурс аннотацию storage.deckhouse.io/sds-delete-vg: ""
. Контроллер отреагирует на указанную аннотацию и запустит процесс удаления LVM Volume Group
и ее составляющих с узла.
Внимание! Запрещено удаление
LVM Volume Group
описанным выше методом, если она содержитLogical Volume
, даже если это толькоThin-pool
, который указан вspec
. Пользователю необходимо самостоятельно удалять всеLogical Volume
, которые содержит удаляемаяVolume Group
.