Стадия жизненного цикла модуля: General Availability

Модуль поддерживает два режима работы: LVM (Thick) и LVM-thin. Каждый режим имеет свои особенности, преимущества и ограничения. См. подробнее о различиях между режимами в FAQ.

Быстрый старт

Ниже описан пример настройки модуля для создания Thick-хранилища на трёх узлах кластера: включение модулей через ModuleConfig, создание групп томов LVM на каждом узле через LVMVolumeGroup и создание LocalStorageClass для использования при создании PVC.

Включение модуля

Для корректной работы модуля sds-local-volume выполните следующие шаги:

Все команды ниже должны быть выполнены на машине с доступом к API Kubernetes и правами администратора.

  1. Включите модуль sds-node-configurator, выполнив команду ниже:

    d8 k apply -f - <<EOF
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: sds-node-configurator
    spec:
      enabled: true
      version: 1
      settings:
        enableThinProvisioning: true # Если планируете использовать LVM-thin тома
    EOF
    
  2. Дождитесь перехода модуля sds-node-configurator в состояние Ready. На этом этапе проверка подов в пространстве имён d8-sds-node-configurator не требуется.

    d8 k get modules sds-node-configurator -w
    
  3. Ознакомьтесь с доступными настройками модуля sds-local-volume перед его включением. После ознакомления включите модуль, выполнив команду ниже:

    d8 k apply -f - <<EOF
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: sds-local-volume
    spec:
      enabled: true
      version: 1
      settings:
        enableThinProvisioning: true # если планируете использовать LVM-thin тома
    EOF
    

    В результате модуль запустится с настройками по умолчанию, что приведет к созданию служебных подов компонента sds-local-volume на всех узлах кластера:

  4. Дождитесь перехода модуля sds-local-volume в состояние Ready.

    d8 k get modules sds-local-volume -w
    
  5. Убедитесь, что в пространствах имён d8-sds-local-volume и d8-sds-node-configurator все поды находятся в статусе Running или Completed. Поды должны быть запущены на всех узлах, где планируется использовать ресурсы LVM.

    d8 k -n d8-sds-local-volume get pod -owide -w
    d8 k -n d8-sds-node-configurator get pod -o wide -w
    

Подготовка узлов к созданию хранилищ

Запустите поды csi-node на выбранных узлах для корректной работы хранилищ. По умолчанию эти поды запускаются на всех узлах кластера. Проверьте их наличие командой:

d8 k -n d8-sds-local-volume get pod -owide

Размещение подов csi-node управляется специальными метками (nodeSelector), которые задаются в параметре spec.settings.dataNodes.nodeSelector модуля. Подробнее о настройке и выборе узлов для работы модуля см. в разделе Выбор узлов для работы модуля.

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

Для настройки хранилища на узлах создайте группы томов LVM с использованием ресурсов LVMVolumeGroup. В данном примере создается Thick-хранилище. Инструкции по созданию thin-хранилища см. в разделе Создание thin-хранилища.

Перед созданием ресурса LVMVolumeGroup убедитесь, что на данном узле запущен под csi-node. Для этого выполните команду:

d8 k -n d8-sds-local-volume get pod -owide

