Текущая версия модуля устарела и больше не поддерживается. Переключитесь на использование модуля sds-drbd.

Работоспособность модуля гарантируется только в следующих случаях:

Работоспособность модуля в других условиях возможна, но не гарантируется.

После включения модуля кластер автоматически настраивается на использование LINSTOR и остается только сконфигурировать хранилище.

Отдельные функции модуля могут потребовать указания мастер-пароля (к примеру, использование резервного копирования в удаленное S3-хранилище). Чтобы задать мастер-пароль, создайте Secret в пространстве имен d8-system:

apiVersion: v1
kind: Secret
metadata:
  name: linstor-passphrase
  namespace: d8-system
immutable: true
stringData:
  MASTER_PASSPHRASE: *!пароль* # Мастер-пароль для LINSTOR.

Подойдите ответственно к выбору мастер-пароля для LINSTOR. При его потере зашифрованные данные окажутся недоступными.

Конфигурация хранилища LINSTOR

Конфигурация LINSTOR в Deckhouse осуществляется посредством назначения специального тега linstor-<имя_пула> на LVM-группу томов или LVMThin-пул.

  1. Выберите имя тега.

    Имя тега должно быть уникальным в пределах одного узла. Поэтому каждый раз, прежде чем назначить новый тег, убедитесь в отсутствии этого тега у других групп томов и пулов.

    Выполните следующие команды, чтобы вывести список групп томов и пулов:

    # LVM пулы
    vgs -o+tags | awk 'NR==1;$NF~/linstor-/'
    # LVMThin пулы
    lvs -o+tags | awk 'NR==1;$NF~/linstor-/'
    
  2. Добавьте пулы.

    Создайте пулы хранения на всех узлах, где вы планируете хранить ваши данные. Используйте одинаковые имена пулов хранения на разных узлах, если хотите иметь для них общий StorageClass.

    • Чтобы добавить пул LVM, создайте группу томов с тегом linstor-<имя_пула> либо добавьте тег linstor-<имя_пула> существующей группе.

      Пример команды создания группы томов vg0 с тегом linstor-data:

      vgcreate vg0 /dev/nvme0n1 /dev/nvme1n1 --add-tag linstor-data
      

      Пример команды добавления тега linstor-data существующей группе томов vg0:

      vgchange vg0 --add-tag linstor-data
      
    • Чтобы добавить пул LVMThin, создайте LVMThin-пул с тегом linstor-<имя_пула>.

      Пример команды создания LVMThin-пула vg0/thindata с тегом linstor-data:

      vgcreate vg0 /dev/nvme0n1 /dev/nvme1n1
      lvcreate -l 100%FREE -T vg0/thindata --add-tag linstor-thindata
      

      Обратите внимание, что сама группа томов не обязана содержать какой-либо тег.

  3. Проверьте создание StorageClass.

    Когда все пулы хранения будут созданы, появятся три новых StorageClass’а. Проверьте, что они создались, выполнив в кластере Kubernetes команду:

    kubectl get storageclass
    

    Пример вывода списка StorageClass:

    $ kubectl get storageclass
    NAME                   PROVISIONER                  AGE
    linstor-data-r1        linstor.csi.linbit.com       143s
    linstor-data-r2        linstor.csi.linbit.com       142s
    linstor-data-r3        linstor.csi.linbit.com       142s
    

    Каждый StorageClass можно использовать для создания томов соответственно с одной, двумя или тремя репликами в ваших пулах хранения.

При необходимости изучите пример расширенной конфигурации LINSTOR, но мы рекомендуем придерживаться приведенного выше упрощенного руководства.

Дополнительные возможности для приложений, использующих хранилище LINSTOR

Размещение приложения «поближе» к данным (data locality)

В случае гиперконвергентной инфраструктуры может возникнуть задача по приоритетному размещению пода приложения на узлах, где необходимые ему данные хранилища расположены локально. Это позволит получить максимальную производительность хранилища.

Для решения этой задачи модуль linstor предоставляет специальный планировщик linstor, который учитывает размещение данных в хранилище и старается размещать под в первую очередь на тех узлах, где данные доступны локально.

Любой под, использующий тома linstor, будет автоматически настроен на использование планировщика linstor.

Перенос приложения при проблемах с узлом (storage-based fencing)

Если приложение не умеет работать в режиме высокой доступности и работает в одном экземпляре, может возникнуть задача принудительного переноса приложения с узла, на котором возникли проблемы (например, если возникли проблемы с сетевой, дисковой подсистемой и т. д.).

Модуль linstor автоматически удалит поды с узла, где возникли проблемы (с хранилищем, сетью и т. п.), и вешает дополнительный taint на него, что позволяет перезапустить поды на других исправных узлах в кластере.