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

Модуль по умолчанию выключен. Для включения добавьте в ConfigMap deckhouse:

data:
  linstorEnabled: "true"

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

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

Сам модуль не требует настройки и не имеет параметров. Однако отдельные его функции могут потребовать указания мастер-пароля.
Для того чтобы задать мастер-пароль, создайте 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. Выберите имя тега.

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

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

    vgs -o name,tags
    lvs -o name,vg_name,tags
    
  2. Добавьте пулы.

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

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

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

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

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

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

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

      vgcreate data_project /dev/nvme0n1 /dev/nvme1n1
      lvcreate -l 100%FREE -T data_project/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, но мы рекомендуем придерживаться приведенного выше упрощённого руководства.

Дополнительные возможности по настройке приложений

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

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

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

Для использования планировщика linstor, необходимо в описании Pod’а приложения указать параметр schedulerName: linstor.

Пример…

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

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

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