Files
talos_install/README_LONGHORN.md

7.8 KiB
Raw Permalink Blame History

Оглавление

Установка Longhorn

Longhorn - распределённое блочное хранилище для Kubernetes: тома реплицируются между узлами кластера, подключаются к подам по iSCSI и переживают отказ отдельного узла (при количестве реплик > 1).

Предварительные требования

Всё необходимое на уровне ОС уже подготовлено на этапе разворота кластера (см. основной README):

  • В образ Talos встроены расширения siderolabs/iscsi-tools и siderolabs/util-linux-tools
  • На воркерах с дополнительным диском (patch-worker-with-disk.yaml):
    • загружен модуль ядра iscsi_tcp
    • дополнительный диск /dev/sdb смонтирован в /var/lib/longhorn
    • точка монтирования проброшена в контейнер kubelet (bind mount с rshared)
Про пути в командах:

Как и в основном README, команды выполняются из директории examples/ - там лежит longhorn-values.yaml.

Создание namespace и настройка Pod Security

Talos по умолчанию включает Pod Security Admission с профилем baseline для всех namespace. Компонентам Longhorn нужны привилегированные поды (доступ к хост-устройствам, монтирование, iSCSI), поэтому namespace нужно создать заранее и явно перевести на профиль privileged - иначе admission-контроллер заблокирует запуск подов.

Создание namespace:

kubectl create namespace longhorn-system

Привязка привилегированного профиля Pod Security:

kubectl label namespace longhorn-system \
  pod-security.kubernetes.io/enforce=privileged \
  pod-security.kubernetes.io/enforce-version=latest \
  pod-security.kubernetes.io/audit=privileged \
  pod-security.kubernetes.io/warn=privileged
  • enforce=privileged - разрешает запуск привилегированных подов в namespace (без этого поды будут отклонены)
  • enforce-version=latest - использовать актуальную версию политики
  • audit=privileged и warn=privileged - отключают предупреждения и записи аудита для привилегированных подов в этом namespace

Разметка узлов хранения

В longhorn-values.yaml все компоненты Longhorn привязаны к узлам с label role: storage, а настройка createDefaultDiskLabeledNodes: true дополнительно требует label node.longhorn.io/create-default-disk=true - диск под данные будет создан только на узлах с этим label.

Посмотреть список узлов:

kubectl get nodes

Навесить label на воркеры с дополнительным диском (в тестовом кластере это 10.255.200.204-10.255.200.206):

kubectl label node <имя-узла> role=storage
kubectl label node <имя-узла> node.longhorn.io/create-default-disk=true

Команды нужно выполнить для каждого из трёх воркеров с дополнительным диском.

Такая разметка гарантирует, что данные Longhorn окажутся только на узлах с подготовленным диском /var/lib/longhorn, а не на всех воркерах подряд.

Конфигурация longhorn-values.yaml

defaultSettings:
  defaultReplicaCount: 2
  createDefaultDiskLabeledNodes: true
  defaultDataPath: /var/lib/longhorn

csi:
  attacherReplicaCount: 2
  nodeSelector:
    role: storage

persistence:
  defaultClass: true
  defaultClassReplicaCount: 2

global:
  nodeSelector:
    role: storage

longhornUI:
  nodeSelector:
    role: storage
Ключевые моменты конфигурации:
  • defaultReplicaCount: 2 - каждый том хранится в двух репликах на разных узлах; при трёх узлах хранения кластер переживает отказ одного из них
  • createDefaultDiskLabeledNodes: true - диск под данные создаётся только на узлах с label node.longhorn.io/create-default-disk=true (см. раздел выше)
  • defaultDataPath: /var/lib/longhorn - путь к данным, совпадает с точкой монтирования дополнительного диска из patch-worker-with-disk.yaml
  • persistence.defaultClass: true - StorageClass longhorn становится классом по умолчанию: PVC без явного указания storageClassName будут создаваться в Longhorn
  • nodeSelector: role: storageglobal, csi, longhornUI) - компоненты Longhorn запускаются только на размеченных узлах хранения

Установка через helm

Подключение репозитория helm и установка:

helm repo add longhorn https://charts.longhorn.io
helm repo update longhorn
helm install longhorn longhorn/longhorn --namespace longhorn-system -f longhorn-values.yaml

При необходимости зафиксировать версию чарта можно флагом --version (список версий: helm search repo longhorn/longhorn --versions).

Проверка установки

Дождаться запуска всех подов:

kubectl -n longhorn-system get pods

Все поды должны перейти в статус Running (менеджеры, CSI-компоненты и engine-образы запускаются только на узлах с label role: storage).

Проверить, что StorageClass создан и назначен по умолчанию:

kubectl get storageclass

В выводе должен появиться longhorn (default).

Проверить, что диски узлов подхвачены:

kubectl -n longhorn-system get nodes.longhorn.io

В выводе должны быть три узла хранения со статусом Ready.

Доступ к UI

UI не опубликован наружу; для быстрого доступа можно пробросить порт:

kubectl -n longhorn-system port-forward svc/longhorn-frontend 8080:80

После этого UI доступен на http://localhost:8080 - в нём видно узлы, диски, тома и статус реплик.