- Agones, создаем многопользовательский игровой сервер. Архитектура и установка
- Описание проекта
- Архитектура, основные элементы
- Установка
- Запуск GameServer
- Вносим изменения в GameServer
- Запускаем сервер локально
- Все, что нужно для сборки игрового сервера на Linux
- Требования к построению игрового сервера
- Сборка игрового сервера на Linux
- Создание сервера Minecraft
- Другие дистрибутивы
- Загрузите программное обеспечение сервера Minecraft
- Подключение к серверу Minecraft
- Создание игрового сервера Steam
- SteamCMD
- Подключение к серверам
- Другие Методы
Agones, создаем многопользовательский игровой сервер. Архитектура и установка
Agones (от др.-греч. agōn — «соревнование») позволяет развернуть кластер игрового сервера используя Kubernetes с возможностью Auto-Scaling. Этот open-source проект был создан в 2018 году, уже набрал 2500 звезд, был на Google I/O 2019, и на Хабре, к великому удивлению, еще не был упомянут. В топике описан краткий экскурс в архитектуру и инструкция по запуску тестового сервера на локальной машине. Если интересно, добро пожаловать под кат, вперед!
Описание проекта
Agones представляет собой Custom Resource (расширение Kubernetes API).
Проект в действительности требует большего внимания, так как позволяет запускать единичный игровой сервер (GameServer) или же целый «флот» серверов (Fleets) посредством конфигурационных yaml файлов, через Agones API. В свою очередь, каждый сервер дает оповещения о его жизненном цикле (GameServer lifecycles), описывая текущий статус (health checking, connection information). Сервера в кластере имеют возможность автоматического масштабирования (Fleet Autoscaling), которые интегрированы с базовыми возможностями Kubernetes. В дополнение, есть вывод статистики на панели (dashboard) с помощью Prometheus, Grafana или Stackdriver, экспортируются метрики посредством OpenCensus, что позволяет добавить собственный экспортер. Пример dashboard’a в Stackdriver:
Архитектура, основные элементы
Сам по себе Agones берет на себя задачу запуска, автоматического расширения и хостинга игровых серверов используя в основе Kubernetes. Это позволяет сосредоточиться на разработке самого сервера многопользовательской игры, вместо разработки ее инфраструктуры и дальнейшей поддержки. Можно использовать любой игровой сервер, который может быть запущен на linux, причем он может быть написан на любом языке программирования.
Agones Kubernetes API делится на три основных пакета (packages), в каждом из которых находятся ресурсы: agones.dev (GameServer, GameServerSet, Fleet), allocation.agones.dev (GameServerAllocation), autoscaling.agones.dev (FleetAutoscaler). Как и в других ресурсах Kubernetes для их запуска используется yaml файлы.
Краткое описание каждого ресурса:
- GameServer — создает некий шаблон, который позволяет использовать обычные Pod параметры, с некоторыми дополнениями, такие как hostPort и containerPort для игрового сервера. Agones SDK предоставляет дополнительный контейнер «помощник» (sidecar), с которым GameServer в процессе будет постоянно общаться
- GameServerSet — структура данных для нескольких GameServer, очень схоже с отношением между Depoyment и ReplicaSet
- Fleet — создает несколько готовых GameServer, используется GameServerAllocation для распределения ресурсов
- GameServerAllocation — запрашивает GameServer из Fleet для использования и помечает, что он готов для использования игроками, благодаря этому GameServer не будет автоматически удален
- FleetAutoscaler — автоматически расширяет или, наоборот, уменьшает количество серверов во Fleet
Диаграмма (отсюда) показывает жизненный цикл GameServer ресурса:
Фиолетовыми стрелками отмечена работа Agones SDK, красным — API пользователя, синим — контроллер игрового сервера, желтым — контроллер приложения.
Установка
В данном и последующих разделах используются команды с инструкции на официальном сайте, с некоторыми дополнениями. Рекомендуется использовать Kubernetes версии 1.12 (протестировано разработчиками). Для теста на локальном компьютере можно использовать minikube, который потребует kubectl и гипервизор (Hyper-V или VirtualBox) поддерживаемый операционной системой.
Для установки кластера и Agones необходимо запустить следующие команды:
Последняя команда скачивает конфигурационный файл Agones создающий Custom Resource Definitions (CRD) через Kubernetes API.
Запуск GameServer
Теперь можно запустить в кластере UDP сервер используя готовый тестовый сервер из примеров, который будет просто отвечать на посланный к нему запрос:
Для подтверждения того, что сервер работает можно использовать NetCat, для linux программа обычно идет в поставке с системой, для windows её нужно скачать, к примеру здесь. NetCat нужно запустить с параметром -u (UDP запрос), указывая адрес minikube (лучше скопировать адрес с команды minikube ip ) и активный порт GameServer:
Если после запуска команды в консоли появится ответ «ACK: hello», то сервер работает, его можно выключить следующей командой, которая инициализирует :
Статус сервера проверяется командой kubectl describe gameserver , он должен поменяться на Shutdown.
Вносим изменения в GameServer
Используя предыдущий пример изменим ответ сервера. Для начала скопируем репозиторий проекта:
Из корневой папки проекта запустим следующее, чтобы создать docker image и сохранить его в minikube. Для windows предварительно нужно запустить minikube docker-env | Invoke-Expression , для linux eval $(minikube docker-env) . Это позволит создавать docker images напрямую в minikube.
Создадим docker image:
Эта команда может занять некоторое время, так как весь репозиторий проекта будет копироваться в image. Этого можно избежать, если в директории оставить только папку sdks, файл main.go и Dockerfile.
Далее в examples\simple-udp\gameserver.yaml изменим строку 28 на image: agones-go:modified и создадим новый GameServer:
Проверим изменения и выключим сервер:
Если после запуска команд в консоли появится ответ «ACKNOWLEDGED: hello», то внесенные изменения прошли успешно.
Запускаем сервер локально
Итерировать изменения для удобной разработки можно и без Kubernetes, используя только Agones SDK. Во время работы игрового сервера SDK общается через TCP с маленьким gRPC сервером, который Agones запускает в контейнере под тем же namespace. Такой контейнер в Kubernetes называется sidecar. Поэтому, для локальной разработки необходимо запустить процесс SDK. Для этого потребуется запустить его исходный файл с параметром -local , который включает режим ‘local mode’. Этот режим говорит процессу быть в пассивном режиме и никуда не подсоединяться, только лишь выводить логи в консоль, чтобы можно было видеть, что делает SDK во время работы игрового сервера.
Скачать последний agonessdk-server можно в релизах официального репозитория проекта. По умолчанию, после запуска SDK сервера создается болванка конфигурации GameServer, которая используется для GameServer() и WatchGameServer() SDK запросов. При запуске можно указать и собственный конфигурационный файл в формате yaml или json, для этого потребуется параметр -file или его сокращенная версия -f вместе с параметром -local .
Источник
Все, что нужно для сборки игрового сервера на Linux
С самого начала игры почти всегда было веселее с несколькими игроками. Начиная с Atari 2600 и игровых автоматов, многопользовательский геймплей процветал. Когда наступил век Интернета, удаленный мультиплеер стал возможен с появлением игровых серверов.
В современных играх можно не только подключаться к серверам, но даже запускать их. Будь то сервер Minecraft , игра Counter-Strike или любое из множества игр, обычно есть способ запустить игровой сервер. Хотя игры для Linux могут показаться противоположными, существует множество игр, изначально доступных для Linux .
Узнайте обо всем, что вам нужно для создания игрового сервера в Linux.
Требования к построению игрового сервера
Существует заблуждение, что создание игрового сервера требует мощного оборудования. Наоборот, вам не нужно высококлассное оборудование. Однако компьютеры с низкими характеристиками, скорее всего, не дадут оптимальной производительности. Так что тот старый нетбук, который у вас лежит, вероятно, не лучший выбор.
Хотя создание игрового сервера в Linux не очень сложно, оно требует некоторого знакомства с сетью и компьютеров. То, что вы не знаете, вы можете посмотреть вверх.
Сборка игрового сервера на Linux
Создание сервера Minecraft
Настройка сервера Minecraft требует серверного программного обеспечения от Mojang. К счастью, это бесплатно скачать. Сервер Minecraft под Linux должен нормально функционировать как в 32-, так и в 64-битных версиях Linux. Тем не менее, Minecraft Gamepedia действительно предлагает, чтобы 64-битные итерации могли предложить увеличенную производительность.
Нам понадобится Java для запуска сервера Minecraft . Linux более совместим большим количеством программного обеспечения большим количеством с установленной Java. Чтобы проверить версию Java, введите команду
Если выполнение этой команды возвращает сообщение, похожее на «Java not found», вам необходимо установить его. Вы можете установить Java на Linux несколькими способами. Самым простым в Ubuntu является использование apt-get.
Перед установкой Java обновите индекс пакета:
Затем установите Java с помощью следующей команды. Он устанавливает Java Development Kit по умолчанию (JDK):
Вы можете попробовать OpenJDK, но пользователи сообщают о большем успехе с официальной установкой Oracle Java.
Ubuntu
Если вы используете Ubuntu, вам может потребоваться запустить следующие установщики пакетов, чтобы вы могли использовать
Затем добавьте обновление списка источников, добавьте PPA и, наконец, установите Java:
После добавления PPA выполните обновление:
После завершения обновления установите Java через командную строку:
Теперь у вас должна быть установлена Java.
Debian
В дистрибутивах на основе Debian установка Java немного отличается. Вам нужно сканировать несвободные репозитории. Для этого добавьте non-free в файл /ect/apt/sources.list.
Фактический URL, к которому вы добавите это, будет отличаться. Например, он может читать
Поэтому новый URL будет:
Как только вы добавили несвободные, обновите список источников:
Чтобы установить Java, запустите:
Arch Linux
Arch Linux ARMv7
На Arch Linux ARMv7 лучшим способом является установка Java из Oracle, скачайте здесь . Извлеките этот файл в / usr / lib / jvm и переключите Java по умолчанию на:
Gentoo
Если вы используете Gentoo, просто запустите:
Другие дистрибутивы
Там всегда метод загрузки. Oracle предоставляет пакеты загрузки для Java, которые совместимы с большинством дистрибутивов. Доступны как 32-, так и 64-битные пакеты.
Загрузите программное обеспечение сервера Minecraft
Создайте каталог для вашего сервера Minecraft и измените каталог на него. Дайте ему имя («майнкрафт» — хороший выбор), затем перейдите в этот каталог.
Затем загрузите последнюю версию программного обеспечения сервера Minecraft :
Также можно загрузить последнюю версию программного обеспечения сервера Minecraft по этой ссылке. Переместите JAR в нужную папку Minecraft . Перейдите в каталог, если вы этого еще не сделали.
Наконец, запустите следующее:
Однако установить не удастся. Мы должны сначала согласиться с лицензией Eula. Войти:
Откроется файл eula.txt. Просто измените:
Введите команду еще раз:
Подключение к серверу Minecraft
Теперь вы можете подключиться к только что установленному серверу Minecraft , запустив Minecraft . Выберите Мультиплеер. Затем дайте вашему серверу имя. Наконец, добавьте адрес машины или вашего локального ПК. Это будет IP и порт. По умолчанию порт Minecraft использует 25565. Таким образом, адрес сервера будет [IP-адрес]: 25565. После этого просто нажмите Готово .
Теперь, когда вы установили свой сервер Minecraft , узнайте, как оптимизировать Minecraft для Linux .
Создание игрового сервера Steam
Для Counter-Strike и других игр Steam вам понадобится игровой сервер Steam. Однако создание игрового сервера Steam немного отличается. Я использовал машину с Ubuntu 16.04 LTS. Хотя в сообщении сообщества Steam предлагается создать другую учетную запись пользователя для использования в качестве сервера Steam, я просто использовал свою учетную запись пользователя Ubuntu по умолчанию.
SteamCMD
Утилита SteamCMD позволяет вам запускать сервер Steam. Этот инструмент загружает и устанавливает выделенные серверы для игр Steam. Чтобы загрузить установщик SteamCMD, вставьте его в командную строку:
Убедитесь, что вы находитесь в вашем каталоге steamcmd. Как только вы перешли в этот каталог, запустите:
Установочный скрипт и обновление выполнятся. После этого попробуйте войти в систему. Вы можете просто ввести:
Вы должны увидеть сообщение о том, что вы вошли в Steam Public анонимно.
Подключение к серверам
Хотя SteamCMD установлен, нам все равно нужно добавить выделенные серверы. Однако есть несколько тонкостей. А именно, если Steam предоставляет выделенный сервер и он бесплатный, тогда анонимный вход в систему вполне подойдет. Но некоторые серверы требуют, чтобы вы вошли в систему с учетной записью Steam.
Например, Team Fortress 2 можно сыграть таким образом. Не играл в Team Fortress или давно? Ну, может быть, вам нужно вернуться к TF2 . Тем не менее, если Steam предлагает выделенный сервер и это не бесплатная услуга, вы должны войти в систему с учетной записью Steam. Это как будто вы используете клиент Steam. Серверы Counter-Strike должны быть настроены таким образом.
Steam назначает идентификаторы приложений для клиентов и серверов.
- Клиентский AppID: 240
- AppID сервера: 232330
Team Fortress 2
- Клиентский AppID: 440
- AppID сервера: 232250
Но что мы на самом деле делаем с этой информацией? Нужно зайти в выделенные папки. Поэтому для сервера Team Fortress 2 путь по умолчанию будет
Чтобы создать папку установки, запустите:
Есть два способа установки игры. Если вы используете анонимный вход, просто введите:
Однако, если вам необходимо использовать Steam ID, вместо этого используйте:
Поэтому, чтобы установить сервер Team Fortress 2 , введите его в командной строке:
Некоторые конфигурации могут потребоваться в зависимости от вашей настройки. Вы можете прочитать больше об этом здесь . Чтобы запустить игровой сервер, перейдите в соответствующую папку и запустите ее. Мы рассмотрим пример Team Fortress 2 :
Другие Методы
Хотя предыдущие примеры охватывают игры Steam и Minecraft , это не единственные игры, для которых вы, возможно, захотите запустить сервер. И это не единственные методы создания игрового сервера в Linux. GameServers.com предлагает солидное решение. Есть платные версии, но я попробовал бесплатный Counter-Strike: Source сервер. Проверьте бесплатные серверы, доступные здесь.
Как только вы запросите сервер, вы получите электронное письмо с информацией о вашем сервере. Нажмите на ссылку и следуйте инструкциям (см. Ниже). Это аккуратный сервис. Примечательно, что это особенно полезно, если у вас устаревшее оборудование или вы просто хотите отдельный сервер.
Наконец, Linux Game Server Managers предоставляет отличное решение. Это фантастический инструмент, который совместим с множеством дистрибутивов. LGSM может похвастаться более чем 50 выделенными серверами. Плюс, это с открытым исходным кодом. Инструмент командной строки позволяет быстро развертывать выделенные игровые серверы в Linux. Проверьте демо ниже:
Хотя это отличный выбор, существует множество вариантов настройки игрового сервера Linux. Что вы используете? Дайте нам знать в комментариях ниже!
Источник