Модуль находится в процессе активного развития. Функциональность может существенно измениться.
Модуль управляет локальным блочным хранилищем на базе LVM
. Модуль позволяет создавать StorageClass
в Kubernetes
через создание пользовательских ресурсов Kubernetes LocalStorageClass
(пример создания ниже).
Для создания Storage Class
потребуются настроенные на узлах кластера LVMVolumeGroup
. Настройка LVM
осуществляется модулем sds-node-configurator.
Внимание! Перед включением модуля
sds-local-volume
необходимо включить модульsds-node-configurator
.
После включения модуля sds-local-volume
необходимо создать StorageClass’ы.
Внимание! Создание
StorageClass
для CSI-драйвера local.csi.storage.deckhouse.io пользователем запрещено.
Поддерживаются два режима — LVM и LVMThin. Каждый из них имеет свои достоинства и недостатки, подробнее о различиях читайте в FAQ.
Быстрый старт
Все команды следует выполнять на машине, имеющей доступ к API Kubernetes с правами администратора.
Включение модулей
-
Включить модуль sds-node-configurator
kubectl apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-node-configurator spec: enabled: true version: 1 EOF
-
Дождаться, когда модуль перейдет в состояние
Ready
. На этом этапе НЕ нужно проверять поды в namespaced8-sds-node-configurator
.kubectl get mc sds-node-configurator -w
-
Включить модуль
sds-local-volume
. Возможные настройки модуля рекомендуем посмотреть в конфигурации. В примере ниже модуль запускается с настройками по умолчанию. Это приведет к тому, что на всех узлах кластера будут запущены служебные поды компонентовsds-local-volume
.kubectl apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-local-volume spec: enabled: true version: 1 EOF
-
Дождаться, когда модуль перейдет в состояние
Ready
.kubectl get mc sds-local-volume -w
-
Проверить, что в namespace
d8-sds-local-volume
иd8-sds-node-configurator
все поды в состоянииRunning
илиCompleted
и запущены на всех узлах, где планируется использовать ресурсыLVM
.kubectl -n d8-sds-local-volume get pod -owide -w kubectl -n d8-sds-node-configurator get pod -o wide -w
Настройка хранилища на узлах
Необходимо на этих узлах создать группы томов LVM
с помощью пользовательских ресурсов LVMVolumeGroup
. В быстром старте будем создавать обычное Thin
хранилище.
Приступим к настройке хранилища:
-
Получить все ресурсы BlockDevice, которые доступны в вашем кластере:
kubectl 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
:kubectl apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LvmVolumeGroup metadata: name: "vg-1-on-worker-0" # The name can be any fully qualified resource name in Kubernetes. This LvmVolumeGroup resource name will be used to create ReplicatedStoragePool in the future spec: type: Local blockDeviceNames: # specify the names of the BlockDevice resources that are located on the target node and whose CONSUMABLE is set to true. Note that the node name is not specified anywhere since it is derived from BlockDevice resources. - dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa - dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd thinPools: - name: ssd-thin size: 50Gi actualVGNameOnTheNode: "vg-1" # the name of the LVM VG to be created from the above block devices on the node EOF
-
Дождаться, когда созданный ресурс
LVMVolumeGroup
перейдет в состояниеOperational
:kubectl get lvg vg-1-on-worker-0 -w
-
Если ресурс перешел в состояние
Operational
, то это значит, что на узлеworker-0
из блочных устройств/dev/nvme1n1
и/dev/nvme0n1p6
была создана LVM VG с именемvg-1
. -
Далее создать ресурс LVMVolumeGroup для узла
worker-1
:kubectl apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LvmVolumeGroup metadata: name: "vg-1-on-worker-1" spec: type: Local blockDeviceNames: - dev-7e4df1ddf2a1b05a79f9481cdf56d29891a9f9d0 - dev-b103062f879a2349a9c5f054e0366594568de68d thinPools: - name: ssd-thin size: 50Gi actualVGNameOnTheNode: "vg-1" EOF
-
Дождаться, когда созданный ресурс
LVMVolumeGroup
перейдет в состояниеOperational
:kubectl get lvg vg-1-on-worker-1 -w
-
Если ресурс перешел в состояние
Operational
, то это значит, что на узлеworker-1
из блочного устройства/dev/nvme1n1
и/dev/nvme0n1p6
была создана LVM VG с именемvg-1
. -
Далее создать ресурс LVMVolumeGroup для узла
worker-2
:kubectl apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LvmVolumeGroup metadata: name: "vg-1-on-worker-2" spec: type: Local blockDeviceNames: - dev-53d904f18b912187ac82de29af06a34d9ae23199 - dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1 thinPools: - name: ssd-thin size: 50Gi actualVGNameOnTheNode: "vg-1" EOF
-
Дождаться, когда созданный ресурс
LVMVolumeGroup
перейдет в состояниеOperational
:kubectl get lvg vg-1-on-worker-2 -w
-
Если ресурс перешел в состояние
Operational
, то это значит, что на узлеworker-2
из блочного устройства/dev/nvme1n1
и/dev/nvme0n1p6
была создана LVM VG с именемvg-1
. -
Создать ресурс LocalStorageClass:
kubectl apply -f -<<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LocalStorageClass metadata: name: local-storage-class spec: isDefault: false lvm: lvmVolumeGroups: - name: vg-1-on-worker-0 thin: poolName: ssd-thin - name: vg-1-on-worker-1 thin: poolName: ssd-thin - name: vg-1-on-worker-2 thin: poolName: ssd-thin type: Thin reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer EOF
-
Дождаться, когда созданный ресурс
LocalStorageClass
перейдет в состояниеCreated
:kubectl get lsc local-storage-class -w
-
Проверить, что соответствующий
StorageClass
создался:kubectl get sc local-storage-class
-
Если
StorageClass
с именемlocal-storage-class
появился, значит настройка модуляsds-local-volume
завершена. Теперь пользователи могут создавать PV, указываяStorageClass
с именемreplicated-storage-class
. При указанных выше настройках будет создаваться том с 3мя репликами на разных узлах.
Системные требования и рекомендации
Требования
- Использование стоковых ядер, поставляемых вместе с поддерживаемыми дистрибутивами;
- Не использовать другой SDS (Software defined storage) для предоставления дисков нашему SDS