Настройка хранилища

После добавления 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.

  1. Получите доступные блочные устройства:

    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
    
  2. Создайте 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
    
  3. Создайте пул из групп томов 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
    
  4. Задайте параметры 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
    
  5. Установите 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"'"}]'