Игровые серверы на Cozystack: не первоапрельская шутка

Автор: Timur Tukaev (Ænix)

привет, мир! Мы — команда, стоящая за Cozystack, платформой с открытым исходным кодом для построения облаков на собственном оборудовании. Мы хотим рассказать, почему решили нацелиться на нишу игровых серверов и что из этого вышло.

Панель управления Cozystack с маркетплейсом управляемых игровых серверов

Что такое Cozystack

Cozystack — это платформа, которая превращает обычные серверы в полноценное облако. Проект входит в CNCF Sandbox, распространяется под лицензией Apache 2.0 и разворачивается на серверах bare-metal.

Из коробки платформа предоставляет более 20 управляемых сервисов: базы данных (PostgreSQL, MariaDB, MongoDB и другие), очереди сообщений (Kafka, RabbitMQ), кеширование (Redis), хранилище S3, виртуальные машины, кластеры Kubernetes, сеть и балансировщики нагрузки. Всё работает непосредственно на оборудовании, без дополнительных слоёв виртуализации.

Почему игровые серверы

Мы провели исследование и увидели устойчивый спрос: хостинг-провайдеры и игровые сообщества ищут альтернативы с предсказуемой производительностью, без привязки к конкретному провайдеру и без сложного лицензирования.

Игровые серверы — одна из самых требовательных рабочих нагрузок: задержки должны быть минимальными, нагрузка непредсказуемо колеблется, а серверы должны быть надёжно изолированы друг от друга. Именно для такого сценария Cozystack хорошо подходит.

Каждый, кто размещал игровые серверы в облаке, знает эту проблему: шумные соседи, непредсказуемый джиттер и всплески задержек. Виртуализация добавляет слой, незаметный в бизнес-приложениях, но сразу ощутимый в играх. Cozystack работает на bare metal: сервер получает выделенные ресурсы, сетевые пакеты обрабатываются максимально близко к оборудованию, а данные реплицируются между узлами, поэтому потеря одного сервера не означает потерю игрового мира.

Мы посмотрели, что уже есть в платформе, и поняли, что большая часть инфраструктуры готова. S3 для карт и ассетов. Базы данных для данных игроков и статистики. Redis для сессий. Очереди сообщений для взаимодействия между серверами. Балансировщики нагрузки, VPN, резервное копирование по расписанию. Оставалось только добавить сами игры.

Как это работает

В Cozystack есть механизм external-apps для подключения внешних репозиториев приложений. После релиза v1.0 он был существенно переработан: платформа перешла на архитектуру на основе пакетов с ресурсами Package и PackageSource, которыми управляет cozystack-operator. По сути, это работает как apt в Debian, но для Kubernetes:

  • Приложения упаковываются в Helm-чарты и публикуются как OCI-артефакты.
  • Каждое приложение описывается через ApplicationDefinition — CRD, который автоматически появляется в панели управления.
  • Пользователи разворачивают сервер через UI или API, как любой другой управляемый сервис.
  • Платформа управляет жизненным циклом: обновления, резервные копии и мониторинг.

Любой может собрать собственный каталог приложений и подключить его к Cozystack, не затрагивая ядро.

Cozylex: первая реализация

Первым шагом стал репозиторий cozylex, подготовленный нашим разработчиком Aleksei Sviridkin, который реализует управляемый Minecraft-сервер:

  • MinecraftServer — CRD для серверов PaperMC с автоматическими обновлениями, резервными копиями и ограничениями ресурсов.
  • MinecraftPlugin — CRD для установки плагинов из Hangar с автоматическими обновлениями.
  • Плагины подключаются к серверам через селекторы меток, декларативно.

Подключение к кластеру занимает пару минут, после чего Minecraft появляется в маркетплейсе рядом с PostgreSQL и Redis.

Что дальше

Мы планируем развивать этот подход и превратить его в отдельное направление — Game Server Edition. В ближайшее время мы планируем принять Minecraft-сервер как официальный пример подключаемого приложения и обновить документацию. Далее — Counter-Strike, Rust, FiveM, Factorio и другие.

Итог

Игровые серверы — хороший стресс-тест для платформы. Если она надёжно справляется с рабочей нагрузкой со строгими требованиями к задержкам и I/O, она справится с чем угодно.

Архитектура Cozystack позволяет добавлять новые типы сервисов, не изобретая инфраструктуру заново. Всё необходимое для работы — резервные копии, мониторинг, сеть и хранилище — предоставляется из коробки.

Мы приветствуем контрибьюторов. Механизм external-apps позволяет добавлять приложения, не разбираясь в ядре платформы; достаточно знать Helm и Kubernetes.

Ссылки