Deckhouse Virtualization Platform на bare metal

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

Включите модуль программно-определяемого хранилища sds-replicated-volume:

kubectl create -f - <<EOF
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: sds-node-configurator
spec:
  version: 1
  enabled: true
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: sds-replicated-volume
spec:
  version: 1
  enabled: true
EOF
kubectl create -f - <<EOF --- apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-node-configurator spec: version: 1 enabled: true --- apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: sds-replicated-volume spec: version: 1 enabled: true EOF

Дождитесь, пока модуль включится, для этого можете использовать следующую команду:

kubectl wait module sds-replicated-volume --for='jsonpath={.status.status}=Ready' --timeout=1200s
kubectl wait module sds-replicated-volume --for='jsonpath={.status.status}=Ready' --timeout=1200s

Объедините доступные на узлах блочные устройства в группы томов LVM. Чтобы получить доступные блочные устройства, выполните команду:

sudo d8 k get blockdevices.storage.deckhouse.io
sudo d8 k get blockdevices.storage.deckhouse.io

Чтобы объединить блочные устройства на одном узле, необходимо создать группу томов LVM с помощью ресурса LVMVolumeGroup. Для создания ресурса LVMVolumeGroup на узле выполните следующую команду, предварительно заменив имена узла и блочных устройств на свои:

sudo d8 k apply -f - <<EOF
apiVersion: storage.deckhouse.io/v1alpha1
kind: LVMVolumeGroup
metadata:
  name: "vg-on-dvp-worker"
spec:
  type: Local
  local:
    # Замените на имя своего узла, для которого создаете группу томов.
    nodeName: "dvp-worker"
  blockDeviceSelector:
    matchExpressions:
      - key: kubernetes.io/metadata.name
        operator: In
        values:
          # Замените на имена своих блочных устройств узла, для которого создаете группу томов.
          - dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa
  # Имя группы томов LVM, которая будет создана из указанных выше блочных устройств на выбранном узле.
  actualVGNameOnTheNode: "vg"
  # Раскомментируйте, если важно иметь возможность создавать Thin-пулы, детали будут раскрыты далее.
  # thinPools:
  #   - name: thin-pool-0
  #     size: 70%
EOF
sudo d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "vg-on-dvp-worker" spec: type: Local local: # Замените на имя своего узла, для которого создаете группу томов. nodeName: "dvp-worker" blockDeviceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: # Замените на имена своих блочных устройств узла, для которого создаете группу томов. - dev-ef4fb06b63d2c05fb6ee83008b55e486aa1161aa # Имя группы томов LVM, которая будет создана из указанных выше блочных устройств на выбранном узле. actualVGNameOnTheNode: "vg" # Раскомментируйте, если важно иметь возможность создавать Thin-пулы, детали будут раскрыты далее. # thinPools: # - name: thin-pool-0 # size: 70% EOF

Дождитесь, когда созданный ресурс LVMVolumeGroup перейдет в состояние Operational:

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

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

NAME             THINPOOLS   CONFIGURATION APPLIED   PHASE   NODE       SIZE       ALLOCATED SIZE   VG   AGE
vg-on-worker-0   1/1         True                    Ready   worker-0   360484Mi   30064Mi          vg   1h

Создайте пул LVM-томов:

sudo d8 k apply -f - <<EOF
 apiVersion: storage.deckhouse.io/v1alpha1
 kind: ReplicatedStoragePool
 metadata:
   name: sds-pool
 spec:
   type: LVM
   lvmVolumeGroups:
     - name: vg-on-dvp-worker
EOF
sudo d8 k apply -f - <<EOF apiVersion: storage.deckhouse.io/v1alpha1 kind: ReplicatedStoragePool metadata: name: sds-pool spec: type: LVM lvmVolumeGroups: - name: vg-on-dvp-worker EOF

Дождитесь, когда созданный ресурс ReplicatedStoragePool перейдет в состояние Completed:

sudo d8 k get rsp data -w
sudo d8 k get rsp data -w

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

NAME         PHASE       TYPE   AGE
sds-pool     Completed   LVM    87d

Создайте StorageClass:

sudo d8 k apply -f - <<EOF
 ---
 apiVersion: storage.deckhouse.io/v1alpha1
 kind: ReplicatedStorageClass
 metadata:
   name: sds-r1
 spec:
   replication: None
   storagePool: sds-pool
   reclaimPolicy: Delete
   topology: Ignored
EOF
sudo d8 k apply -f - <<EOF --- apiVersion: storage.deckhouse.io/v1alpha1 kind: ReplicatedStorageClass metadata: name: sds-r1 spec: replication: None storagePool: sds-pool reclaimPolicy: Delete topology: Ignored EOF

Проверьте что StorageClass’ы создались:

sudo d8 k get storageclass
sudo d8 k get storageclass

Установите StorageClass как используемый в кластере по умолчанию (укажите имя StorageClass):

DEFAULT_STORAGE_CLASS=replicated-storage-class
sudo d8 k patch mc global --type='json' -p='[{"op": "replace", "path": "/spec/settings/defaultClusterStorageClass", "value": "'"$DEFAULT_STORAGE_CLASS"'"}]'
DEFAULT_STORAGE_CLASS=replicated-storage-class sudo d8 k patch mc global --type='json' -p='[{"op": "replace", "path": "/spec/settings/defaultClusterStorageClass", "value": "'"$DEFAULT_STORAGE_CLASS"'"}]'