Yandex BareMetal
Наша команда делает новый сервис для аренды выделенных физических серверов в рамках экосистемы Yandex Cloud.
Исторически клиентские сервисы в Yandex Cloud строились на базе технологий виртуализации. Это даёт набор преимуществ:
- виртуальная машина поднимается за секунды;
- пользователю доступна очень гибкая настройка: явно можно указать необходимое количество ресурсов (vCPU и оперативной памяти);
- из коробки решается задача отказоустойчивости и масштабирования.
При этом есть класс специфических задач, которые клиенты хотят решать на железных серверах. Например:
- утилизация физических ресурсов сервера без дополнительных накладных расходов;
- возможность максимально дешево запускать ПО, которое не разрабатывалось как cloud-native решение;
- использование собственной системы виртуализации;
- обеспечение L2-связности между серверами.
Yandex BareMetal позволяет клиентам решать все эти задачи и при этом иметь полный доступ к экосистеме сервисов и продуктов Yandex Cloud.
Какие задачи мы решаем
Быстрая выдача сервера
Выдача сервера за 10 минут — это стандарт индустрии BareMetal, который требует от команды следующих шагов:
- установить сервера нужной конфигурации в стойки в ДЦ;
- собрать сетевую фабрику, поддерживающую всевозможные клиентские сценарии;
- с помощью автоматического тестирования убедиться в их исправности;
- написать автоматику наливки этих серверов;
- написать автоматику настройки клиентских сетей;
- написать автоматику карантина и безопасной очистки физических ресурсов.
И вот тогда мы можем за считанные минуты по требованию клиента:
- найти сервер нужной конфигурации, налить его предподготовленной операционной системой;
- или дать клиенту возможность поставить свой собственный образ;
- разметить диски и собрать их по необходимости в RAID-ы для отказоустойчивости;
- привезти сетевые настройки на сервер и коммутаторы;
- выдать доступы по SSH и iKVM.
Метрики и мониторинг
После получения доступа к своему серверу клиенту понадобится следить за его состоянием и оперативно реагировать на возможные аппаратные проблемы. Для этого мы разрабатываем удобные инструменты мониторинга, которые позволяют:
- Следить за сетевыми метриками по пакетам/трафику/ширине полосы как для публичных, так и для приватных интерфейсов;
- Контролировать серверные метрики оборудования: температуру процессора, скорость вращения кулеров, скорость чтения/записи с диска и многое другое.
Ближайшая задача — сделать отдельный агент для мониторинга и нотификаций, который клиенты могли бы устанавливать на свои сервера, чтобы мы могли в полуавтоматическом режиме отслеживать состояние метрик. Таким образом, наша автоматика сможет обнаружить проблемы с оборудованием еще до того, как их заметит пользователь, а наша поддержка предложит клиенту варианты обслуживания для замены вышедших из строя дисков, памяти или другого оборудования в серверах.
Сетевые сценарии
Мы предлагаем клиентам всевозможные сценарии:
- выделение приватных и публичных подсетей;
- выделение изолированных L2-сегментов;
- возможность включить маршрутизацию через наш DHCP-сервер;
- интерконнект в облачные сети (VPC), чтобы иметь доступ к другим своим ресурсам в Yandex Cloud без необходимости пускать трафик в публичный интернет.
И тут у нас впереди еще огромное количество продуктовой разработки:
- cloud-init для настройки сети в любых образах;
- всевозможные сценарии вокруг блоков публичных адресов;
- поддержка IPv6;
- DHCP для докер-контейнеров;
- Load-балансеры;
- файрволы;
- интерконнект в on-prem инсталляцию клиента.
Как мы работаем
У нас распределенная команда в Москве, Петербурге и еще пяти городах. Несколько раз в год мы собираемся вместе, чтобы поработать бок о бок с коллегами, похакатонить перед важным этапами, посетить вместе конференцию, сходить в театр бар.
Мы формулируем свои планы на год вперед, а далее разбиваем их на более конкретные трехмесячные этапы. После этого декомпозируем их до гранулярных и понятных задач, которые делаем двухнедельными спринтами. В конце каждого спринта мы проводим внутреннее ревью, а раз в месяц делаем полноценное продуктовое демо, где показываем всем желающим наш инкремент.
В нашем проекте разработчики не просто «пишут код», у каждого члена команды есть возможность взять на себя новую роль и дополнительные функции:
- предварительные исследования, разработка дизайн-документов и ревью выбранного подхода;
- проектирование, реализация, поддержка сквозных фичей от начала и до конца;
- обязательные практики CI/CD и ревью кода;
- регулярные дежурства для более быстрого и качественного решения клиентских проблем.
Технологии
Сейчас мы пишем на Go: он отлично подходит для реализации бизнес-логики, прост и имеет встроенную асинхронность. Здорово, если вы знаете Go, а если нет, но готовы пробовать — супер, мы научим и поможем набраться экспертного опыта.
Мы подбираем удобные инструменты для решения наших задач, вот далеко не полный их список:
- Postgres: для хранения мета-информации нашего контрол-плейна;
- K8s: для развёртывания собственных инфраструктурных сервисов;
- Temporal: для оркестрации работы большого количества микросервисов и решения сложных продуктовых задач;
- Annet: для автоматизации настройки сетевого оборудования;
- Yandex Data Transfer: для поставки данных для аналитики и создания бекапов базы.