diff --git a/.werf/bundle.yaml b/.werf/bundle.yaml index 7cc94173..9cf5c055 100644 --- a/.werf/bundle.yaml +++ b/.werf/bundle.yaml @@ -2,7 +2,7 @@ --- image: bundle from: registry.deckhouse.io/base_images/scratch@sha256:b054705fcc9f2205777d80a558d920c0b4209efdc3163c22b5bfcb5dda1db5fc -fromCacheVersion: "2023-11-27.1" +fromCacheVersion: "2024-01-05.1" import: # Rendering .werf/images-digests.yaml is required! - image: images-digests @@ -21,6 +21,7 @@ git: - .helmignore - charts - crds + - docs - enabled - hooks - monitoring diff --git a/crds/blockdevices.yaml b/crds/blockdevices.yaml index b0184c27..e919b8d8 100644 --- a/crds/blockdevices.yaml +++ b/crds/blockdevices.yaml @@ -24,20 +24,18 @@ spec: openAPIV3Schema: type: object description: | - BlockDevice is a Kubernetes Custom Resource that displays actual information about block devices, which might be used by the sds-node-configurator controller to create Volume Groups, extend Physical Volumes, and so on. + The resource displays up-to-date information about available block devices on nodes that can be used by the sds-node-configurator controller for LVM operations. - > The resource is created and managed by the controller only. + > The resource is created and managed by the controller only. Manual modification of the resource is prohibited. properties: status: type: object - description: | - Defines the current device state. required: [size,type,consumable,path,rota,hotPlug,nodeName,machineId] properties: type: type: string description: | - The device's type. + The device's type (disk, part, RAID, and others). fsType: type: string enum: [LVM2_member, ""] @@ -50,17 +48,17 @@ spec: consumable: type: boolean description: | - The flag that defines whether this device can be used by the controller. + The flag that defines whether this device can be used by the controller to create an LVM Physical Volume. pvUUID: type: string description: | - The Physical Volume UUID. + The LVM Physical Volume UUID. - > Optional: exists only if the device is used as a Physical Volume. + > Optional: exists only if the device is used as a LVM Physical Volume. vgUUID: type: string description: | - The Volume Group UUID. + The UUID of the LVM Volume Group to which this device belongs to as a Physical Volume. > Optional: exists only if the device is used as a Physical Volume and is included in a Volume Group. lvmVolumeGroupName: @@ -68,11 +66,11 @@ spec: description: | The LVMVolumeGroup resource name. - > Optional: exists only if the device is used as a Physical Volume and is included in a Volume Group and LVMVolumeGroup resource. + > Optional: exists only if the device is used as a Physical Volume, is included in a Volume Group, and is specified in an LVMVolumeGroup resource. actualVGNameOnTheNode: type: string description: | - The actual name of the Volume Group the device is included in. + The actual name of the LVM Volume Group the device is included in. > Optional: exists if only the device is used as a Physical Volume and is included in a Volume Group. wwn: @@ -80,7 +78,7 @@ spec: description: | The device unique wwn (World Wide Name) identifier. - > Optional: might be empty if no WWN was set. + > Optional: might be empty if WWN is not supported for this type of disk by the manufacturer. serial: type: string description: | @@ -88,7 +86,7 @@ spec: path: type: string description: | - The device path (name). + The device path on the node (/dev/sda). size: type: string description: | @@ -98,19 +96,19 @@ spec: description: | The device model. - > Optional: might be empty if no model was set. + > Optional: might be empty if not supported by the manufacturer for this type of disk. rota: type: boolean description: | The device media type. Might be: - - 'True' (for HHD) - - 'False' (for SSD) + - 'true' (for HHD) + - 'false' (for SSD) hotPlug: type: boolean description: | The device connection type. Might be: - - 'True' (if the device has been hotPlugged) - - 'False' (otherwise) + - 'true' (if the device has been hotPlugged) + - 'false' (otherwise) machineId: type: string description: | diff --git a/crds/doc-ru-blockdevices.yaml b/crds/doc-ru-blockdevices.yaml index 6596e0c1..3d0ce3ea 100644 --- a/crds/doc-ru-blockdevices.yaml +++ b/crds/doc-ru-blockdevices.yaml @@ -4,17 +4,15 @@ spec: schema: openAPIV3Schema: description: | - BlockDevice — это пользовательский ресурс Kubernetes, который отображает актуальную информацию о блочных устройствах, которые могут быть использованы контроллером sds-node-configurator для операций создания Volume Group, расширения Physical Volume и других. + Ресурс отображает актуальную информацию о доступных блочных устройствах на узлах, которые могут быть использованы контроллером sds-node-configurator для операций в LVM. - > Ресурс создается и обслуживается только контроллером. + > Ресурс создается и обслуживается только контроллером. Ручное изменение ресурса запрещено. properties: status: - description: | - Определяет текущее состояние девайса. properties: type: description: | - Тип девайса. + Тип девайса (диск, партиция, RAID и другие). fsType: description: | Тип файловой системы. @@ -23,38 +21,38 @@ spec: Имя Kubernetes-узла, на котором находится девайс. consumable: description: | - Флаг, определяющий, может ли данный девайс быть использован контроллером. + Флаг, определяющий, может ли данный девайс быть использован контроллером для создания LVM Physical Volume. pvUUID: description: | - UUID Physical Volume. + LVM Physical Volume UUID. - > Опциально: присутствует, только если девайс используется как Physical Volume. + > Опциально: присутствует, только если девайс используется как LVM Physical Volume. vgUUID: description: | - UUID Volume Group. + LVM Volume Group UUID, которой принадлежит данный девайс в качестве Physical Volume. > Опциально: присутствует, только если девайс используется как Physical Volume и включен в Volume Group. lvmVolumeGroupName: description: | Имя ресурса LVMVolumeGroup. - > Опциально: присутствует, только если девайс используется как Physical Volume и включен в Volume Group и LVMVolumeGroup-ресурс. + > Опциально: присутствует, только если девайс используется как Physical Volume, включен в Volume Group и указан в LVMVolumeGroup-ресурсе. actualVGNameOnTheNode: description: | - Фактическое имя Volume Group на узле, в который включен девайс. + Фактическое имя LVM Volume Group на узле, в которую включен девайс. > Опциально: присутствует, только если девайс используется как Physical Volume и включен в Volume Group. wwn: description: | Уникальный идентификатор девайса WWN (World Wide Name). - > Опционально: может отсутствовать, если WWN не было задано. + > Опционально: может отсутствовать, если WWN для данного типа дисков не поддерживается производителем. serial: description: | Уникальный серийный номер девайса. path: description: | - Путь (имя) девайса на узле. + Путь девайса на узле (/dev/sda). size: description: | Размер девайса. @@ -62,17 +60,17 @@ spec: description: | Модель девайса. - > Опционально: может отсутствовать, если модель не была задана. + > Опционально: может отсутствовать, если для данного типа дисков не поддерживается производителем. rota: description: | Медиатип девайса. Может быть: - - True (для HHD) - - False (для SSD) + - true (для HHD) + - false (для SSD) hotPlug: description: | Тип подключения девайса. Может быть: - - True (если девайс был подключен как съемный) - - False (в иных случаях) + - true (если девайс был подключен как съемный) + - false (в иных случаях) machineId: description: | Уникальный идентификатор узла, на котором располагается девайс (обычно хранится в /etc/machine-id). diff --git a/crds/doc-ru-lvmvolumegroup.yaml b/crds/doc-ru-lvmvolumegroup.yaml index 66caf863..e22ab4c3 100644 --- a/crds/doc-ru-lvmvolumegroup.yaml +++ b/crds/doc-ru-lvmvolumegroup.yaml @@ -4,17 +4,16 @@ spec: schema: openAPIV3Schema: description: | - LVMVolumeGroup — это ресурс для управления Volume Group'ами и Thin pool'ами на узлах. + Интерфейс управления Volume Group'ами и Thin pool'ами на узлах. - > Этот тип ресурсов может быть создан как самим пользователем, так и контроллером SDS-Node-Configurator. - Контроллер sds-node-configurator автоматически создаст ресурс LVMVolumeGroup в случае, если найдет на узле существующую Volume Group со специальным тегом 'storage.deckhouse.io/enabled=true', при этом контроллер самостоятельно заполнит как `spec`, так и `status` поля. + > Этот тип ресурсов может быть создан как самим пользователем, так и контроллером sds-node-configurator. Контроллер sds-node-configurator автоматически создаст ресурс LVMVolumeGroup в случае, если найдет на узле существующую Volume Group со специальным тегом 'storage.deckhouse.io/enabled=true', при этом контроллер самостоятельно заполнит как `spec`, так и `status` поля. properties: spec: properties: type: description: | Тип Volume Group. Может быть: - - Local (то есть локальным, если используемые девайсы не являются распределенными) + - Local, то есть локальным, если используемые девайсы не являются распределенными (не Shared LUN). blockDeviceNames: description: | Список имен ресурсов BlockDevice для создания Volume Group. @@ -39,10 +38,6 @@ spec: description: | Желаемый размер Thin-pool. status: - description: | - Отображает текущее состояние Volume Group. - - > Эти параметры обновляются контроллером. properties: health: description: | @@ -57,10 +52,10 @@ spec: Уникальный идентификатор Volume Group. vgSize: description: | - Максимальный размер Volume Group. + Ёмкость Volume Group. allocatedSize: description: | - Текущий размер Volume Group. + Текущее занятое место на Volume Group. thinPools: description: | Текущее состояние Thin-pool'ов в Volume Group. @@ -73,7 +68,7 @@ spec: Имя Thin-pool. actualSize: description: | - Общий текущий размер Thin-pool. + Ёмкость Thin-pool. usedSize: description: | Используемый размер Thin-pool. @@ -92,7 +87,7 @@ spec: properties: path: description: | - Путь (имя) девайса на узле. + Путь девайса на узле (/dev/sda, например). pvSize: description: | Размер Physical Volume. @@ -101,7 +96,7 @@ spec: Размер девайса. pvUUID: description: | - Уникальный идентификатор Physical Volume. + Уникальный идентификатор LVM Physical Volume. blockDevice: description: | Имя связанного ресурса BlockDevice. diff --git a/crds/lvmvolumegroup.yaml b/crds/lvmvolumegroup.yaml index 950b8108..7f19a599 100644 --- a/crds/lvmvolumegroup.yaml +++ b/crds/lvmvolumegroup.yaml @@ -24,10 +24,9 @@ spec: openAPIV3Schema: type: object description: | - LVMVolumeGroup is a Kubernetes Custom Resource for managing the Volume Groups and Thin pools on the nodes. + An interface for managing Volume Groups and Thin pools on the nodes. - > These resources might be created both by a user and the SDS-Node-Configurator controller. - The SDS-Node-Configurator controller will automatically create an LVMVolumeGroup resource if it detects an existing Volume Group on a node tagged with 'storage.deckhouse.io/enabled=true'. The controller will fill both the 'Spec' and 'Status' fields. + > These resources might be created both by a user and the sds-node-configurator controller. The sds-node-configurator controller will automatically create an LVMVolumeGroup resource if it detects an existing Volume Group on a node tagged with 'storage.deckhouse.io/enabled=true'. The controller will fill in both the 'spec' and 'status' fields. required: - spec properties: @@ -38,7 +37,7 @@ spec: type: string description: | The type of a Volume Group. Might be: - - Local (if Volume Group devices are not shared) + - Local, that is, local if the devices used are not distributed (not Shared LUN). enum: - Local blockDeviceNames: @@ -78,10 +77,6 @@ spec: - size status: type: object - description: | - Defines the current state of the Volume Group. - - > These params are updated by the controller. properties: health: type: string @@ -103,11 +98,11 @@ spec: vgSize: type: string description: | - The total Volume Group size. + The Volume Group capacity. allocatedSize: type: string description: | - The actual Volume Group size. + The amount of space currently occupied on the Volume Group. thinPools: type: array description: | @@ -128,7 +123,7 @@ spec: actualSize: type: string description: | - The Thin-pool current total size. + The Thin-pool capacity. usedSize: type: string description: | @@ -154,7 +149,7 @@ spec: path: type: string description: | - The device path (name) on the node. + The device path on the node (e.g., /dev/sda). pvSize: type: string description: | @@ -166,7 +161,7 @@ spec: pvUUID: type: string description: | - The Physical Volume UUID. + The LVM Physical Volume UUID. blockDevice: type: string description: | diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index b3ac6b5e..465b78c1 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,14 +1,10 @@ --- -title: "The Sds-Node-Configurator module: settings" +title: "The sds-node-configurator module: settings" +description: "Settings of the sds-node-configurator module. Deckhouse Kubernetes Platform." --- -{% alert level="warning" %} -The module is guaranteed to work in the following cases only: -- if stock kernels shipped with [supported distributions](../../supported_versions.html#linux) are used; -- if a 10Gbps network is used. -As for any other configurations, the module may work, but its smooth operation is not guaranteed. -{% endalert %} +{{< alert level="warning" >}} +The module is guaranteed to work only with stock kernels that are shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux). -{% include module-bundle.liquid %} - -No configuration on the user's side is required +The module may work with other kernels or distributions, but its stable operation and availability of all features is not guaranteed. +{{< /alert >}} diff --git a/docs/CONFIGURATION_RU.md b/docs/CONFIGURATION_RU.md index f4f4ac20..fd367cea 100644 --- a/docs/CONFIGURATION_RU.md +++ b/docs/CONFIGURATION_RU.md @@ -1,14 +1,10 @@ --- -title: "Модуль Sds-Node-Configurator: настройки" +title: "Модуль sds-node-configurator: настройки" +description: "Настройки модуля sds-node-configurator, Deckhouse Kubernetes Platform." --- -{% alert level="warning" %} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](../../supported_versions.html#linux); -- при использовании сети 10Gbps. -Работоспособность модуля в других условиях возможна, но не гарантируется. -{% endalert %} +{{< alert level="warning" >}} +Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux). -{% include module-bundle.liquid %} - -Модуль не требует конфигурации со стороны пользователя. +Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется. +{{< /alert >}} diff --git a/docs/CR.md b/docs/CR.md index 46370854..6d27a7ba 100644 --- a/docs/CR.md +++ b/docs/CR.md @@ -1,4 +1,10 @@ --- -title: "The SDS-Node-Configurator module: CRs" -description: "The SDS-Node-Configurator CRs: BlockDevice and LVMVolumeGroup." +title: "The sds-node-configurator module: Custom Resources" +description: "BlockDevice and LVMVolumeGroup custom resources. The sds-node-configurator module of Deckhouse Kubernetes Platform." --- + +{{< alert level="warning" >}} +The module is guaranteed to work only with stock kernels that are shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux). + +The module may work with other kernels or distributions, but its stable operation and availability of all features is not guaranteed. +{{< /alert >}} diff --git a/docs/CR_RU.md b/docs/CR_RU.md index 7b99bd03..54ebe59d 100644 --- a/docs/CR_RU.md +++ b/docs/CR_RU.md @@ -1,4 +1,10 @@ --- -title: "Модуль SDS-Node-Configurator: CRs" -description: "Референсы SDS-Node-Configurator CRs: BlockDevice и LVMVolumeGroup." +title: "Модуль sds-node-configurator: Custom Resources" +description: "Ресурсы BlockDevice и LVMVolumeGroup. Модуль sds-node-configurator, Deckhouse Kubernetes Platform." --- + +{{< alert level="warning" >}} +Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux). + +Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется. +{{< /alert >}} diff --git a/docs/FAQ.md b/docs/FAQ.md index a4922ef3..6c382652 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1,70 +1,74 @@ --- -title: "The SDS-Node-Configurator module: FAQ" -description: "Common questions and answers." +title: "The sds-node-configurator module: FAQ" +description: "Deckhouse Kubernetes Platform. The sds-node-configurator module. Common questions and answers." --- -{% alert level="warning" %} -The module is guaranteed to work in the following cases only: -- if stock kernels shipped with the [supported distributions](../../supported_versions.html#linux) are used; -- if a 10Gbps network is used. -As for any other configurations, the module may work, but its smooth operation is not guaranteed. -{% endalert %} +{{< alert level="warning" >}} +The module is guaranteed to work only with stock kernels that are shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux). + +The module may work with other kernels or distributions, but its stable operation and availability of all features is not guaranteed. +{{< /alert >}} ## Why does creating `BlockDevice` and `LVMVolumeGroup` resources in a cluster fail? -* In most cases, the creation of `BlockDevice` resources fails because the existing devices fail filtering by the controller. Please make sure that your devices meet the [requirements](link to requirements). +* In most cases, the creation of `BlockDevice` resources fails because the existing devices fail filtering by the controller. Please make sure that your devices meet the [requirements](./usage.html#the-conditions-the-controller-imposes-on-the-device). -* Creating `LVMVolumeGroup` resources may fail due to the missing `BlockDevice` resources, as they use them as the data source. +* Creating LVMVolumeGroup resources may fail due to the absence of BlockDevice resources in the cluster, as their names are used in the LVMVolumeGroup specification. -* If the `BlockDevice` resources are present and the `LVMVolumeGroup` resources are not present, please make sure the existing `Volume Group` has a special tag `storage.deckhouse.io/enabled=true` attached. +* If the `BlockDevice` resources are present and the `LVMVolumeGroup` resources are not present, please make sure the existing `LVM Volume Group` on the node has a special tag `storage.deckhouse.io/enabled=true` attached. ## I have deleted the `LVMVolumeGroup` resource, but the `Volume Group` is still there. What do I do? -Deleting a `LVMVolumeGroup` resource does not delete the `Volume Group` it references. To delete it, -add a special `storage.deckhouse.io/sds-delete-vg: ""` annotation to trigger the deletion process. The controller will then automatically delete the -`Volume Group` and its associated resource. +Deleting an `LVMVolumeGroup` resource does not delete the `Volume Group` it references. To delete it, add a special `storage.deckhouse.io/sds-delete-vg: ""` annotation to trigger the deletion process. The controller will then automatically delete the `LVM Volume Group` from the node as well as its associated resource. -> Note thatSimply deleting the `LVMVolumeGroup` resource will result in the creation of a new resource with a generated name based on the existing `Volume Group`. +> Note that merely deleting the `LVMVolumeGroup` resource will result in a new resource with a generated name being created based on the existing `LVM Volume Group` on the node. ## I have attached the delete annotation, but the `LVMVolumeGroup` resource is still there as well as the `Volume Group` on the node. Why? -The usual case is that there are `Logical Volumes` for the `Volume Group` the resource references. The controller does not delete `Logical Volumes` because these `volumes` may contain data and the user must purge them manually. +Typically, the `LVM Volume Group` on the node has the corresponding `Logical Volumes`. The controller does not delete `Logical Volumes` because these `volumes` may contain important data. Thus, the user must purge them manually. Once the `Logical Volume` has been deleted, the controller will proceed to delete the `Volume Group` and its corresponding resource. -> The time it takes to delete may be longer if the controller's reconcile queue is crowded with other events. To delete the `Volume Group` and its linked resource immediately, update the delete annotation, e. g., by adding any number to its value: `storage.deckhouse.io/sds-delete-vg: ""` -> `storage.deckhouse.io/sds-delete-vg: "1"`. -> In this case, it will be deleted immediately. - ## I'm trying to create a `Volume Group` using the `LVMVolumeGroup` resource, but I'm not getting anywhere. Why? -Most likely, your resource fails controller validation. -The exact cause of the failure can be found in the `Status.Message` field of the resource itself, -or you can refer to the controller's logs. +Most likely, your resource fails controller validation even if it has passed the Kubernetes validation successfully. +The exact cause of the failure can be found in the `status.message` field of the resource itself. +You can also refer to the controller's logs. -> The problem usually stems from incorrectly defined `BlockDevice` resources. Please make sure that these resources meet the following requirements: -> - The `Consumable` field is set to `true`. -> - For a `Volume Group` of type `Local`, the specified `BlockDevice` belong to the same node. -> - For a `Volume Group` of type `Shared`, the specified `BlockDevice` is the only resource. -> - The selected `BlockDevice` does not share other `LVMVolumeGroup` resources (other `Volume Groups`). -> - The current names of the `BlockDevice` resources are specified. -> The full list of expected values can be found in the [CR reference](link to the reference) of the `LVMVolumeGroup` resource. +The problem usually stems from incorrectly defined `BlockDevice` resources. Please make sure these resources meet the following requirements: +- The `Consumable` field is set to `true`. +- For a `Volume Group` of the `Local` type, the specified `BlockDevice` belong to the same node. +- The current names of the `BlockDevice` resources are specified. + +The full list of expected values can be found in the [CR reference](./cr.html) of the `LVMVolumeGroup` resource. ## What happens if I unplug one of the devices in a `Volume Group`? Will the linked `LVMVolumeGroup` resource be deleted? The `LVMVolumeGroup` resource will persist as long as the corresponding `Volume Group` exists. As long as at least one device exists, the `Volume Group` will be there, albeit in an unhealthy state. -Note that these issues will be reflected in the resource's `Status`. +Note that these issues will be reflected in the resource's `status`. + +Once the unplugged device is plugged back in and reactivated, the `LVM Volume Group` will regain its functionality while the corresponding `LVMVolumeGroup` resource will also be updated to reflect the current state. + +## How to transfer control of an existing `LVM Volume Group` on the node to the controller? + +Simply add the LVM tag `storage.deckhouse.io/enabled=true` to the LVM Volume Group on the node: + +```shell +vgchange myvg-0 --addtag storage.deckhouse.io/enabled=true +``` -When the unplugged device is reactivated, the `Volume Group` will recover while the linked `LVMVolumeGroup` resource be brought to its current state as well. +## How do I get the controller to stop monitoring the `LVM Volume Group` on the node? -## How do I get the controller to stop monitoring the `Volume Group`? +Delete the `storage.deckhouse.io/enabled=true` LVM tag for the target `Volume Group` on the node: -Delete the `storage.deckhouse.io/enabled=true` tag for the target `Volume Group`. The controller will then stop tracking the selected `Volume Group` and delete the associated `LVMVolumeGroup` resource automatically. +```shell +vgchange myvg-0 --addtag storage.deckhouse.io/enabled=true +``` -## I haven't added the `storage.deckhouse.io/enabled=true` tag to the `Volume Group`, but it is there. How is this possible? +The controller will then stop tracking the selected `Volume Group` and delete the associated `LVMVolumeGroup` resource automatically. -This is possible if you have created the `Volume group` using the `LVMVolumeGroup` resource (in this case, the controller will automatically add this tag to the created `Volume Group`) or if this `Volume Group` had the `Linstor` module tag (`linstor-*`). +## I haven't added the `storage.deckhouse.io/enabled=true` LVM tag to the `Volume Group`, but it is there. How is this possible? -The `sds-node-configurator` module replaces some of the functionality of the `linstor-pools-importer` controller of the built-in `Linstor` module. -So when you switch from the `Linstor` module to the `sds-node-configurator` and `sds-drbd` modules, the `linstor-*` tags are automatically replaced with the `storage.deckhouse.io/enabled=true` tag in the `Volume Group`. This way, the `sds-node-configurator` gets control of these `Volume Groups`. +This can happen if you created the `LVM Volume Group` using the `LVMVolumeGroup` resource, in which case the controller will automatically add this LVM tag to the created `LVM Volume Group`. This is also possible if the `Volume Group` or its `Thin-pool` already had the `linstor-*` LVM tag of the `linstor` module. -> The controller performs a one-time re-tagging operation on all existing `Volume Groups` when it starts up. +When you switch from the `linstor` module to the `sds-node-configurator` and `sds-drbd` modules, the `linstor-*` LVM tags are automatically replaced with the `storage.deckhouse.io/enabled=true` LVM tag in the `Volume Group`. This way, the `sds-node-configurator` gains control over these `Volume Groups`. diff --git a/docs/FAQ_RU.md b/docs/FAQ_RU.md index 1e884bb0..d9e4c190 100644 --- a/docs/FAQ_RU.md +++ b/docs/FAQ_RU.md @@ -1,73 +1,77 @@ --- -title: " Модуль SDS-Node-Configurator: FAQ" -description: "Распространенные вопросы и ответы на них." +title: " Модуль sds-node-configurator: FAQ" +description: "Модуль sds-node-configurator, Deckhouse Kubernetes Platform. Частые вопросы и ответы." --- -{% alert level="warning" %} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](../../supported_versions.html#linux); -- при использовании сети 10Gbps. +{{< alert level="warning" >}} +Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux). -Работоспособность модуля в других условиях возможна, но не гарантируется. -{% endalert %} +Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется. +{{< /alert >}} ## Почему в кластере не создаются ресурсы `BlockDevice` и `LVMVolumeGroup`? -* В большинстве случаев `BlockDevice`-ресурсы могут не создаваться по причине того, что существующие девайсы не проходят фильтрацию на стороне контроллера. Пожалуйста, убедитесь, что ваши девайсы соответствуют указанным [требованиям](ссылка на требования). +* В большинстве случаев `BlockDevice`-ресурсы могут не создаваться по причине того, что существующие девайсы не проходят фильтрацию на стороне контроллера. Пожалуйста, убедитесь, что ваши девайсы соответствуют указанным [требованиям](./usage.html#требования-контроллера-к-девайсу). -* `LVMVolumeGroup`-ресурсы могут не создаваться по причине отсутствия `BlockDevice`-ресурсов, так как используют их как -источник данных. +* `LVMVolumeGroup`-ресурсы могут не создаваться по причине отсутствия в кластере `BlockDevice`-ресурсов, так как их имена используются в спецификации `LVMVolumeGroup`. -* В том случае, если `BlockDevice`-ресурсы существуют, а `LVMVolumeGroup`-ресурсы отсутствуют, пожалуйста, убедитесь, что у существующих `Volume Group` имеется специальный тег `storage.deckhouse.io/enabled=true`. +* В том случае, если `BlockDevice`-ресурсы существуют, а `LVMVolumeGroup`-ресурсы отсутствуют, пожалуйста, убедитесь, что у существующих `LVM Volume Group` на узле имеется специальный тег `storage.deckhouse.io/enabled=true`. ## Я удалил ресурс `LVMVolumeGroup`, но `Volume Group` осталась? Что делать? Удаление ресурса `LVMVolumeGroup` не приводит к удалению указанной в нем `Volume Group`. Для этого в ресурс необходимо -добавить специальную аннотацию на запуск процесса удаления: `storage.deckhouse.io/sds-delete-vg: ""`. Контроллер запустит -процесс удаления `Volume Group` и после его завершения удалит связанный ресурс самостоятельно. +добавить специальную аннотацию: `storage.deckhouse.io/sds-delete-vg: ""`. Контроллер запустит +процесс удаления `LVM Volume Group` с узла и после его завершения удалит связанный ресурс самостоятельно. -> Простое удаление ресурса `LVMVolumeGroup` приведет к созданию нового ресурса со сгенерированным именем по имеющейся `Volume Group`. +> Простое удаление ресурса `LVMVolumeGroup` приведет к созданию нового ресурса со сгенерированным именем по данным из имеющейся `LVM Volume Group` на узле. ## Я добавил аннотацию на удаление, но ресурс `LVMVolumeGroup` продолжает существовать и `Volume Group` на узле осталась. Почему? -Распространенный случай — на `Volume Group`, указанной в ресурсе, имеются `Logical Volume`. Контроллер не удаляет `Logical Volume`, так как эти `volumes` могут иметь различные данные, и пользователь должен самостоятельно очистить их. +Распространенный случай — соответствующая `LVM Volume Group` на узле имеет `Logical Volume`. Контроллер не удаляет `Logical Volume`, так как эти `volumes` могут иметь важные данные, и пользователь должен самостоятельно очистить их. -Через несколько секунд после удаления `Logical Volume` операция удаления `Volume Group` и связанного с ней ресурса должна быть завершена. - -> Время удаления может затянуться в случае, если очередь реконсайлера у контроллера забита иными событиями. Если вы хотите немедленного удаления `Volume Group` и связанного ресурса, можете обновить аннотацию удаления, например, добавив к ее значению любую цифру: `storage.deckhouse.io/sds-delete-vg: ""` -> `storage.deckhouse.io/sds-delete-vg: "1"`. -> В таком случае реконсайл на удаление отработает незамедлительно. +Через несколько секунд после удаления `Logical Volume` контроллер должен довести до конца операцию удаления `Volume Group` и связанного с ней ресурса. ## Я пытаюсь создать `Volume Group`, используя ресурс `LVMVolumeGroup`, но у меня ничего не получается. Почему? -Скорее всего, ваш ресурс не проходит валидацию со стороны контроллера. -С конкретной причиной неработоспособности вы можете ознакомиться в самом ресурсе в поле `Status.Message` либо обратиться +Скорее всего, ваш ресурс не проходит валидацию со стороны контроллера (при этом, валидация со стороны Kubernetes прошла успешно). +С конкретной причиной неработоспособности вы можете ознакомиться в самом ресурсе в поле `status.message` либо обратиться к логам контроллера. -> Как правило, проблема кроется в некорректно указанных ресурсах `BlockDevice`. Пожалуйста, убедитесь, что выбранные -> ресурсы удовлетворяют следующим требованиям: -> - Поле `Consumable` имеет значение `true`. -> - Для `Volume Group` типа `Local` указанные `BlockDevice` принадлежат одному узлу. -> - Для `Volume Group` типа `Shared` указан единственный ресурс `BlockDevice`. -> - Выбранные `BlockDevice` не участвуют в других ресурсах `LVMVolumeGroup` (других `Volume Group`). -> - Указаны актуальные имена ресурсов `BlockDevice`. -> -> С полным списком ожидаемых значений вы можете ознакомиться с помощью [CR-референса](ссылка на реф) `LVMVolumeGroup`-ресурса. +Как правило, проблема кроется в некорректно указанных ресурсах `BlockDevice`. Пожалуйста, убедитесь, что выбранные +ресурсы удовлетворяют следующим требованиям: +- Поле `Consumable` имеет значение `true`. +- Для `Volume Group` типа `Local` указанные `BlockDevice` принадлежат одному узлу. +- Указаны актуальные имена ресурсов `BlockDevice`. + +С полным списком ожидаемых значений вы можете ознакомиться с помощью [CR-референса](./cr.html) `LVMVolumeGroup`-ресурса. ## Что произойдет, если я отключу один из девайсов в `Volume Group`? Соответствующий ресурс `LVMVolumeGroup` удалится? Ресурс `LVMVolumeGroup` будет существовать до тех пор, пока существует соответствующая `Volume Group`. До тех пор, пока существует хоть один девайс, `Volume Group` будет существовать, но в «нездоровом» состоянии. -Эти проблемы будут отображены в `Status` ресурса. +Эти проблемы будут отображены в `status` ресурса. + +После восстановления отключенного девайса на узле, `LVM Volume Group` восстановит свою работоспособность и соответствующий ресурс `LVMVolumeGroup` также отобразит актуальное состояние. + +## Как передать контроллеру управление существующей на узле `LVM Volume Group`? + +Достаточно добавить LVM-тег `storage.deckhouse.io/enabled=true` на `LVM Volume Group` на узле: + +```shell +vgchange myvg-0 --addtag storage.deckhouse.io/enabled=true +``` + +## Я хочу, чтобы контроллер перестал следить за `LVM Volume Group` на узле. Как мне это сделать? -После восстановления отключенного девайса `Volume Group` восстановит свою работоспособность и соответствующий ресурс `LVMVolumeGroup` также отобразит актуальное состояние. +Достаточно удалить LVM-тег `storage.deckhouse.io/enabled=true` у нужной `LVM Volume Group` на узле: -## Я хочу, чтобы контроллер перестал следить за `Volume Group`. Как мне это сделать? +```shell +vgchange myvg-0 --addtag storage.deckhouse.io/enabled=true +``` -Достаточно удалить тег `storage.deckhouse.io/enabled=true` у нужной `Volume Group`. После этого контроллер перестанет отслеживать выбранную `Volume Group` и самостоятельно удалит связанный с ней ресурс `LVMVolumeGroup`. +После этого контроллер перестанет отслеживать выбранную `Volume Group` и самостоятельно удалит связанный с ней ресурс `LVMVolumeGroup`. -## Я не вешал тег `storage.deckhouse.io/enabled=true` на `Volume Group`, но он появился. Как это возможно? +## Я не вешал LVM-тег `storage.deckhouse.io/enabled=true` на `Volume Group`, но он появился. Как это возможно? -Это возможно в случае, если вы создавали `Volume group` через ресурс `LVMVolumeGroup` (в таком случае контроллер автоматически вешает данный тег на созданную `Volume Group`) либо на данной `Volume Group` был тег модуля `Linstor` — `linstor-*`. -Модуль `sds-node-configurator` заменяет часть функционала контроллера `linstor-pools-importer` из встроенного модуля `Linstor`. -Поэтому при переходе с встроенного модуля `Linstor` на модули `sds-node-configurator` и `sds-drbd` автоматически происходит изменение тегов `linstor-*` на тег `storage.deckhouse.io/enabled=true` в `Volume Group`. Таким образом, управление этими `Volume Group` передается модулю `sds-node-configurator`. +Это возможно в случае, если вы создавали `LVM Volume Group` через ресурс `LVMVolumeGroup` (в таком случае контроллер автоматически вешает данный LVM-тег на созданную `LVM Volume Group`). Либо на данной `Volume Group` или ее `Thin-pool` был LVM-тег модуля `linstor` — `linstor-*`. -> Контроллер единоразово совершает операцию перетегирования по всем существующим `Volume Group` в момент своего запуска. +При миграции с встроенного модуля `linstor` на модули `sds-node-configurator` и `sds-drbd` автоматически происходит изменение LVM-тегов `linstor-*` на LVM-тег `storage.deckhouse.io/enabled=true` в `Volume Group`. Таким образом, управление этими `Volume Group` передается модулю `sds-node-configurator`. diff --git a/docs/README.MD b/docs/README.MD deleted file mode 100644 index b943bc04..00000000 --- a/docs/README.MD +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "The SDS-Node-Configurator module" -description: "The SDS-Node-Configurator module: General Concepts and Principles." ---- -The `SDS-Node-Configurator` module allows you to manage `LVM Volume Group` and `LVM Thin-pool` by applying Kubernetes manifests. This module runs together with the `SDS-DRBD` module: `SDS-Node-Configurator` generates the `LVMVolumeGroup` resources that are then used to create the `DRBDStoragePool`. - -The module exctracts information from the [Kubernetes Custom Resources](resource link) and uses it to create, update, and delete `Volume Group` and `Thin-pool` resources based on them. - -The user can define the desired state of the `Volume Group` and `Thin-pool` in the `Spec` field of the `LVMVolumeGroup` resource. The `SDS-Node-Configurator` will then automatically perform all necessary steps to bring the resource to the desired state. The module continuously monitors the created resources to ensure that their current state matches the specified parameters. - -Note that the module also automatically detects the size of `Physical Volumes`. If block device sizes are expanded, the corresponding `Physical Volumes` and the `Volume Group` (VG) will be automatically expanded as well, providing dynamic support for the changes. However, keep in mind that block device **downsizing is not supported**. - -Note that [Kubernetes Custom Resources](resource link) are cluster-scoped. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..3fde7ed7 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,25 @@ +--- +title: "The sds-node-configurator module" +description: "General Concepts and Principles of the sds-node-configurator module. Deckhouse Kubernetes Platform." +moduleStatus: experimental +--- + +{{< alert level="warning" >}} +The module is guaranteed to work only with stock kernels that are shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux). + +The module may work with other kernels or distributions, but its stable operation and availability of all features is not guaranteed. +{{< /alert >}} + +The module manages `LVM` on cluster nodes through [Kubernetes custom resources](./cr.html) by performing the following operations: + + - Discovering block devices and creating/updating/deleting their corresponding [BlockDevice resources](./cr.html#blockdevice). + + > **Caution!** Manual creation and modification of the `BlockDevice` resource is prohibited. + + - Discovering `LVM Volume Groups` on the nodes with the `storage.deckhouse.io/enabled=true` LVM tag attached and `Thin-pools` running on them as well as managing the corresponding [LVMVolumeGroup resources](./cr.html#lvmvolumegroup). The module automatically creates an `LVMVolumeGroup` resource if it does not yet exist for a discovered `LVM Volume Group`. + + - Scanning `LVM Physical Volumes` on the nodes that are part of managed `LVM Volume Groups`. In case the size of underlying block device expands, the corresponding `LVM Physical Volumes` will be automatically expanded as well (`pvresize` will occur). + + > **Caution!** Downsizing a block device is not supported. + + - Creating/expanding/deleting `LVM Volume Groups` on the node according to the changes the user has made to the `LVMVolumeGroup` resources. [Usage examples](./usage.html#lvmvolumegroup-resources) diff --git a/docs/README_RU.md b/docs/README_RU.md index 881f7e04..4258044d 100644 --- a/docs/README_RU.md +++ b/docs/README_RU.md @@ -1,24 +1,24 @@ --- -title: "Модуль SDS-Node-Configurator" -description: "Модуль SDS-Node-Configurator: общие концепции и положения." +title: "Модуль sds-node-configurator" +description: "Концепция и принцип работы модуля sds-node-configurator, Deckhouse Kubernetes Platform." +moduleStatus: experimental --- -{% alert level="warning" %} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](../../supported_versions.html#linux); -- при использовании сети 10Gbps. +{{< alert level="warning" >}} +Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux). -Работоспособность модуля в других условиях возможна, но не гарантируется. -{% endalert %} +Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется. +{{< /alert >}} -Модуль `SDS-Node-Configurator` позволяет управлять `LVM Volume Group` и `LVM Thin-pool` через применение манифестов `Kubernetes`. -Данный модуль отвечает за создание ресурсов `LVMVolumeGroup` в `Kubernetes`, которые затем используются модулем `SDS-DRBD` для создания и настройки ресурсов `DRBDStoragePool`. +Модуль управляет `LVM` на узлах кластера через [пользовательские ресурсы Kubernetes](./cr.html), выполняя следующие операции: -Модуль оперирует [пользовательскими ресурсами Kubernetes](ссылка на ресурсы), информация из которых используется для выполнения операций по созданию, обновлению и удалению `Volume Group`, а также `Thin-pool` на них. + - Обнаружение блочных устройств и создание/обновление/удаление соответствующих им [ресурсов BlockDevice](./cr.html#blockdevice). -Пользователь имеет возможность описать желаемое состояние `Volume Group` и `Thin-pool` в поле `Spec` ресурса `LVMVolumeGroup`, после чего модуль `SDS-Node-Configurator` автоматически осуществит все необходимые действия для достижения указанного состояния. Модуль непрерывно мониторит созданные ресурсы, гарантируя соответствие их актуального состояния заданным параметрам. + > **Внимание!** Ручное создание и изменение ресурса `BlockDevice` запрещено. -Важно отметить, что модуль также обеспечивает автоматическое определение размеров `Physical Volumes`. В случае расширения размеров блочных устройств соответствующие `Physical Volumes` и `Volume Groups` будут автоматически расширены, обеспечивая динамическую поддержку изменений. + - Обнаружение на узлах `LVM Volume Group` с LVM тегом `storage.deckhouse.io/enabled=true` и `Thin-pool` на них, а также управление соответствующими [ресурсами LVMVolumeGroup](./cr.html#lvmvolumegroup). Модуль автоматически создает ресурс `LVMVolumeGroup`, если его еще не существует для обнаруженной `LVM Volume Group`. -> **Внимание!** Уменьшение размеров блочного устройства не поддерживается. + - Сканирование на узлах `LVM Physical Volumes`, которые входят в управляемые `LVM Volume Group`. В случае расширения размеров нижестоящих блочных устройств, соотвующие `LVM Physical Volumes` будут автоматически расширены (произойдёт `pvresize`). -Обратите внимание, что [пользовательские ресурсы Kubernetes](ссылка на ресурсы) модуля находятся в скоупе кластера. + > **Внимание!** Уменьшение размеров блочного устройства не поддерживается. + + - Создание/расширение/удаление `LVM Volume Group` на узле в соответствии с пользовательскими изменениями в ресурсах `LVMVolumeGroup`. [Примеры использования](./usage.html#работа-с-ресурсами-lvmvolumegroup) diff --git a/docs/USAGE.md b/docs/USAGE.md index 68ee9c0d..1d8d133e 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -1,21 +1,19 @@ --- -title: "The SDS-Node-Configurator module: usage examples" -description: Usage and examples of the SDS-Node-Configurator controller operation. +title: "The sds-node-configurator module: usage examples" +description: Usage and examples of the sds-node-configurator controller operation. Deckhouse Kubernetes Platform. --- -{% alert level="warning" %} -The module is guaranteed to work in the following cases only: -- if stock kernels shipped with the [supported distributions](../../supported_versions.html#linux) are used; -- if a 10Gbps network is used. +{{< alert level="warning" >}} +The module is guaranteed to work only with stock kernels that are shipped with the [supported distributions](https://deckhouse.io/documentation/v1/supported_versions.html#linux). -As for any other configurations, the module may work, but its smooth operation is not guaranteed. -{% endalert %} +The module may work with other kernels or distributions, but its stable operation and availability of all features is not guaranteed. +{{< /alert >}} The controller supports two types of resources: * `BlockDevice`; * `LVMVolumeGroup`. -## [BlockDevice](block device) resources +## `BlockDevice` resources ### Creating a `BlockDevice` resource @@ -28,7 +26,7 @@ It contains all the information about the device in question. * The device is not a drbd device. * The device is not a pseudo-device (i.e. not a loop device). * The device is not a `Logical Volume`. -* File system is missing or matches LVM2_MEMBER. +* File system is missing or matches `LVM2_MEMBER`. * The block device has no partitions. * The size of the block device is greater than 1 Gi. * If the device is a virtual disk, it must have a serial number. @@ -37,52 +35,84 @@ The controller will use the information from the custom resource to handle `LVMV ### Updating a `BlockDevice` resource -The controller updates the information in the custom resource independently if the state of the block device it refers to has changed. +The controller independently updates the information in the custom resource if the state of the block device to which it refers to has changed on the node. ### Deleting a `BlockDevice` resource The following are the cases in which the controller will automatically delete a resource if the block device it refers to has become unavailable: * if the resource had a Consumable status; -* if the block device belongs to a `Volume Group` that does not have the tag `storage.deckhouse.io/enabled=true` attached to it (this `Volume Group` is not managed by our controller). - +* if the block device belongs to a `Volume Group` that does not have the LVM tag `storage.deckhouse.io/enabled=true` attached to it (this `Volume Group` is not managed by our controller). > The controller performs the above activities automatically and requires no user intervention. -## [LVMVolumeGroup](lvmVolumeGroup) resources +> If the resource is manually deleted, it will be recreated by the controller. -The `BlockDevice` resources are required to create and update `LVMVolumeGroup` resources. +## `LVMVolumeGroup` resources -The `LVMVolumeGroup` resources are designed to communicate with the `Volume Group` and display up-to-date information about their state. +`BlockDevice` resources are required to create and update `LVMVolumeGroup` resources. +Currently, only local `Volume Groups` are supported. +`LVMVolumeGroup` resources are designed to communicate with the `LVM Volume Groups` on nodes and display up-to-date information about their state. -### Creating a `LVMVolumeGroup` resource and a `Volume Group` +### Creating an `LVMVolumeGroup` resource -There are two ways to create a `LVMVolumeGroup` resource: +There are two ways to create an `LVMVolumeGroup` resource: * Automatically: - * The controller automatically scans for information about the existing `Volume Groups` on nodes and creates a resource - if a `Volume Group` is tagged with `storage.deckhouse.io/enabled=true` and there is no matching resource for it. + * The controller automatically scans for information about the existing `LVM Volume Groups` on nodes and creates a resource if an `LVM Volume Group` is tagged with the `storage.deckhouse.io/enabled=true` LVM tag and there is no matching Kubernetes resource for it. * In this case, the controller populates all fields of the resource on its own. * By the user: - * The user manually creates the resource by filling in only the `Spec` field. In it, they specify the desired state of the new `Volume Group`. - * This information is then validated to ensure that the configuration provided is correct and can be implemented. - * After successful validation, the controller uses the provided information to create the specified `Volume Group` and update the user resource with the actual information about the state of the created `Volume Group`. - -### Updating a `LVMVolumeGroup` resource and a `Volume Group` - -The controller automatically updates the `Status` field of the `LVMVolumeGroup` with the current data about the `Volume Group` in question. -We do **not recommend** making manual changes to the `Status` field. - -> The controller does not update the `Spec` field since it represents the desired state of the `Volume Group`. The user can make changes to the `Spec` field to change the state of the `Volume Group`. - -### Deleting a `LVMVolumeGroup` resource and a `Volume Group` - -The controller will automatically delete a resource if the `Volume Group` it references has become unavailable. - -> The user may delete a resource manually. However, if the corresponding `Volume Group` still exists at the moment the resource is deleted, -> the controller will create a resource *automatically* based on the existing `Volume Group` -> and assign it a new generated name. - -To delete a `Volume Group` and its associated `Physical Volume`, append the `storage.deckhouse.io/sds-delete-vg: ""` annotation to the corresponding `LVMVolumeGroup` resource. - -The controller will detect that the annotation has been added and initiate the process of deleting the `Volume Group` and its parts. - -This will result in the `Volume Group` being deleted, as well as its associated `Physical Volume`, and the `LVMVolumeGroup` resource (**if there is no `Logical Volume`** on the `Volume Group`**). If there is a `Logical Volume` on the `Volume Group`, the user must first manually delete the `Logical Volume` on the node. \ No newline at end of file + * The user manually creates the resource by filling in only the `metadata.name` and `spec` fields. In it, they specify the desired state of the new `Volume Group`. + * This configuration is then validated to ensure its correctness. + * After successful validation, the controller uses the provided configuration to create the specified `LVM Volume Group` on the node and update the user resource with the actual information about the state of the created `LVM Volume Group`. + * An example of a resource for creating a local `LVM Volume Group` from multiple `BlockDevices`: + + ```yaml + 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" + ``` + + * An example of a resource for creating a local `LVM Volume Group` and a `Thin-pool` on it from multiple `BlockDevices`: + + ```yaml + 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 + ``` + + > Please note that the resource does not specify the node on which the `Volume Group` will be created. The node is picked from the `BlockDevice` resources whose names are listed in `spec.blockDeviceNames`. + + > **Caution!** All the selected block devices must belong to the same node for a 'Local' `LVMVolumeGroup`. + +### Updating an `LVMVolumeGroup` resource and a `Volume Group` + +The controller automatically updates the `status` field of the `LVMVolumeGroup` resource to display up-to-date data about the corresponding `LVM Volume Group` on the node. +We do **not recommend** making manual changes to the `status` field. + +> The controller does not update the `spec` field since it represents the desired state of the `LVM Volume Group`. The user can make changes to the `spec` field to change the state of the `LVM Volume Group` on the node. + +### Deleting an `LVMVolumeGroup` resource and a `Volume Group` + +The controller will automatically delete a resource if the `Volume Group` it references has become unavailable (e.g., all block devices that made up the `Volume Group` have been unplugged). + +> The user may delete a resource manually. However, if the corresponding `LVM Volume Group` still exists on the node at the moment the resource is deleted, the controller will create a resource *automatically* based on the existing `Volume Group` and assign a newly generated name to it. + +To delete an `LVM Volume Group` and its associated `LVM Physical Volume`, add the `storage.deckhouse.io/sds-delete-vg: ""` annotation to the corresponding `LVMVolumeGroup` resource. The controller will detect that the annotation has been added and initiate the process of deleting the `Volume Group` and its components from the node. + +> **Caution!** It is forbidden to delete an `LVM Volume Group` using the above method if it contains a `Logical Volume`, even if it is only the `Thin-pool` that is specified in `spec`. The user must delete all `Logical Volumes` that the `Volume Group` to be deleted contains. diff --git a/docs/USAGE_RU.md b/docs/USAGE_RU.md index 270cdff5..4bb7ef03 100644 --- a/docs/USAGE_RU.md +++ b/docs/USAGE_RU.md @@ -1,23 +1,21 @@ --- -title: "Модуль SDS-Node-Configurator: примеры использования" -description: Использование и примеры работы SDS-Node-Configurator контроллера. +title: "Модуль sds-node-configurator: примеры использования" +description: Использование и примеры работы контроллера sds-node-configurator. Deckhouse Kubernetes Platform. --- -{% alert level="warning" %} -Работоспособность модуля гарантируется только в следующих случаях: -- при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](../../supported_versions.html#linux); -- при использовании сети 10Gbps. +{{< alert level="warning" >}} +Работоспособность модуля гарантируется только при использовании стоковых ядер, поставляемых вместе с [поддерживаемыми дистрибутивами](https://deckhouse.ru/documentation/v1/supported_versions.html#linux). -Работоспособность модуля в других условиях возможна, но не гарантируется. -{% endalert %} +Работоспособность модуля при использовании других ядер или дистрибутивов возможна, но не гарантируется. +{{< /alert >}} Контроллер работает с двумя типами ресурсов: * `BlockDevice`; * `LVMVolumeGroup`. -## Работа с ресурсами [BlockDevice](block device) +## Работа с ресурсами `BlockDevice` -### Создание `BlockDevice`-ресурса +### Создание ресурса `BlockDevice` Контроллер регулярно сканирует существующие девайсы на узле, и в случае, если девайс удовлетворяет всем необходимым условиям со стороны контроллера, создается `custom resource` (CR) `BlockDevice` с уникальным именем, в котором отображена @@ -28,60 +26,93 @@ description: Использование и примеры работы SDS-Node- * Не является drbd-устройством. * Не является псевдодевайсом (то есть не loop device). * Не является `Logical Volume`. -* Файловая система отсутствует или соответствует LVM2_MEMBER. +* Файловая система отсутствует или соответствует `LVM2_MEMBER`. * У блок-девайса отсутствуют партиции. * Размер блок-девайса больше 1 Gi. * Если девайс — виртуальный диск, у него должен быть серийный номер. Информацию из полученного ресурса контроллер будет использовать для своей дальнейшей работы с ресурсами `LVMVolumeGroup`. -### Обновление `BlockDevice`-ресурса +### Обновление ресурса `BlockDevice` -Контроллер самостоятельно обновляет информацию в ресурсе, если состояние указанного в нем блок-девайса поменялось. +Контроллер самостоятельно обновляет информацию в ресурсе, если состояние указанного в нем блок-девайса поменялось на узле. -### Удаление `BlockDevice`-ресурса +### Удаление ресурса `BlockDevice` -Контроллер автоматически удалит ресурс, если указанный в нем блок-девайс стал недоступен в следующих случаях: +Контроллер автоматически удалит ресурс, если указанный в нем блок-девайс стал недоступен. Удаление произойдёт только в следующих случаях: * если ресурс был в статусе Consumable; -* если блок-девайс принадлежит `Volume Group`, у которой нет тега `storage.deckhouse.io/enabled=true` (эта `Volume Group` не управляется нашим контроллером). +* если блок-девайс принадлежит `Volume Group`, у которой нет LVM-тега `storage.deckhouse.io/enabled=true` (эта `Volume Group` не управляется нашим контроллером). > Контроллер выполняет вышеперечисленные виды работ автоматически и не требует вмешательства со стороны пользователя. -## Работа с ресурсами [LVMVolumeGroup](lvmVolumeGroup) +> В случае ручного удаления ресурса, он будет пересоздан контроллером. -Ресурсы `BlockDevice` необходимы для создания и обновления ресурсов `LVMVolumeGroup`. +## Работа с ресурсами `LVMVolumeGroup` -`LVMVolumeGroup`-ресурсы предназначены для взаимодействия с `Volume Group` и отображения актуальной информации об их состоянии. +Ресурсы `BlockDevice` необходимы для создания и обновления ресурсов `LVMVolumeGroup`. +На данный момент поддерживаются только локальные `Volume Group`. +`LVMVolumeGroup`-ресурсы предназначены для взаимодействия с `LVM Volume Group` на узлах и отображения актуальной информации об их состоянии. -### Создание `LVMVolumeGroup`-ресурса и `Volume Group` +### Создание ресурса `LVMVolumeGroup` Ресурс `LVMVolumeGroup` может быть создан 2 способами: * Автоматическое создание: - * Контроллер автоматически сканирует информацию о существующих `Volume Group` на узлах и создает ресурс в случае, - если у `Volume Group` имеется тег `storage.deckhouse.io/enabled=true` и соответствующий ресурс по ней отсутствует. + * Контроллер автоматически сканирует информацию о существующих `LVM Volume Group` на узлах и создает ресурс в случае, если у `LVM Volume Group` имеется LVM-тег `storage.deckhouse.io/enabled=true` и соответствующий ей Kubernetes-ресурс отсутствует. * В этом случае контроллер самостоятельно заполняет все поля ресурса. * Пользовательское создание: - * Пользователь вручную создает ресурс, заполняя только поле `Spec`, в котором указывает желаемое состояние новой `Volume Group`. - * Информация, указанная пользователем, пройдет специальную валидацию на корректность предоставленной конфигурации и возможности ее реализации. - * После успешного прохождения валидации контроллер использует указанную информацию, чтобы по ней создать указанную `Volume Group` и обновить пользовательский ресурс актуальной информацией о состоянии созданной `Volume Group`. - -### Обновление `LVMVolumeGroup`-ресурса и `Volume Group` - -Контроллер в автоматическом режиме обновляет поле `Status` ресурса `LVMVolumeGroup`, отображая актуальные данные об указанной `Volume Group`. -Пользователю **не рекомендуется** собственноручно вносить изменения в поле `Status`. - -> Контроллер не обновляет поле `Spec`, так как указанное поле отображает желаемое состояние `Volume Group`. Пользователь может вносить изменения в поле `Spec`, чтобы изменить состояние указанной в ресурсе `Volume Group`. - -### Удаление `LVMVolumeGroup`-ресурса и `Volume Group` - -Контроллер автоматически удалит ресурс, если указанная в нем `Volume Group` стала недоступна по той или иной причине. - -> Пользователь может удалить ресурс самостоятельно, но в том случае, если на момент удаления ресурса соответствующая `Volume Group` -> еще будет существовать, контроллер создаст по существующей `Volume Group` ресурс *автоматически*, указав для созданного -> ресурса новое сгенерированное имя. - -Пользователь может удалить `Volume Group` и связанные с ним `Physical Volume`, добавив в соответствующий `LVMVolumeGroup`-ресурс аннотацию `storage.deckhouse.io/sds-delete-vg: ""`. - -Контроллер отреагирует на указанную аннотацию и запустит процесс удаления `Volume Group` и ее составляющих. - -Результатом работы контроллера станет удаление `Volume Group`, связанных с ней `Physical Volume`, а также самого ресурса `LVMVolumeGroup` в случае, **если на `Volume Group` отсутствуют `Logical Volume`**. Если на `Volume Group` будет `Logical Volume`, пользователю предварительно необходимо самостоятельно удалить `Logical Volume` на узле. + * Пользователь вручную создает ресурс, заполняя только поля `metadata.name` и `spec`, в котором указывает желаемое состояние новой `Volume Group`. + * Конфигурация, указанная пользователем, пройдет специальную валидацию на корректность. + * После успешного прохождения валидации контроллер использует указанную конфигурацию, чтобы по ней создать указанную `LVM Volume Group` на узле и обновить пользовательский ресурс актуальной информацией о состоянии созданной `LVM Volume Group`. + * Пример ресурса для создания локальной `LVM Volume Group` из нескольких `BlockDevice`: + + ```yaml + 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`: + + ```yaml + 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`.