# System Diagram

> A pictoral overview of the Agones component relationships.

---

LLMS index: [llms.txt](/site/llms.txt)

---

![System Diagram](../../../diagrams/system-diagram.dot.png)

# Agones Control Plane 

The Agones Control Plane consists of 4 `Deployments`:
```
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
agones-allocator    3/3     3            3           40d
agones-controller   2/2     2            2           40d
agones-extensions   2/2     2            2           40d
agones-ping         2/2     2            2           40d
```

## `agones-allocator`

`agones-allocator` provides a gRPC/REST service that translates allocation requests into `GameServerAllocations`. See [Allocator Service](/site/docs/advanced/allocator-service/) for more information.

## `agones-controller`

`agones-controller` maintains various control loops for all Agones CRDs (`GameServer`, `Fleet`, etc.). A single leader-elected `Pod` of the `Deployment`
is active at any given time (see [High Availability](/site/docs/advanced/high-availability-agones/)).

## `agones-extensions`

`agones-extensions` is the endpoint for:
* Agones-installed Kubernetes webhooks, which handle defaulting and validation for Agones CRs,
* and the `GameServerAllocation` `APIService`, which handles `GameServer` allocations (either from the Allocator Service or the Kubernetes API).

## `agones-ping` (not pictured)

`agones-ping` is a simple ping service for latency testing from your game client - see [Latency Testing](/site/docs/guides/ping-service/).

# Agones CRDs

See [Create a Game Server](/site/docs/getting-started/create-gameserver/), [Create a Game Server](/site/docs/getting-started/create-fleet/) for examples of Agones CRDs in action, or the [API Reference](/site/docs/reference/) for more detail.

All of the Agones CRDs are controlled and updated by `agones-controller`. `GameServer` is additionally updated by the SDK Sidecar and `agones-extensions` (moving a `GameServer` from [`Ready` to `Allocated`](/site/docs/reference/gameserver/#gameserver-state-diagram)

# Game Server Pod

Also pictured is an example `Pod` owned by a `GameServer`. Game clients typically connect to the Dedicated Game Server directly, or via a proxy like [Quilkin](https://github.com/EmbarkStudios/quilkin/blob/main/docs/src/introduction.md). The game server server interfaces with Agones using the [Client SDK](/site/docs/guides/client-sdks/), which is a thin wrapper around the [SDK gRPC protocol](https://github.com/agones-dev/agones/blob/main/proto/sdk/sdk.proto). The SDK connects to the SDK Sidecar (`sdk-server`) in the same Pod, which handles the SDK business logic for e.g. [health checks](/site/docs/guides/health-checking/), [Counters and Lists](/site/docs/guides/counters-and-lists/), etc.
