Привет, Хабр! Мы — команда Cozystack, open-source платформы для построения облаков на своём железе. Хотим рассказать, почему мы решили целиться в направление игровых серверов и что из этого вышло.
Что такое Cozystack
Cozystack — это платформа, которая превращает обычные серверы в полноценное облако. Проект входит в CNCF Sandbox, распространяется под открытой лицензией Apache 2.0 и разворачивается на bare-metal серверах.
Из коробки платформа предоставляет более 20 managed-сервисов: базы данных (PostgreSQL, MariaDB, MongoDB и др.), очереди сообщений (Kafka, RabbitMQ), кэширование (Redis), S3-хранилище, виртуальные машины, Kubernetes-кластеры, сети и балансировщики. Всё работает напрямую на железе — без лишних прослоек виртуализации.

Почему игровые серверы
Мы провели небольшое исследование и увидели устойчивый спрос: хостинг-провайдеры и игровые сообщества ищут альтернативы с предсказуемой производительностью, без привязки к конкретному провайдеру и без сложных лицензий.
Игровые серверы — одна из самых требовательных нагрузок: задержка должна быть минимальной, нагрузка скачет непредсказуемо, а серверы должны быть надёжно изолированы друг от друга. Именно тот сценарий, под который Cozystack подходит хорошо.
Кто хостил игровые серверы в облаке, знает проблему: noisy neighbors, непредсказуемый jitter, спайки латентности. Виртуализация добавляет слой, который в бизнес-приложениях незаметен, а в играх чувствуется сразу. Cozystack работает на bare metal — сервер получает выделенные ресурсы, сетевые пакеты обрабатываются максимально близко к железу, а данные реплицируются между нодами, так что потеря одного сервера не означает потерю игрового мира.
Посмотрели на то, что уже есть в платформе, и поняли: большая часть инфраструктуры готова. S3 — для хранения карт и ресурсов. Базы данных — для данных игроков и статистики. Redis — для сессий. Очереди сообщений — для межсерверного общения. Балансировщики, VPN, бэкапы по расписанию. Оставалось добавить сами игры.
Как это устроено
В Cozystack есть механизм external-apps — подключение внешних репозиториев с приложениями. После релиза v1.0 он был серьёзно переработан: платформа перешла на package-based архитектуру с ресурсами Package и PackageSource, которыми управляет cozystack-operator. По сути это работает как apt в Debian, но для Kubernetes:
Приложения упаковываются как Helm-чарты и публикуются в виде OCI-артефактов
Каждое приложение описывается через ApplicationDefinition — CRD, который автоматически появляется в дашборде
Пользователь разворачивает сервер через UI или API — так же, как любой другой managed-сервис
Платформа управляет жизненным циклом: обновления, бэкапы, мониторинг
Любой может собрать свой каталог приложений и подключить к Cozystack, не трогая ядро.
Cozylex: первая реализация
Первый шаг — репозиторий cozylex, подготовленный нашим разработчиком Aleksei Sviridkin, с реализацией managed Minecraft-сервера:
MinecraftServer — CRD для PaperMC-серверов с автообновлением, бэкапами и лимитами ресурсов
MinecraftPlugin — CRD для установки плагинов из Hangar с автообновлением
Плагины привязываются к серверам через label selectors — декларативно
Подключение к кластеру — пара минут, после чего Minecraft появляется в Marketplace рядом с PostgreSQL и Redis.
Что дальше
Планируем расширить подход и оформить это в отдельное направление — Game Server Edition. В ближайших планах — принять Minecraft-сервер в качестве официального примера подключаемого приложения и обновить документацию. Дальше — Counter-Strike, Rust, FiveM, Factorio и другие.
Итого
Игровые серверы — хороший стресс-тест для платформы. Если она стабильно держит нагрузку с жёсткими требованиями к задержке и I/O — справится с чем угодно.
Сама архитектура Cozystack позволяет добавлять новые типы сервисов, не переизобретая инфраструктуру. Всё, что нужно для работы — бэкапы, мониторинг, сеть, хранилище — платформа предоставляет из коробки.
Будем рады контрибьюторам. Механизм external-apps позволяет добавлять приложения, не разбираясь в ядре платформы — достаточно знать Helm и Kubernetes.
Ссылки:
