После добавления worker-узлов необходимо настроить хранилище, которое будет использоваться для создания дисков виртуальных машин и для хранения метрик компонентов кластера. Хранилище можно выбрать из списка поддерживаемых.
Далее рассматривается использование программно-определяемого реплицируемого блочного хранилища на базе DRBD, которое позволяет создавать реплицируемые тома на основе дискового пространства узлов. Для примера настроим StorageClass на основе томов с двумя репликами, которые располагаются на дисках /dev/sda
.
Для выполнения приведенных ниже команд необходима установленная утилита d8 (Deckhouse CLI) и настроенный контекст kubectl для доступа к кластеру. Также, можно подключиться к master-узлу по SSH и выполнить команду от пользователя root
с помощью sudo -i
.
Включение возможности использования реплицируемого хранилища
Включите модули sds-node-configurator
, snapshot-controller
и sds-replicated-volume
при помощи веб-интерфейса администратора или через CLI:
-
Включите модуль
sds-node-configurator
:sudo -i d8 s module enable sds-node-configurator
-
Дождитесь, пока модуль
sds-node-configurator
перейдёт в состояниеReady
:d8 k get module sds-node-configurator -w
-
Включите модуль
snapshot-controller
:sudo -i d8 s module enable snapshot-controller
-
Включите модуль
sds-replicated-volume
:sudo -i d8 s module enable sds-replicated-volume
-
Дождитесь пока модуль
sds-replicated-volume
перейдёт в состояниеReady
:sudo -i d8 k wait module sds-replicated-volume --for='jsonpath={.status.status}=Ready' --timeout=1200s
-
Убедитесь, что в пространствах имен
d8-sds-node-configurator
,d8-snapshot-controller
иd8-sds-replicated-volume
все поды находятся в статусеRunning
илиCompleted
:sudo -i d8 k -n d8-sds-node-configurator get pod -owide -w sudo -i d8 k -n d8-sds-snapshot-controller get pod -owide -w sudo -i d8 k -n d8-sds-replicated-volume get pod -owide -w
Настройка реплицируемого хранилища
Настройка хранилища включает в себя объединение доступных блочных устройств на узлах в пулы, из которых затем будет создан StorageClass.
-
Получите доступные блочные устройства:
d8 k get blockdevices.storage.deckhouse.io
-
Создайте VolumeGroup на каждом узле.
На каждом узле необходимо создать группу томов LVM с помощью ресурса LVMVolumeGroup.
Для создания ресурса LVMVolumeGroup, для каждого узла выполните следующие команды (укажите имя узла и имя блочного устройства):
export NODE_NAME="<NODE_NAME>" export DEV_NAME="<BLOCK_DEVICE_NAME>" d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "vg-on-${NODE_NAME}" spec: type: Local local: nodeName: "$NODE_NAME" blockDeviceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - "$DEV_NAME" # Имя группы томов LVM, которая будет создана из указанных выше блочных устройств на выбранном узле. actualVGNameOnTheNode: "vg-1" EOF
Дождитесь, что все созданные ресурсы LVMVolumeGroup перейдут в состояние
Ready
:d8 k get lvg -w
-
Создайте пул из групп томов LVM.
Созданные группы томов нужно собрать в пул для репликации (задаётся в ресурсе ReplicatedStoragePool). Для этого выполните следующую команду (укажите имена созданных групп томов):
d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: ReplicatedStoragePool metadata: name: sds-pool spec: type: LVM lvmVolumeGroups: # Укажите свои имена групп томов. - name: vg-on-dvp-worker-01 - name: vg-on-dvp-worker-02 - name: vg-on-master EOF
Дождитесь, когда ресурс перейдет в состояние
Completed
:d8 k get rsp data -w
-
Задайте параметры StorageClass.
Модуль
sds-replicated-volume
использует ресурсы ReplicatedStorageClass для автоматического создания StorageClass с нужными характеристиками. В этом ресурсе важны следующие параметры:replication
— параметры репликации, для 2 реплик будет использоваться значениеAvailability
;storagePool
— имя созданного ранее пула, в данном примере указываетсяsds-pool
.
Остальные параметры описаны в документации ресурса ReplicatedStorageClass.
d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: ReplicatedStorageClass metadata: name: sds-r2 spec: replication: Availability storagePool: sds-pool reclaimPolicy: Delete topology: Ignored EOF
Проверьте, что в кластере появился соответствующий StorageClass:
d8 k get sc
-
Установите StorageClass по умолчанию (укажите имя своего объекта StorageClass):
DEFAULT_STORAGE_CLASS=<DEFAULT_STORAGE_CLASS_NAME> d8 k patch mc global --type='json' -p='[{"op": "replace", "path": "/spec/settings/defaultClusterStorageClass", "value": "'"$DEFAULT_STORAGE_CLASS"'"}]'