Архитектура инсталлятора Боцман
Комплект поставки платформы Боцман:
-
Дистрибутив
-
Инсталлятор -
bootsmanctlбинарный файл -
byoh-agent-*.debиbyoh-agent-*.el7.x86_64.rpm. Агент устанавливается при baremetal инсталляции на выделенных под эту инсталляцию нодах для последующего конфигурирования и обнаружения
-
-
Лицензия - предоставляется вендором
-
Доступ к репозиторию с пакетами - предоставляется вендором
-
Документация
Описание архитектуры
Инсталлятор - bootsmanctl представляет из себя бинарный файл - ELF 64-bit LSB executable, x86-64, предназначенный для запуска под ОС GNU\Linux.
При запуске данного файла создается контейнер на локальной машине с ролью АРМ, в котором запускается kubernetes с необходимыми операторами и приложениями для последующей установки кластера.
Имя контейнера формируется из двух частей:
-
Название кластера, заданное аргументом запуска инсталлятора;
-
Постфикс control-plane.
При возникновении ошибок, рекомендуется сначала зайти в данный контейнер и получить информацию о состоянии компонентов. Подробнее в разделе “Поиск и устранение неисправностей при установке”.
Инсталлятор поддерживает 2 типа установки:
-
Установка в поддерживаемый гипервизор;
-
Установка baremetal.
При установке в любой из поддерживаемых гипервизоров: vSphere, VK Cloud, Yandex Cloud, установщику необходим доступ до среды и он сам выделит необходимые вычислительные ресурсы в автоматическом режиме.
При baremetal установке - ресурсы выделяются самостоятельно и устанавливается специальный byoh-агент. Baremetal установку можно проводить как на физическое оборудование, так и в средах виртуализации, если имеются причины не использовать режим поддерживаемого гипервизора. Например:
-
Внутренние политики компании по ИБ или учету и утилизации ресурсов;
-
Не поддерживаемый cloud provider/гипервизор;
-
Эксперименты, связанные с установкой baremetal.
Архитектурные решения для 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.
Каждый подчинённый кластер регистрируется в инфраструктурном кластере. Это позволяет централизованно управлять как доступом к этим кластерам, так и реализовывать концепцию масштабирования.
Вся глава Масштабирование правильна и для подчинённых кластеров - если у вас есть свободные серверы, вы буквально в пару кликов можете менять размер кластеров.