Архитектурные решения для baremetal
Предисловие
Платформа боцман имеет различия в архитектуре, зависимые от типа инсталляции.
Данная статья рассматривает архитектуру при установке baremetal
Как и любая платформа на базе kubernetes, боцман состоит из множества компонентов. Эти компоненты нужны для реализации различных облачных функций, которые недоступны в классических инфраструктурах
Итак, для работы кластера kubernetes нужно решить следующие задачи:
- Отказоустойчивость k8s ControlPlane
- Масштабирование кластера
- Мультитенантность kubernetes
- Персистентное, распределённое хранение данных
- Своевременное обновление ПО
- Организация доступа к ресурсам развернутым внутри кластера
Соответственно, именно на эти вопросы мы будем отвечать в этой статье.
Для начала определимся, что такое боцман. В любой инсталляции боцмана минимально существует 2 кластера k8s:
- Инфраструктурный кластер
- Подчинённый кластер
Давайте рассмотрим их более детально.
Инфраструктурный кластер
Заметка
Мы настоятельно не рекомендуем запускать рабочие нагрузки внутри инфраструктурного кластера.
Инфраструктурный кластер это кластер, который мы получаем в конце работы утилиты bootsmanctl. Именно он и является сердцем платформы. В этом кластере работает как веб-панель rancher, так и наши операторы, обеспечивающие нормальную работу ваших подчинённых кластеров.
В инфраструктурном кластере работает компонент, который называется CAPI. Вкратце, CAPI позволяет управлять жизненным циклом кластеров kubernetes. Под его управлением находятся все кластеры боцмана, в том числе и инфраструктурный. Именно благодаря CAPI мы можем декларативно управлять кластерами. Вот базовый функционал:
- Создание кластеров k8s
- Управление ControlPlane
- Управление worker узлами
- Удаление кластеров k8s
Однако сам по себе CAPI не умеет управлять инфраструктурой: ему нужны расширения, которые называются инфраструктурными провайдерами. Какое-то количество этих провайдеров написано сообществом, однако не существует качественных провайдеров для управления baremetal инфраструктурой. Изначально мы базировались на opensource компоненте BYOH, но в последствии мы переписали его на 99%.
Итак, теперь у нас есть место, через которое мы управляем инфраструктурой, и исполнительный механизм, который способен трансформировать наш заказ на изменения в реальные действия с baremetal серверами.
Этот кластер также является и центральной точкой входа во все подчинённые кластеры. Рассмотрим подробнее, какие функции он на себя берёт.
Пул свободных машин
Чтобы устанавливать новые кластеры или масштабировать существующие, мы используем концепт "свободных машин".
Это серверы с linux и установленным демоном host-agent.
Работа host-agent заключается в том, чтобы зарегистрировать свободную машину в кластере и ждать задачи от инфраструктурного кластера.
Мы можем провести аналогию с hot spare диском в дисковых массивах. Обычно он стоит без работы, но как только он понадобился - контроллер автоматически использует его.
С точки зрения инфраструктурного кластера эта сущность называется ByoHost.
Масштабирование кластера
Теперь, когда мы понимаем, что у нас есть инструмент (CAPI), работник (инфраструктурный провайдер) и ресурс (свободные машины), мы можем легко скомбинировать их для получения результата. Нужно попросить bootsman provisioning operator изменить количество машин.
Заметка
Обратите внимание: для ControlPlane возможно установить количество узлов равное 3 или 5.
Количество worker узлов всегда должно быть >=3
Мультитенантность kubernetes
Заметка
Мультитенантность — это возможность изолированно обслуживать пользователей из разных подразделений в рамках одного сервиса (одной инсталляции или развёртывания). © Microsoft
Боцман реализует мультитенантность сразу двумя путями:
- Изоляция пользователей
- Изоляция окружения
Изоляция пользователей
Изоляция пользователей реализуется благодаря следующим компонентам:
- Проекты
- Расширенный RBAC
- Сетевая изоляция cilium
Данные компоненты позволяют полностью изолировать пользователя внутри своего проекта. Подробнее о проектах можно прочитать тут
Изоляция окружения
Боцман позволяет свободно создавать неограниченное количество подчинённых кластеров, поэтому есть возможность изолировать пользователей на уровне кластера.
Хранилище данных
Для организации хранения данных внутри кластера на baremetal серверах мы используем SDS нового поколения - Longhorn.
Это потрясающая технология, которая изначально разрабатывалась как kubernetes native, подробнее о ней можно почитать тут
Своевременное обновление ПО
Этот концепт реализуется благодаря регулярно выпускаемым обновлениям bootsmanctl и механизму marketplace
Организация доступа к ресурсам, развёрнутым внутри кластера
В кластерах боцмана мы используем Nginx Ingress controller. Он устанавливается в режиме DaemonSet на всех worker узлах, что позволяет организовать внешнюю балансировку трафика, в том числе и с помощью proxy protocol.
Если у вас в инфраструктуре есть возможность использовать BGP, мы можем предложить вам использовать дополнительное решение в виде MetalLB.
Заметка
Мы не рекомендуем использовать MetalLB в режиме L2: это создаёт значительное бутылочное горлышко в инфраструктуре.
Подчинённый кластер
Подчинённый кластер наследует все решения от инфраструктурного, за исключением rancher и CAPI.
Каждый подчинённый кластер регистрируется в инфраструктурном кластере. Это позволяет централизованно управлять как доступом к этим кластерам, так и реализовывать концепцию масштабирования.
Вся глава Масштабирование правильна и для подчинённых кластеров - если у вас есть свободные серверы, вы буквально в пару кликов можете менять размер кластеров.