Настройка хранилища
После добавления worker-узлов необходимо настроить хранилище, которое будет использоваться для создания дисков виртуальных машин и для хранения метрик компонентов кластера. Хранилище можно выбрать из списка поддерживаемых.
Далее рассмотрим включение и настройку программно-определяемого хранилища sds-replicated-volume
. Это хранилище позволяет создать реплицируемые тома на основе дискового пространства узлов. Для примера настроим StorageClass на основе томов с двумя репликами, которые располагаются на дисках /dev/sda
.
Добавление sds-replicated-volume
Для добавления хранилища sds-replicated-volume
нужно включить два модуля Deckhouse, создав ресурсы ModuleConfig:
1sudo -i d8 k create -f - <<EOF
2---
3apiVersion: deckhouse.io/v1alpha1
4kind: ModuleConfig
5metadata:
6 name: sds-node-configurator
7spec:
8 enabled: true
9---
10apiVersion: deckhouse.io/v1alpha1
11kind: ModuleConfig
12metadata:
13 name: sds-replicated-volume
14spec:
15 enabled: true
16EOF
Дождитесь включения модуля:
1sudo -i d8 k wait module sds-replicated-volume --for='jsonpath={.status.status}=Ready' --timeout=1200s
Убедитесь, что все поды модуля sds-replicated-volume
находятся в состоянии Running
(может потребоваться некоторое время):
1sudo -i d8 k -n d8-sds-replicated-volume get pod -owide -w
Настройка sds-replicated-volume
Настройка хранилища включает в себя объединение доступных блочных устройств на узлах в пулы, из которых затем будет создан StorageClass.
-
Получите доступные блочные устройства:
1sudo -i d8 k get blockdevices.storage.deckhouse.io
Пример вывода с дополнительными дисками sda:
1NAME NODE CONSUMABLE SIZE PATH AGE 2dev-93640bc74158c6e491a2f257b5e0177309588db0 master-0 false 468851544Ki /dev/sda 8m28s 3dev-40bf7a561aee502f20b81cf1eff873a0455a95cb dvp-worker-1 false 468851544Ki /dev/sda 8m17s 4dev-b1c720a7cec32ae4361de78b71f08da1965b1d0c dvp-worker-2 false 468851544Ki /dev/sda 8m12s
-
Создайте VolumeGroup на каждом узле.
На каждом узле необходимо создать группу томов LVM с помощью ресурса LVMVolumeGroup.
Для создания ресурса LVMVolumeGroup на узле используйте следующие команды:
1export NODE_NAME="dvp-worker-1" 2export DEV_NAME="dev-40bf7a561aee502f20b81cf1eff873a0455a95cb" 3sudo -i d8 k apply -f - <<EOF 4apiVersion: storage.deckhouse.io/v1alpha1 5kind: LVMVolumeGroup 6metadata: 7 name: "vg-on-${NODE_NAME}" 8spec: 9 type: Local 10 local: 11 nodeName: "$NODE_NAME" 12 blockDeviceSelector: 13 matchExpressions: 14 - key: kubernetes.io/metadata.name 15 operator: In 16 values: 17 - "$DEV_NAME" 18 # Имя группы томов LVM, которая будет создана из указанных выше блочных устройств на выбранном узле. 19 actualVGNameOnTheNode: "vg-1" 20EOF
Повторите действия для каждого узла, блочное устройство которого планируется использовать. В примере это все три узла:
master-0
,dvp-master-1
иdvp-master-2
.Дождитесь, что все созданные ресурсы LVMVolumeGroup перейдут в состояние
Ready
:1sudo -i d8 k get lvg -w
Пример вывода:
1NAME THINPOOLS CONFIGURATION APPLIED PHASE NODE SIZE ALLOCATED SIZE VG AGE 2vg-on-master-0 0/0 True Ready master-0 360484Mi 30064Mi vg-1 29s 3vg-on-dvp-worker-1 0/0 True Ready dvp-worker-1 360484Mi 30064Mi vg-1 58s 4vg-on-dvp-worker-2 0/0 True Ready dvp-worker-2 360484Mi 30064Mi vg-1 6s
-
Создайте пул из групп томов LVM.
Созданные группы томов нужно собрать в пул для репликации. Пул задаётся в ресурсе ReplicatedStoragePool:
1sudo -i d8 k apply -f - <<EOF 2 apiVersion: storage.deckhouse.io/v1alpha1 3 kind: ReplicatedStoragePool 4 metadata: 5 name: sds-pool 6 spec: 7 type: LVM 8 lvmVolumeGroups: 9 - name: vg-on-dvp-worker-01 10 - name: vg-on-dvp-worker-02 11 - name: vg-on-master 12EOF
Дождитесь, когда ресурс перейдет в состояние
Completed
:1sudo -i d8 k get rsp data -w
Пример вывода:
1NAME PHASE TYPE AGE 2sds-pool Completed LVM 32s
-
Задайте параметры StorageClass.
Модуль
sds-replicated-volume
использует ресурсы ReplicatedStorageClass для автоматического создания StorageClass’ов с нужными характеристиками. В этом ресурсе важны следующие параметры:replication
— параметры репликации, для 2 реплик будет использоваться значениеAvailability
;storagePool
— имя созданного ранее пула, в данном примере указываетсяsds-pool
.
Остальные параметры описаны в документации ресурса ReplicatedStorageClass.
1sudo -i d8 k apply -f - <<EOF 2apiVersion: storage.deckhouse.io/v1alpha1 3kind: ReplicatedStorageClass 4metadata: 5 name: sds-r2 6spec: 7 replication: Availability 8 storagePool: sds-pool 9 reclaimPolicy: Delete 10 topology: Ignored 11EOF
Проверьте, что в кластере появился соответствующий StorageClass:
1sudo -i d8 k get sc
Пример вывода:
1NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE 2sds-r2 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 6s
-
Установите StorageClass по умолчанию:
1# Укажите имя своего объекта StorageClass. 2DEFAULT_STORAGE_CLASS=replicated-storage-class 3sudo -i d8 k patch mc global --type='json' -p='[{"op": "replace", "path": "/spec/settings/defaultClusterStorageClass", "value": "'"$DEFAULT_STORAGE_CLASS"'"}]'