Стадия жизненного цикла модуля: General Availability
Модуль поддерживает два режима работы: LVM (Thick) и LVM-thin. Каждый режим имеет свои особенности, преимущества и ограничения. См. подробнее о различиях между режимами в FAQ.
Быстрый старт
Ниже описан пример настройки модуля для создания Thick-хранилища на трёх узлах кластера: включение модулей через ModuleConfig, создание групп томов LVM на каждом узле через LVMVolumeGroup и создание LocalStorageClass для использования при создании PVC.
Включение модуля
Для корректной работы модуля sds-local-volume выполните следующие шаги:
Все команды ниже должны быть выполнены на машине с доступом к API Kubernetes и правами администратора.
-
Включите модуль
sds-node-configurator, выполнив команду ниже:d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-node-configurator spec: enabled: true version: 1 settings: enableThinProvisioning: true # Если планируете использовать LVM-thin тома EOF -
Дождитесь перехода модуля
sds-node-configuratorв состояниеReady. На этом этапе проверка подов в пространстве имёнd8-sds-node-configuratorне требуется.d8 k get modules sds-node-configurator -w -
Ознакомьтесь с доступными настройками модуля
sds-local-volumeперед его включением. После ознакомления включите модуль, выполнив команду ниже:d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-local-volume spec: enabled: true version: 1 settings: enableThinProvisioning: true # если планируете использовать LVM-thin тома EOFВ результате модуль запустится с настройками по умолчанию, что приведет к созданию служебных подов компонента
sds-local-volumeна всех узлах кластера: -
Дождитесь перехода модуля
sds-local-volumeв состояниеReady.d8 k get modules sds-local-volume -w -
Убедитесь, что в пространствах имён
d8-sds-local-volumeиd8-sds-node-configuratorвсе поды находятся в статусеRunningилиCompleted. Поды должны быть запущены на всех узлах, где планируется использовать ресурсы LVM.d8 k -n d8-sds-local-volume get pod -owide -w d8 k -n d8-sds-node-configurator get pod -o wide -w
Подготовка узлов к созданию хранилищ
Запустите поды csi-node на выбранных узлах для корректной работы хранилищ. По умолчанию эти поды запускаются на всех узлах кластера. Проверьте их наличие командой:
d8 k -n d8-sds-local-volume get pod -owide
Размещение подов csi-node управляется специальными метками (nodeSelector), которые задаются в параметре spec.settings.dataNodes.nodeSelector модуля. Подробнее о настройке и выборе узлов для работы модуля см. в разделе Выбор узлов для работы модуля.
Настройка хранилища на узлах
Для настройки хранилища на узлах создайте группы томов LVM с использованием ресурсов LVMVolumeGroup. В данном примере создается Thick-хранилище. Инструкции по созданию thin-хранилища см. в разделе Создание thin-хранилища.
Перед созданием ресурса LVMVolumeGroup убедитесь, что на данном узле запущен под csi-node. Для этого выполните команду:
d8 k -n d8-sds-local-volume get pod -owide
Чтобы настроить хранилище на узлах, выполните следующие действия:
-
Получите все доступные ресурсы BlockDevice в кластере:
d8 k get bdПример вывода:
NAME NODE CONSUMABLE SIZE PATH dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa worker-0 false 976762584Ki /dev/nvme1n1 dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd worker-0 false 894006140416 /dev/nvme0n1p6 dev-7e4df1ddf2a1b05a79f9481cdf56d29891a9f9d0 worker-1 false 976762584Ki /dev/nvme1n1 dev-b103062f879a2349a9c5f054e0366594568de68d worker-1 false 894006140416 /dev/nvme0n1p6 dev-53d904f18b912187ac82de29af06a34d9ae23199 worker-2 false 976762584Ki /dev/nvme1n1 dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1 worker-2 false 894006140416 /dev/nvme0n1p6 -
Создайте ресурс LVMVolumeGroup для узла
worker-0:d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "vg-1-on-worker-0" # Имя может быть любым валидным именем ресурса в Kubernetes. Это имя ресурса LVMVolumeGroup будет использовано при создании LocalStorageClass spec: type: Local local: nodeName: "worker-0" blockDeviceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa - dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd actualVGNameOnTheNode: "vg-1" # Имя группы томов LVM, которая будет создана из указанных блочных устройств на узле EOF -
Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние
Ready:d8 k get lvg vg-1-on-worker-0 -wПосле перехода ресурса в состояние
Readyна узлеworker-0из блочных устройств/dev/nvme1n1и/dev/nvme0n1p6будет создана группа томов LVM с именемvg-1. -
Создайте ресурс LVMVolumeGroup для узла
worker-1:d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "vg-1-on-worker-1" spec: type: Local local: nodeName: "worker-1" blockDeviceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - dev-7e4df1ddf2a1b05a79f9481cdf56d29891a9f9d0 - dev-b103062f879a2349a9c5f054e0366594568de68d actualVGNameOnTheNode: "vg-1" EOF -
Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние
Ready:d8 k get lvg vg-1-on-worker-1 -wПосле перехода ресурса в состояние
Readyна узлеworker-1из блочных устройств/dev/nvme1n1и/dev/nvme0n1p6будет создана группа томов LVM с именемvg-1. -
Создайте ресурс LVMVolumeGroup для узла
worker-2:d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "vg-1-on-worker-2" spec: type: Local local: nodeName: "worker-2" blockDeviceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - dev-53d904f18b912187ac82de29af06a34d9ae23199 - dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1 actualVGNameOnTheNode: "vg-1" EOF -
Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние
Ready:d8 k get lvg vg-1-on-worker-2 -wПосле перехода ресурса в состояние
Readyна узлеworker-2из блочных устройств/dev/nvme1n1и/dev/nvme0n1p6будет создана группа томов LVM с именемvg-1. -
Создайте ресурс LocalStorageClass:
Внимание: создание StorageClass для CSI-драйвера
local.csi.storage.deckhouse.ioпользователем запрещено.d8 k apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LocalStorageClass metadata: name: local-storage-class spec: lvm: lvmVolumeGroups: - name: vg-1-on-worker-0 - name: vg-1-on-worker-1 - name: vg-1-on-worker-2 type: Thick reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer EOF -
Дождитесь перехода созданного ресурса LocalStorageClass в состояние
Created:d8 k get lsc local-storage-class -w -
Проверьте создание соответствующего StorageClass:
d8 k get sc local-storage-class
После появления StorageClass с именем local-storage-class настройка модуля sds-local-volume завершена. Теперь можно создавать Persistent Volume Claim (PVC), указывая StorageClass с именем local-storage-class.