Функциональность модуля может измениться, но основные возможности сохранятся. Совместимость с будущими версиями обеспечивается, но может потребовать дополнительных действий по миграции.
Модуль управляет локальным блочным хранилищем на базе 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 modules 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
Подготовка узлов к созданию хранилищ на них
Для создания хранилищ на узлах необходимо, чтобы на выбранных узлах были запущены pod-ы sds-local-volume-csi-node
.
По умолчанию pod-ы выедут на всех узлах кластера, проверить их наличие можно командой:
kubectl -n d8-sds-local-volume get pod -owide
Расположение данных pod-ов определяется специальными метками (nodeSelector), которые указываются в поле
spec.settings.dataNodes.nodeSelector
в настройках модуля. Для получения более подробной информации о настройке, пожалуйста, перейдите по ссылке
Настройка хранилища на узлах
Необходимо на этих узлах создать группы томов LVM
с помощью пользовательских ресурсов LVMVolumeGroup
. В быстром старте будем создавать обычное Thick
хранилище.
Пожалуйста, перед созданием
LVMVolumeGroup
убедитесь, что на данном узле запущен podsds-local-volume-csi-node
. Это можно сделать командой:kubectl -n d8-sds-local-volume get pod -owide
Приступим к настройке хранилища:
-
Получить все ресурсы 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 LocalStorageClass 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
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
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
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:
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
:
kubectl get lsc local-storage-class -w
- Проверить, что соответствующий
StorageClass
создался:
kubectl get sc local-storage-class
- Если
StorageClass
с именемlocal-storage-class
появился, значит настройка модуляsds-local-volume
завершена. Теперь пользователи могут создавать PV, указываяStorageClass
с именемlocal-storage-class
.
Системные требования и рекомендации
Требования
- Использование стоковых ядер, поставляемых вместе с поддерживаемыми дистрибутивами;
- Не использовать другой SDS (Software defined storage) для предоставления дисков нашему SDS