Находится в процессе активного развития. Функциональность может существенно измениться.

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

После включения модуля, кластер автоматически настраивается на использование 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)

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

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

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

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

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

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