Найти тему
Иван Коротков

Linstor и Kubernetes за 20 минут

Оглавление

Linstor - SDS (Software Defined Storage), написанный на джаве и работающий поверх DRBD9
Из преимуществ - прост в использовании, и достаточно легко поддерживается кубером для создания PVC.

Как результат - между нодами создастся распределенное хранилище. Кубер при создании PVC будет автоматически создавать PV в классе хранения linstor'а.

ноды и pvc
ноды и pvc

Тестовая сборка была сделана на Ubuntu 20.04 + k3s 1.18.3
На ВМ был выделенный виртуальный диск для использования с Linstor

Статья - вольный перевод этой
https://vitobotta.com/2019/08/07/linstor-storage-with-kubernetes/

Подготовка машин

  • Установить убунту, выполнить подготовку хостов и потюнить их
  • С помощью fdisk создать partition table на /dev/sdb

На мастере:

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.18.3+k3s1" sh -s - server --no-deploy traefik --write-kubeconfig-mode 644
# получить токен для добавления в кластер:
cat /var/lib/rancher/k3s/server/node-token

Полученный токен вставить в команду для установки k3s.

На воркерах:

curl -sfL https://get.k3s.io | K3S_URL=https://{{MASTER_IP}}:6443 K3S_TOKEN={{TOKEN}} sh -

Настройка SDS

Установка

Установить необходимое на всех трех нодах

# добавить репозиторий
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
# установить утилиты
apt install drbd-utils drbd-dkms lvm2
# активировать модуль
modprobe drbd

установить контроллер на мастер-ноде

apt install linstor-controller linstor-satellite linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

Настройка

На контроллере выполнить:

linstor node create node1 192.168.10.1
linstor node create node2 192.168.10.2
linstor node create node3 192.168.10.3

Проверка - linstor node list

Делаем LVM

# физический том
pvcreate /dev/sdb
# VG
sudo vgcreate vg /dev/sdb
# LV
sudo lvcreate -l 100%FREE --thinpool vg/lvmthinpool

Создаем в линсторе пул хранения:

linstor storage-pool create lvmthin node1 linstor-pool vg/lvmthinpool
linstor storage-pool create lvmthin node2 linstor-pool vg/lvmthinpool
linstor storage-pool create lvmthin node3 linstor-pool vg/lvmthinpool

где linstor-pool - имя создаваемого пула хранения.
посмотреть на пулы хранения можно так:
linstor storage-pool list

CSI и Storage Class

Устанавливаем CSI:

TAG=v0.9.0
CONTROLLER_IP=
curl https://github.com/piraeusdatastore/linstor-csi/$TAG/master/examples/k8s/deploy/linstor-csi-1.17.yaml | sed "s/linstor-controller.example.com/$CONTROLLER_IP/g" | kubectl apply -f -

Добавляем Storage Class:

REPLICAS=3

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: linstor
provisioner: linstor.csi.linbit.com
parameters:
autoPlace: "$REPLICAS"
storagePool: "linstor-pool"
EOF

Тестовая нагрузка

Проверить что все ОК, можно создав тестовый PVC

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
storageClassName: linstor
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF

Чекаем что его видит кубер:

kubectl get pvc

Чекаем что его видит Linstor:

linstor volume list