Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes

Overview

Agones logo

go.dev reference GoDoc Go Report Card GitHub release Follow on Twitter

Agones is a library for hosting, running and scaling dedicated game servers on Kubernetes.

Agones, is derived from the Greek word agōn which roughly translates to “contest”, “competition at games” and “gathering”. (source)

Why does this project exist?

Agones replaces usual bespoke or proprietary cluster management and game server scaling solutions with a Kubernetes cluster that includes the Agones custom Kubernetes Controller and matching Custom Resource Definitions for GameServers, Fleets and more.

With Agones, Kubernetes gets native abilities to create, run, manage and scale dedicated game server processes within Kubernetes clusters using standard Kubernetes tooling and APIs. This model also allows any matchmaker to interact directly with Agones via the Kubernetes API to provision a dedicated game server.

For more details on why this project was written, read the announcement blog post.

Major Features

  • Define a single GameServer, and/or large game server Fleets within Kubernetes - either through yaml or via the API
  • Manage GameServer lifecycles - including health checking and connection information.
  • Fleet Autoscaling capabilities that integrate with Kubernetes' native cluster autoscaling
  • Gameserver specific metric exports and dashboards for ops teams

Usage

Documentation can be found on the Agones website.

Get involved

Code of Conduct

Participation in this project comes under the Contributor Covenant Code of Conduct

Reporting Security Issues

To report a security issue for this project, please follow the instructions in the Project Security Policy

Development and Contribution

Please read the contributing guide for directions on submitting Pull Requests to Agones, and community membership governance.

See the Developing, Testing and Building Agones documentation for developing, testing and building Agones from source.

The Release Process documentation displays the project's upcoming release calendar and release process.

Agones is in active development - we would love your help in shaping its future!

This all sounds great, but can you explain Docker and/or Kubernetes to me?

Docker

Kubernetes

Licence

Apache 2.0

