Перейти к содержимому

Архитектурные решения для 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.

Каждый подчинённый кластер регистрируется в инфраструктурном кластере. Это позволяет централизованно управлять как доступом к этим кластерам, так и реализовывать концепцию масштабирования.

Вся глава Масштабирование правильна и для подчинённых кластеров - если у вас есть свободные серверы, вы буквально в пару кликов можете менять размер кластеров.

Команда Боцман