Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Архитектура

1. Архитектура и подход

Для реализации системы хранения на базе Longhorn разработаны два ключевых компонента:

  • nova-apps-operator: оператор, управляющий полным жизненным циклом кластера Longhorn. Он выполняет следующие функции:

    • Установка: автоматическое развертывание всех необходимых компонентов Longhorn в кластере.

    • Удаление: безопасное и полное удаление Longhorn и связанных ресурсов.

    • Масштабирование: добавление или удаление узлов для адаптации к изменяющимся требованиям хранения.

    • Изменение конфигурации: возможность обновления параметров кластера Longhorn, таких как Storage-пулы и клиентские узлы, с учетом текущих потребностей.

  • nova-storage-agent: агент, запускаемый на каждом узле кластера. Он взаимодействует с API Kubernetes для управления блочными устройствами и осуществляет конфигурацию LVM в соответствии с заданными параметрами. Поддерживаемый функционал включает:

    • Создание LVM (Logical Volume Manager): автоматическое создание логических томов.

    • Удаление LVM: безопасное удаление ненужных томов.

    • Изменение размера LVM: адаптивная настройка размеров томов в зависимости от потребностей хранения.

1.1. Автоматизация

Компоненты nova-apps-operator и nova-storage-agent устанавливаются автоматически при развертывании кластера Nova. Настройка конфигурации локальных дисков, используемых Longhorn, не требует ручного вмешательства. Все задачи по управлению дисками и LVM выполняются встроенными сервисами

1.2. Архитектурное разделение узлов

Решение включает четкое разделение узлов на две категории:

  • Client-узлы: предназначены для запуска сервисов, требующих постоянного хранилища (Persistent Volume). На этих узлах развернут весь набор компонентов Longhorn, но отключена возможность выделения дисков для хранения. Они работают как клиенты для получения данных из Longhorn.

  • Storage-узлы: используются для конфигурации дисков, предоставляющих ресурсы Persistent Volume в Longhorn. С этих узлов происходит выделение пространства для хранилища. При необходимости storage-узлы также могут выполнять функции client-узлов, запуская пользовательские сервисы для более эффективного использования ресурсов.

На данный момент поддерживаются только диски v1 в режиме filesystem, однако создание дисков с другой конфигурацией не ограничивается.

Архитектура Longhorn

2. Принцип работы

После установки платформы в систему конфигурируется и запускается nova-storage-agent, который играет ключевую роль в управлении хранилищем. Агент имеет строго ограниченные права доступа к API Kubernetes, что обеспечивает безопасность и изоляцию выполняемых операций. Для взаимодействия с кластером Kubernetes используется специально сгенерированный KUBECONFIG, предоставляющий агенту только необходимые разрешения.

Вся конфигурация nova-storage-agent хранится в директории /etc/nova-storage-agent/:

  • config.env - основной конфигурационный файл;

  • nova-storage-agent.conf - KUBECONFIG;

  • pki/ - директория для хрнения сертификатов.

nova-apps-operator устанавливается автоматически, начиная с версии 5.1.0. После его установки в namespace nova-apps-operator создается deployment nova-apps-operator-controller-manager, который выполняет все необходимые настройки для интеграции nova-apps-operator с nova-storage-agent.

Хотя установка Longhorn выполняется с использованием nova-apps-operator, общий архитектурный подход к управлению модулями остается неизменным. Конфигурационные данные для Longhorn хранятся в репозитории Gitea, что позволяет централизованно управлять состоянием хранилища. Оператор динамически обновляет kustomization в зависимости от пользовательских параметров, внося изменения перед их применением и обеспечивая автоматическую настройку всех компонентов.

Процесс выглядит следующим образом:

  1. Пользователь создает конфигурацию NodeVolumeConfig, которая определяет параметры томов и блочных устройств, необходимые для пула хранения.

  2. Затем пользователь определяет и передает конфигурацию LonghornClusterConfig, включая настройки Storage-пулов и клиентских узлов.

  3. nova-apps-operator применяет изменения в kustomization, обновляя конфигурацию в соответствии с полученными параметрами.

  4. Оператор устанавливает обновленную kustomization в кластер, интегрируя компоненты с Longhorn.

  5. Система Flux, отслеживая изменения в репозитории Gitea, автоматически подтягивает и применяет все манифесты, поддерживая синхронизацию состояния платформы с репозиторием.

Таким образом, весь процесс установки и конфигурации Longhorn автоматизирован. Оператор берет на себя выполнение сложных операций, упрощая управление хранилищем и обеспечивая согласованность конфигурации с репозиторием.

Как упоминалось ранее, также были реализованы инструменты для упрощения работы с Longhorn, что позволяет управлять кластером стандартными методами:

  • UI - после создания кластера Longhor, будет создан ingress nova-longhorn-ui.<dnsBaseDomain>

  • Kubernetes Custom resources

3. Функциональность

3.1. LonghornClusterConfig

LonghornClusterConfig предоставляет гибкие возможности для управления кластером Longhorn с использованием манифестов Kubernetes. Основные функции включают:

  • Создание кластера Longhorn: Автоматическая установка и конфигурация всех необходимых компонентов Longhorn, включая развертывание служб управления хранилищем и агентов узлов.

  • Удаление кластера Longhorn: Полное удаление всех ресурсов Longhorn из кластера Kubernetes с корректной очисткой и деинициализацией связанных объектов.

  • Изменение конфигурации кластера:

    • Добавление и удаление клиентских узлов (clientNodes): Гибкое управление клиентскими узлами для увеличения или уменьшения доступных вычислительных ресурсов, которые подключаются к Longhorn для использования хранилища.

    • Добавление и удаление StoragePool: Динамическое управление пулами хранения, включая добавление новых пулов для расширения пространства хранения или удаление ненужных пулов, с возможностью перераспределения данных для минимизации простоя.

3.2. NodeVolumeConfig

NodeVolumeConfig управляет блочными устройствами и их конфигурацией, обеспечивая эффективное использование LVM для Longhorn. Основные функции, предоставляемые данным компонентом, включают:

  • Создание LVM устройств: Автоматическое создание логических томов с учетом спецификаций для работы с Longhorn, включая конфигурацию устройств и файловых систем.

  • Удаление LVM устройств: Удаление ненужных LVM устройств с соблюдением процедур безопасности данных и очисткой соответствующих записей.

  • Увеличение размера LVM устройства: Расширение существующих LVM томов для увеличения доступного пространства без прерывания работы сервисов, с обновлением файловой системы для использования нового объема.

  • Актуализация fstab: Обновление таблицы монтирования (fstab) для обеспечения надежного монтирования LVM устройств при перезагрузке системы, что гарантирует доступность хранилища Longhorn.

  • Управление директориями для монтирования LVM устройств: Создание, обновление и удаление точек монтирования для LVM устройств, оптимизированных для использования с Longhorn, с автоматическим управлением конфигурацией и синхронизацией с настройками Longhorn.

После установки кластера Longhorn автоматически создается стандартный StorageClass longhorn-storage-single-replica. Следует отметить, что этот StorageClass создает тома без репликации. Если требуется создать Persistent Volumes, которые будут работать в режиме высокой доступности, а также использовать нестадарнтные параметры, необходимо создать собственный StorageClass.