7.8 KiB
Оглавление
Установка 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- диск под данные создаётся только на узлах с labelnode.longhorn.io/create-default-disk=true(см. раздел выше)defaultDataPath: /var/lib/longhorn- путь к данным, совпадает с точкой монтирования дополнительного диска изpatch-worker-with-disk.yamlpersistence.defaultClass: true- StorageClasslonghornстановится классом по умолчанию: PVC без явного указанияstorageClassNameбудут создаваться в LonghornnodeSelector: role: storage(вglobal,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 - в нём видно узлы, диски, тома и статус реплик.