Чтобы настроить хранилище на узлах, выполните следующие действия:

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

    d8 k get bd
    

    Пример вывода:

    NAME                                           NODE       CONSUMABLE   SIZE           PATH
    dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa   worker-0   false        976762584Ki    /dev/nvme1n1
    dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd   worker-0   false        894006140416   /dev/nvme0n1p6
    dev-7e4df1ddf2a1b05a79f9481cdf56d29891a9f9d0   worker-1   false        976762584Ki    /dev/nvme1n1
    dev-b103062f879a2349a9c5f054e0366594568de68d   worker-1   false        894006140416   /dev/nvme0n1p6
    dev-53d904f18b912187ac82de29af06a34d9ae23199   worker-2   false        976762584Ki    /dev/nvme1n1
    dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1   worker-2   false        894006140416   /dev/nvme0n1p6
    
  2. Создайте ресурс LVMVolumeGroup для узла worker-0:

    d8 k apply -f - <<EOF
    apiVersion: storage.deckhouse.io/v1alpha1
    kind: LVMVolumeGroup
    metadata:
     name: "vg-1-on-worker-0" # Имя может быть любым валидным именем ресурса в Kubernetes. Это имя ресурса LVMVolumeGroup будет использовано при создании LocalStorageClass
    spec:
      type: Local
      local:
        nodeName: "worker-0"
      blockDeviceSelector:
        matchExpressions:
          - key: kubernetes.io/metadata.name
            operator: In
            values:
              - dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa
              - dev-0cfc0d07f353598e329d34f3821bed992c1ffbcd
      actualVGNameOnTheNode: "vg-1" # Имя группы томов LVM, которая будет создана из указанных блочных устройств на узле
    EOF
    
  3. Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние Ready:

    d8 k get lvg vg-1-on-worker-0 -w
    

    После перехода ресурса в состояние Ready на узле worker-0 из блочных устройств /dev/nvme1n1 и /dev/nvme0n1p6 будет создана группа томов LVM с именем vg-1.

  4. Создайте ресурс LVMVolumeGroup для узла worker-1:

    d8 k apply -f - <<EOF
    apiVersion: storage.deckhouse.io/v1alpha1
    kind: LVMVolumeGroup
    metadata:
      name: "vg-1-on-worker-1"
    spec:
      type: Local
      local:
        nodeName: "worker-1"
      blockDeviceSelector:
        matchExpressions:
          - key: kubernetes.io/metadata.name
            operator: In
            values:
              - dev-7e4df1ddf2a1b05a79f9481cdf56d29891a9f9d0
              - dev-b103062f879a2349a9c5f054e0366594568de68d
      actualVGNameOnTheNode: "vg-1"
    EOF
    
  5. Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние Ready:

    d8 k get lvg vg-1-on-worker-1 -w
    

    После перехода ресурса в состояние Ready на узле worker-1 из блочных устройств /dev/nvme1n1 и /dev/nvme0n1p6 будет создана группа томов LVM с именем vg-1.

  6. Создайте ресурс LVMVolumeGroup для узла worker-2:

    d8 k apply -f - <<EOF
    apiVersion: storage.deckhouse.io/v1alpha1
    kind: LVMVolumeGroup
    metadata:
      name: "vg-1-on-worker-2"
    spec:
      type: Local
      local:
        nodeName: "worker-2"
      blockDeviceSelector:
        matchExpressions:
          - key: kubernetes.io/metadata.name
            operator: In
            values:
              - dev-53d904f18b912187ac82de29af06a34d9ae23199
              - dev-6c5abbd549100834c6b1668c8f89fb97872ee2b1
      actualVGNameOnTheNode: "vg-1"
    EOF
    
  7. Дождитесь перехода созданного ресурса LVMVolumeGroup в состояние Ready:

    d8 k get lvg vg-1-on-worker-2 -w
    

    После перехода ресурса в состояние Ready на узле worker-2 из блочных устройств /dev/nvme1n1 и /dev/nvme0n1p6 будет создана группа томов LVM с именем vg-1.

  8. Создайте ресурс LocalStorageClass:

    Внимание: создание StorageClass для CSI-драйвера local.csi.storage.deckhouse.io пользователем запрещено.

    d8 k apply -f -<<EOF
    apiVersion: storage.deckhouse.io/v1alpha1
    kind: LocalStorageClass
    metadata:
      name: local-storage-class
    spec:
      lvm:
        lvmVolumeGroups:
          - name: vg-1-on-worker-0
          - name: vg-1-on-worker-1
          - name: vg-1-on-worker-2
        type: Thick
      reclaimPolicy: Delete
      volumeBindingMode: WaitForFirstConsumer
    EOF
    
  9. Дождитесь перехода созданного ресурса LocalStorageClass в состояние Created:

    d8 k get lsc local-storage-class -w
    
  10. Проверьте создание соответствующего StorageClass:

    d8 k get sc local-storage-class
    

После появления StorageClass с именем local-storage-class настройка модуля sds-local-volume завершена. Теперь можно создавать Persistent Volume Claim (PVC), указывая StorageClass с именем local-storage-class.