Comments
  • sdk arm64 images

    sdk arm64 images

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug /kind cleanup /kind documentation

    /kind feature

    /kind hotfix

    What this PR does / Why we need it: Build sdk image for arm64 hosts Which issue(s) this PR fixes:

    Work on https://github.com/googleforgames/agones/issues/2216

    Special notes for your reviewer:

    kind/feature size/M lgtm approved 
    opened by Ludea 135
  • Adds the first e2e test

    Adds the first e2e test

    This is a sample of one e2e tests for #37 . This first test create a gameserver, waits for readiness, assert some values then finally ping it (send/receive).

    The idea of this PR is to see if the direction is correct, but also I'd like to plug it to cloud builder to see if we can make it works @markmandel I'll need your help on this. ( Can we use your account to provision a cluster for e2e ? How should we proceed ?)

    I would like that we list all tests for gameservers/fleets/allocation, so I can tackled them one by one. (Let's use the ticket #37 )

    Locally with a GKE cluster it works. (I'm having sometimes some timeout with the k8s api, might be from my connection Post https://35.185.224.168/apis/stable.agones.dev/v1alpha1/namespaces/default/gameservers: dial tcp 35.185.224.168:443: i/o timeout)

    Have a spin, I hope you like it.

    kind/feature area/build-tools 
    opened by cyriltovena 77
  • Fix Network Security Group Gameserver rule not applied on AKS cluster

    Fix Network Security Group Gameserver rule not applied on AKS cluster

    /kind cleanup

    What this PR does / Why we need it: Hello

    This PR fixes AKS gameserver network security rule not added to the effective AKS node pool network security group.

    AKS install terraform included a network security group and two network security rules which were not used. This PR follows AKS create cluster documentation by adding the incoming gameserver security rule to the aks-agentpool-******-nsg network security group

    Regards

    kind/cleanup area/operations lgtm size/L approved cla: yes 
    opened by WeetA34 68
  • Fix Fleets RollingUpdate

    Fix Fleets RollingUpdate

    Make sure that GameServers actually are Ready before scaling down inactive GameServerSet.

    What type of PR is this?

    Uncomment only one /kind <> line, hit enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking

    /kind bug

    /kind cleanup /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: If creating new GameServers take more than 30 seconds there is a situation when all GameServers would go down to 0 and all new GameServers would be in a Scheduled state.

    Which issue(s) this PR fixes:

    Closes #1625

    Special notes for your reviewer:

    There are steps to reproduce inline with a ticket. Will create a simple E2E test to make sure this functionality is covered.

    kind/feature lgtm size/L approved cla: yes 
    opened by aLekSer 64
  • Update the GameServerAllocation Specification to remove required/pref…

    Update the GameServerAllocation Specification to remove required/pref…

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug

    /kind cleanup

    /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: details can be found here #2146

    Which issue(s) this PR fixes:

    Closes #2146

    Special notes for your reviewer:

    kind/feature size/XXL lgtm approved cla: yes 
    opened by cindy52 62
  • Support graceful termination

    Support graceful termination

    What type of PR is this? /kind feature

    What this PR does / Why we need it: To support terminationGracePeriodSeconds. Terminate only when SIGKILL is received. Currently when terminationGracePeriodSeconds is defined for a gameserver, the agones SDK sidecar terminates immediately when it receives a SIGTERM.

    Which issue(s) this PR fixes:

    Closes #

    Special notes for your reviewer:

    kind/feature size/L approved cla: yes 
    opened by bennetty 62
  • Initial version of EKS terraform config

    Initial version of EKS terraform config

    Add module for EKS cluster. Add documentation and example which uses submodules.

    Disabled agones-system/agones-ping-udp-service for now as it breaks the helm_agones deployment. There is a need to add two more Node Pools ( Worker Groups) for metrics and system with taints.

    Closes #966 .

    kind/feature area/operations lgtm size/L approved 
    opened by aLekSer 59
  • Custom fleet autoscaler resync interval

    Custom fleet autoscaler resync interval

    What type of PR is this? /kind feature

    What this PR does / Why we need it: Add a new property sync to FleetAutoScaler for supporting custom sync interval. See more details in: #1955

    Which issue(s) this PR fixes:

    Closes #1955

    Special notes for your reviewer: None

    kind/feature lgtm size/XL approved cla: yes 
    opened by jie-bao 56
  • Cpp sdk cmake

    Cpp sdk cmake

    This changeset provides CMake scripts for building C++ SDK that works across Windows, Linux and macOS. Old Makefile will be removed after migrating examples/cpp-simple to CMake. Issue: #134

    kind/feature area/build-tools area/user-experience 
    opened by dsazonoff 56
  • SDK Conformance testing

    SDK Conformance testing

    Add test mode for SDK-server. Local SDK server (Sidecar) now could record client requests. Added test clients and make targets to test Golang and NodeJS SDKs.

    For #672.

    kind/feature area/tests 
    opened by aLekSer 50
  • Add allocator service example and documentation

    Add allocator service example and documentation

    This is a service that allocates a game server from a fleet using the Agones API. It then returns the IP address and port of the allocated game server. I cleaned up the notes I took while making it, and maybe they might provide some useful documentation for people who are looking to programmatically allocate game servers.

    Some things I'm not sure about:

    Is the document create_allocator_service.md more of a Quickstart or a Guide?
    The service in the example uses a container in my public Docker registry...I don't mind, but it might be better off in a repo controlled by this project.
    Step 12 and onward of create_allocator_service might be out of scope.
    The error handling in main.go seem inadequate to me...but maybe it is ok?
    

    Please let me know if this would be useful, and if so, what changes should be made.

    kind/documentation area/examples 
    opened by slartibaartfast 50
  • Set seccompProfile of `Unconfined` unless overidden by user

    Set seccompProfile of `Unconfined` unless overidden by user

    GKE Autopilot defaults to a seccomp profile of RuntimeDefault, meaning the container uses the default seccomp profile of the container runtime. Upstream Kubernetes itself is marching towards RuntimeDefault as a default as well (link).

    The problem is that seccomp currently incurs performance penalties on some workloads, in some cases pretty severe, e.g.: https://github.com/moby/moby/issues/41389. To future-proof Agones until seccomp performance improves, this PR sets a seccompProfile which disables seccomp, the equivalent of:

    spec:
      securityContext:
        seccompProfile:
          type: Unconfined
    

    We skip the defaulting if the user specifies a Pod seccompProfile. The user can also specify a container-level seccompProfile which overrides the Pod-level profile (either our default or their explicit config).

    size/M 
    opened by zmerlynn 2
  • Generate Changelog - Release Automation: Add cloud build target for release builds

    Generate Changelog - Release Automation: Add cloud build target for release builds

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug /kind cleanup /kind documentation

    /kind feature

    /kind hotfix

    What this PR does / Why we need it:

    Created a Make target in release.mk that manually submits a cloud build job The cloud build job generates the CHANGELOG file for both RC and release. The file is stored in a Google Cloud storage bucket so that we can retrieve it to be added to our PR for later.

    Which issue(s) this PR fixes:

    Closes #2460

    Special notes for your reviewer:

    NA

    kind/feature size/M 
    opened by mangalpalli 4
  • Updates allocation load testing documentation

    Updates allocation load testing documentation

    What type of PR is this? /kind documentation

    What this PR does / Why we need it: Clean up of load test documentation makes instructions on how to run the tests clearer.

    Which issue(s) this PR fixes: NA

    Special notes for your reviewer:

    size/L 
    opened by igooch 9
  • Specify port range for gameserver pods specific to a node

    Specify port range for gameserver pods specific to a node

    Hello,

    I have a node running microk8s and a static IP from ISP, using port forwarding we point to that node. Now we want to add two more node. But we have only one static ip.

    So, it is possible to specify port range that gameserver pod will use if it is instantiated in a specific node. Example : node A gameservers pod will have port 7000 to 8000 node B gameservers pod will have port 8001 to 9000 node C gameservers pod will have port 9001 to 10000

    So, that we can port forward port range from 7000 to 8000 to node A, port forward port range from 8001 to 9000 to node B and port forward port range from 9001 to 10000 to node C

    Is there any alternative to solve this issue, then please let me know.

    Thanks

    kind/feature 
    opened by SomendraDev 0
  • Local SDK server returns 500 on player-connect

    Local SDK server returns 500 on player-connect

    Hey, We're trying out the player-tracking feature using the local sdk server, however enabling the feature-flag and setting spec -> players -> initalCapacity in the gamserver yaml makes agones return http 500 on player-connect requests.

    gameserver.yaml:

    apiVersion: "agones.dev/v1"
    kind: GameServer
    metadata:
      name: dev-server
    spec:
      ports:
      - name: default
        portPolicy: Dynamic
        containerPort: 7777
      players:
        initialCapacity: 10
      template:
        spec:
          containers:
          - name: simple-game-server
            image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.14
    

    Starting Agones: ./sdk-server.darwin.arm64 --local --feature-gates PlayerTracking=true -f gameserver.yaml

    Player-connect:

    $> curl -d '{"playerID": "user-123"}' -H "Content-Type: application/json" http://localhost:9358/alpha/player/connect -v
    < HTTP/1.1 500 Internal Server Error
    {"error":"Players are already at capacity","code":2,"message":"Players are already at capacity"}
    

    To make it work I have to set the player-capacity using the API: $> curl -d '{"count": 10}' -H "Content-Type: application/json" -X PUT http://localhost:9358/alpha/player/capacity ...and now the player-connect call works. The installed Agones we run in GKE does not have this behavior, it accepts player-connect calls without requiring the server to explicitly set the capacity using the API.

    Maybe this is related to #2709

    Agones version: agonessdk-server-1.27.0

    kind/bug 
    opened by luckyswede 2
  • Update Kubernetes to 1.24 #2867

    Update Kubernetes to 1.24 #2867

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug /kind cleanup /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: Kubernetes updates

    Which issue(s) this PR fixes:

    Closes #

    Special notes for your reviewer:

    size/XS 
    opened by 1804devs 4
Releases(v1.28.0)
Owner
GoogleForGames
GoogleForGames
RPC Network Library for Multiplayer Games

Game NET - A Simple RPC Network Library (C++11) Write a simple server / client RPC system in just 10+20 lines of code. Write a multiplayer game with c

Spacerat 72 Dec 26, 2022
Multiplayer ludo game made in Unity

LUDO Multiplayer ludo game made in Unity This a multi-plaayer game. But due to lack of budget I am not able to make it online multi-player. So users h

Soumavo Dey 26 Sep 23, 2022
This is a list of different open-source video games and commercial video games open-source remakes.

This is a list of different open-source video games and commercial video games open-source remakes.

Ivan Bobev 173 Jan 2, 2023
Distributed server for social and realtime games and apps.

Distributed server for social and realtime games and apps. Features Users - Register/login new users via social networks, email, or device ID. Storage

Heroic Labs 6.6k Jan 1, 2023
Multiplayer Voxel Survival in C99, includes a badly written implementation of LISP

Imagine a mix between Minecraft, Quake ]I[ and Emacs. Apart from that there is no clear plan for this game, just a bunch of ideas that hopefully will turn out to be fun. Some of these are stored here in this repo, others have been talked about on Twitch during dev streams.

Ben 79 Nov 21, 2022
Advanced modding framework for multiplayer modifications

A suite of tools and libraries to accelerate multi-player modification development.

MafiaHub 28 Dec 14, 2022
Mod that adds multiplayer to Tales of Arise

Tales of Arise: Local Co-Op Mod Mod that adds multiplayer to Tales of Arise For progress, see Milestones. Installing Extract files to the game data fo

Eusthron 44 Nov 20, 2022
Multiplayer experience for Mafia: Definitive Edition

Mafia: Definitive Edition Multiplayer! Brought to you by @Segfault, @zaklaus, @DavoSK, and other contributors! Introduction This is a multiplayer mod

MafiaHub 31 Jan 3, 2023
Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Storm Devs 693 Dec 29, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 80 Nov 25, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 321 Jan 4, 2023
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.9k Jan 8, 2023
A flutter package for making game levels map like candy crush or similar games using flutter with ability to be horizontal or vertical

Game Levels Scrolling Map A package for making game levels map like candy crush or similar games using flutter with ability to be horizontal or vertic

Mohamed Sayed 12 Oct 26, 2022
C++ Library to connect games with Game Jolt

Game Jolt API C++ Library Game Jolt is a host for free independently developed computer games. As a gamer you are able to play every game on this site

Martin Mauersics 8 Jun 18, 2022
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2.2k Jan 1, 2023
An open source implementation of the dark souls 3 game server.

What is this project? An open source implementation of the dark souls 3 game server. Idealistically made for the purpose of allow better alternatives

Tim Leonard 547 Dec 30, 2022
A repo of game server configuration files used by LinuxGSM

Game Server Config Files Note: This repo is very new and currently missing most config files. More will be added over time. This is a repo of config f

Game Server Managers 241 Dec 27, 2022
An open source implementation of the dark souls 2 game server.

WARNING: This is non-functional, its an initial branch from ds3os. What is this project? An open source implementation of the dark souls 2 game server

Tim Leonard 42 Oct 8, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

null 3.1k Jan 3, 2023