Index
Документация по установке и использованию Longhorn в кластере.
Оглавление
- Описание
- Быстрый старт
- Архитектура
- Команды
- Storage Classes
- Примеры использования
- Troubleshooting
- Ссылки
Описание
Longhorn - cloud-native distributed block storage для Kubernetes от Rancher.
Почему Longhorn?
- ✅ Совместимость с x86-64-v1 - работает на старых CPU без SSE4.2/AVX
- ✅ Простая установка - Helm chart, минимальная конфигурация
- ✅ Легковесность - меньше ресурсов чем Ceph
- ✅ Быстрая репликация - оптимизирована для Kubernetes
- ✅ Удобный UI - понятный веб-интерфейс
- ✅ Snapshot и backup - встроенная поддержка
- ✅ Production-ready - используется в production кластерах
Текущая конфигурация
- Namespace:
longhorn-system - Worker ноды: 3 (по 100 GB на каждой)
- Реплики: 3 по умолчанию
- Total usable storage: ~70 GB
- iSCSI: для подключения volumes между нодами
Naming Convention
Все namespace следуют префиксной структуре с дефисом (RFC 1123):
tech-*- Техническая инфраструктура (storage, monitoring, logging)prod-*- Production окружение приложенийdev-*- Development окружение (опционально)stage-*- Staging окружение (опционально)
Примеры:
longhorn-system- Rook-Ceph storagetech-monitoring- Prometheus, Grafanatech-logging- ELK/Loki stackprod-api-gateway- Production API Gatewayprod-backend- Production backend services
Примечание: Kubernetes требует DNS-совместимые имена (lowercase + дефис), поэтому используем - вместо _.
Быстрый старт
1. Подготовка worker нод (один раз)
Установка зависимостей через Ansible:
1 2 | |
Это установит на worker нодах: - open-iscsi - для iSCSI подключений volumes между нодами - nfs-common - для NFS поддержки - util-linux - системные утилиты
Почему iscsid? Longhorn использует iSCSI протокол для подключения volumes с одной ноды к подам на других нодах. Без iscsid volumes будут доступны только локально.
2. Установка Longhorn
1 2 | |
Эта команда:
1. Проверит наличие зависимостей
2. Создаст namespace longhorn-system
3. Установит Longhorn через Helm
4. Создаст Storage Classes
5. Дождется готовности всех компонентов
3. Проверка статуса
1 | |
Показывает: - Статус Manager, UI, CSI drivers - Список нод и их готовность - Доступные Storage Classes
4. Доступ к UI
1 | |
Откроется на http://localhost:8080
UI показывает: - 📊 Состояние нод и дисков - 💾 Список volumes и их реплики - ⚙️ Настройки и конфигурацию - 📈 Статистику использования
Команды
Все команды запускаются из директории infra/k8s/:
Управление
1 2 3 4 5 | |
Справка
1 2 | |
Storage Classes
После установки доступны два storage class:
1. longhorn - Default
- Distributed block storage
- Для баз данных, stateful приложений
- ReadWriteOnce (RWO)
- Поддержка resize и snapshot
- ReclaimPolicy: Delete (автоудаление при удалении PVC)
- 3 реплики по умолчанию
Пример PVC:
1 2 3 4 5 6 7 8 9 10 11 | |
2. longhorn-retain
- То же что и
longhorn, но с ReclaimPolicy: Retain - Данные сохраняются после удаления PVC
- Для критичных данных (backups, важные БД)
1 2 3 4 5 6 7 8 9 10 11 | |
Ограничения
⚠️ Longhorn поддерживает только RWO (ReadWriteOnce)
Для ReadWriteMany (RWX) используйте: - NFS Server поверх Longhorn volume - Отдельное решение (NFS-Ganesha, CephFS)
Примеры использования
PostgreSQL StatefulSet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
Проверка volume
1 2 3 4 5 6 7 8 | |
Архитектура
Компоненты
| Компонент | Описание | Расположение |
|---|---|---|
| Longhorn Manager | Управление volumes, реплицирование | DaemonSet на всех нодах |
| Longhorn Engine | Движок для каждого volume | Pod на каждую volume |
| CSI Driver | Интеграция с Kubernetes | DaemonSet + Deployment (по 1 реплике) |
| Longhorn UI | Веб-интерфейс управления | 1 реплика |
| Instance Manager | Управление процессами | По одному на ноду |
Storage Backend
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
- Тип: Распределенное блочное хранилище
- Расположение:
/var/lib/longhornна worker нодах - Реплики: 3 копии по умолчанию
- Snapshots: Инкрементальные снимки
- Подключение: iSCSI протокол
Отказоустойчивость
- ✅ Host-level anti-affinity - реплики на разных нодах
- ✅ Автовосстановление - при падении ноды
- ✅ Быстрая репликация - синхронизация < 1 минуты
- ✅ Backup на S3/NFS - для disaster recovery
- ⚠️ Минимум 2 ноды для работы (из 3 при 3 репликах)
Требования
Cluster:
- Kubernetes 1.28+
- Минимум 3 worker ноды
- Доступ к kubeconfig
Worker Nodes:
- ОС: Linux
- Минимум 4GB RAM на ноду
- Минимум 20GB свободного места в
/var/lib/longhorn - Пакеты:
open-iscsi,nfs-common(устанавливаются автоматически)
Инструменты:
kubectlhelmmake
Удаление
⚠️ ВНИМАНИЕ: Это удалит ВСЕ данные в Longhorn!
1 2 | |
Longhorn автоматически очистит данные с нод при удалении.
Мониторинг
После установки доступны: - Longhorn UI (http://localhost:8080 через port-forward) - Prometheus metrics endpoint - Grafana dashboards (можно импортировать официальные)
Следующие шаги
После установки storage можно настраивать: - ✅ Storage layer (Longhorn) - установлен - ⬜ Secrets management (Vault) - использует Longhorn - ⬜ Databases (PostgreSQL) - использует Longhorn - ⬜ Object Storage (MinIO/S3) - использует Longhorn - ⬜ Monitoring (Prometheus/Grafana) - ⬜ Logging (ELK/Loki)
Troubleshooting
Longhorn pods не стартуют
1 2 3 4 5 | |
Зависимости не установлены
Longhorn требует open-iscsi на worker нодах:
1 2 3 4 5 6 7 | |
Что делает iscsid? - Управляет iSCSI подключениями - Позволяет монтировать volumes с других нод - Необходим для distributed storage
Volume не создается
1 2 3 4 5 6 | |
Replica не синхронизируется
1 2 3 4 5 6 7 | |
Включить работу Longhorn на control-plane нодах в рантайме
Если кластер уже развёрнут и Longhorn установлен только на worker-ноды, можно включить поддержку control-plane без переустановки:
- Разрешить Longhorn игнорировать taint control-plane:
1 2 | |
- Добавить toleration для CSI плагина, чтобы он поставился на все ноды:
1 2 3 | |
- Добавить toleration для engine image DaemonSet (движок Longhorn на каждой ноде):
Сначала найти имя DaemonSet'а:
1 | |
Затем пропатчить его (подставь своё имя вместо engine-image-ei-XXXX):
1 2 3 | |
- Проверить, что компоненты стоят на всех нодах:
1 2 3 | |
Для новых установок все эти настройки уже зашиты в charts/longhorn/values.yaml, поэтому достаточно обычного make longhorn-install-all.
Manager pods падают на control-plane
Это нормально если зависимости установлены только на workers:
1 2 3 4 | |
Longhorn manager запускается на всех нодах, но storage используется только на workers.