Google Kubernetes Engine
Before you begin
Take the following steps to enable the Kubernetes Engine API:
- Visit the Kubernetes Engine page in the Google Cloud Platform Console.
- Create or select a project.
- Wait for the API and related services to be enabled. This can take several minutes.
- Enable billing for your project.
- If you are not an existing GCP user, you may be able to enroll for a $300 US Free Trial credit.
Choosing a shell
To complete this quickstart, we can use either Google Cloud Shell or a local shell.
Google Cloud Shell is a shell environment for managing resources hosted on Google Cloud Platform (GCP). Cloud Shell comes preinstalled with the gcloud
and kubectl
command-line tools. gcloud
provides the primary command-line interface for GCP, and kubectl
provides the command-line interface for running commands against Kubernetes clusters.
If you prefer using your local shell, you must install the gcloud
and kubectl
command-line tools in your environment.
Cloud shell
To launch Cloud Shell, perform the following steps:
- Go to Google Cloud Platform Console
- From the top-right corner of the console, click the Activate Google Cloud Shell button:
- A Cloud Shell session opens inside a frame at the bottom of the console. Use this shell to run
gcloud
andkubectl
commands.
Local shell
To install gcloud
and kubectl
, perform the following steps:
- Install the Google Cloud SDK, which includes the
gcloud
command-line tool. - Initialize some default configuration by running the following command.
- When asked
Do you want to configure a default Compute Region and Zone? (Y/n)?
, enterY
and choose a zone in your geographical region of choice.
gcloud init
- When asked
- Install the
kubectl
command-line tool by running the following command:gcloud components install kubectl
Choosing a Regional or Zonal Cluster
You will need to pick a geographical region or zone where you want to deploy your cluster, and whether to create a regional or zonal cluster. We recommend using a Regional cluster, as the zonal GKE control plane can go down temporarily to adjust for cluster resizing, automatic upgrades and repairs.
After choosing a cluster type, choose a region or zone. The region you chose is COMPUTE_REGION
below.
(Note that if you chose a zone, replace --region=[COMPUTE_REGION]
with --zone=[COMPUTE_ZONE]
in commands below.)
Choosing a Release Channel and Optional Version
We recommend using the regular
release channel, which offers a balance between stability and freshness.
If you’d like to read more, see our guide on Release Channels.
The release channel you chose is RELEASE_CHANNEL
below.
(Optional) During cluster creation, to set a specific available version in the release channel, use the --cluster-version=[VERSION]
flag, e.g. --cluster-version=1.30
. Be sure to choose a version supported by Agones. (If you rely on release channels, the latest Agones release should be supported by the default versions of all channels.)
Choosing a GKE cluster mode
A cluster consists of at least one control plane machine and multiple worker machines called nodes. In Google Kubernetes Engine, nodes are Compute Engine virtual machine instances that run the Kubernetes processes necessary to make them part of the cluster.
Agones supports both GKE Standard mode and GKE Autopilot mode.
Agones GameServer
and Fleet
manifests that work on Standard are compatible
on Autopilot with some constraints, described in the following section. We recommend
running GKE Autopilot clusters, if you meet the constraints.
If you choose GKE Autopilot mode, then you should skip the following sections on
NodePool
configuration. GKE Autopilot handles this for you.
You can’t convert existing Standard clusters to Autopilot; create new Autopilot clusters instead.
Agones on GKE Autopilot
Autopilot is GKE’s fully-managed mode. GKE configures, maintains, scales, and upgrades nodes for you, which can reduce your maintenance and operating overhead. You only pay for the resources requested by your running Pods, and you don’t pay for unused node capacity or Kubernetes system workloads.
This section describes the Agones-specific considerations in Autopilot clusters. For a general comparison between Autopilot and Standard, refer to Choose a GKE mode of operation.
Autopilot nodes are, by default, optimized for most workloads. If some of your workloads have broad compute requirements such as Arm architecture or a minimum CPU platform, you can also choose a compute class that meets that requirement. However, if you have specialized hardware needs that require fine-grained control over machine configuration, consider using GKE Standard.
Agones on Autopilot has pre-configured opinionated constraints. Evaluate whether these constraints impact your workloads:
- Operating system: No Windows containers.
- Resource requests: Autopilot has pre-determined minimum Pod resource requests. If your game servers require less than those minimums, use GKE Standard.
- Scheduling strategy:
Packed
is supported, which is the Agones default.Distributed
is not supported. - Node pools: Autopilot manages nodes for you. If you require node pools with different configurations, use GKE Standard.
- Host port policy:
Dynamic
is supported, which is the Agones default.Static
andPassthrough
are not supported. - Port range:
default
is supported, which is the Agones default. Additional port ranges are not supported. - Seccomp profile: Agones sets the seccomp profile to
Unconfined
to avoid unexpected container creation delays that might occur because Autopilot enables theRuntimeDefault
seccomp profile. - Pod disruption policy:
eviction.safe: Never
is supported, which is the Agones default.eviction.safe: Always
is supported.eviction.safe: OnUpgrade
is not supported. If your game sessions exceed one hour, refer to Considerations for long sessions.
Choosing a GCP network
By default, gcloud
and the Cloud Console use the VPC named default
for all new resources. If you
plan to create a dual-stack IPv4/IPv6 cluster cluster, special considerations need to
be made. Dual-stack clusters require a dual-stack subnet, which are only supported in
custom mode VPC networks. For a new dual-stack cluster, you can either:
-
create a new custom mode VPC,
-
or if you wish to continue using the
default
network, you must switch it to custom mode. After switching a network to custom mode, you will need to manually manage subnets within thedefault
VPC.
Once you have a custom mode VPC, you will need to choose whether to use an existing subnet or create a
new one - read VPC-native guide on creating a dual-stack cluster, but don’t create the cluster
just yet - we’ll create the cluster later in this guide. To use the network and/or subnetwork you just created,
you’ll need to add --network
and --subnetwork
, and for GKE Standard, possibly --stack-type
and
--ipv6-access-type
, depending on whether you created the subnet simultaneously with the cluster.
Creating the firewall
We need a firewall to allow UDP traffic to nodes tagged as game-server
via ports 7000-8000. These firewall rules apply to cluster nodes you will create in the
next section.
gcloud compute firewall-rules create gke-agones-game-server-firewall \
--allow udp:7000-8000 \
--target-tags game-server \
--description "Firewall to allow game server udp traffic"
Creating the cluster
Create a GKE cluster in which you’ll install Agones. You can use GKE Standard mode or GKE Autopilot mode. You can read more about choosing a cluster mode above.
Create an Autopilot mode cluster for Agones
-
Choose a Release Channel (Autopilot clusters must be on a Release Channel).
-
Create the cluster:
gcloud container clusters create-auto [CLUSTER_NAME] \ --region=[COMPUTE_REGION] \ --release-channel=[RELEASE_CHANNEL] \ --autoprovisioning-network-tags=game-server
Replace the following:
[CLUSTER_NAME]
: The name of your cluster.[COMPUTE_REGION]
: the GCP region to create the cluster in.[RELEASE_CHANNEL]
: one ofrapid
,regular
, orstable
, chosen above. The default isregular
.
Flag explanations:
--region
: The compute region you chose above.--release-channel
: The release channel you chose above.--autoprovisioning-network-tags
: Defines the tags that will be attached to new nodes in the cluster. This is to grant access through ports via the firewall created above.
Create a Standard mode cluster for Agones
Create the cluster:
gcloud container clusters create [CLUSTER_NAME] \
--region=[COMPUTE_REGION] \
--release-channel=[RELEASE_CHANNEL] \
--tags=game-server \
--scopes=gke-default \
--num-nodes=4 \
--enable-image-streaming \
--machine-type=e2-standard-4
Replace the following:
[CLUSTER_NAME]
: The name of the cluster you want to create[COMPUTE_REGION]
: The GCP region to create the cluster in, chosen above[RELEASE_CHANNEL]
: The GKE release channel, chosen above
Flag explanations:
--region
: The compute region you chose above.--release-channel
: The release channel you chose above.--tags
: Defines the tags that will be attached to new nodes in the cluster. This is to grant access through ports via the firewall created above.--scopes
: Defines the Oauth scopes required by the nodes.--num-nodes
: The number of nodes to be created in each of the cluster’s zones. Default: 4. Depending on the needs of your game, this parameter should be adjusted.--enable-image-streaming
: Use Image streaming to pull container images, which leads to significant improvements in initialization times. Limitations apply to enable this feature.--machine-type
: The type of machine to use for nodes. Default:e2-standard-4
. Depending on the needs of your game, you may wish to have smaller or larger machines.
(Optional) Creating a dedicated node pool
Create a dedicated node pool for the Agones resources to be installed in. If you skip this step, the Agones controllers will share the default node pool with your game servers, which is fine for experimentation but not recommended for a production deployment. You must also skip this step if you are using GKE Autopilot.
gcloud container node-pools create agones-system \
--cluster=[CLUSTER_NAME] \
--region=[COMPUTE_REGION] \
--node-taints agones.dev/agones-system=true:NoExecute \
--node-labels agones.dev/agones-system=true \
--num-nodes=1 \
--machine-type=e2-standard-4
Replace the following:
[CLUSTER_NAME]
: The name of the cluster you created[COMPUTE_REGION]
: The GCP region to create the cluster in, chosen above
Flag explanations:
--cluster
: The name of the cluster you created.--region
: The compute region you chose above.--node-taints
: The Kubernetes taints to automatically apply to nodes in this node pool.--node-labels
: The Kubernetes labels to automatically apply to nodes in this node pool.--num-nodes
: The number of nodes per cluster zone. For regional clusters,--num-nodes=1
creates one node in 3 separate zones in the region, giving you faster recovery time in the event of a node failure.--machine-type
: The type of machine to use for nodes. Default:e2-standard-4
. Depending on the needs of your game, you may wish to have smaller or larger machines.
(Optional) Creating a metrics node pool
Create a node pool for Metrics if you want to monitor the Agones system using Prometheus with Grafana or Cloud Logging and Monitoring. You must skip this step if you are using GKE Autopilot.
gcloud container node-pools create agones-metrics \
--cluster=[CLUSTER_NAME] \
--region=[COMPUTE_REGION] \
--node-taints agones.dev/agones-metrics=true:NoExecute \
--node-labels agones.dev/agones-metrics=true \
--num-nodes=1 \
--machine-type=e2-standard-4
Replace the following:
[CLUSTER_NAME]
: The name of the cluster you created[COMPUTE_REGION]
: The GCP region to create the cluster in, chosen above
Flag explanations:
--cluster
: The name of the cluster you created.--region
: The compute region you chose above.--node-taints
: The Kubernetes taints to automatically apply to nodes in this node pool.--node-labels
: The Kubernetes labels to automatically apply to nodes in this node pool.--num-nodes
: The number of nodes per cluster zone. For regional clusters,--num-nodes=1
creates one node in 3 separate zones in the region, giving you faster recovery time in the event of a node failure.--machine-type
: The type of machine to use for nodes. Default:e2-standard-4
. Depending on the needs of your game, you may wish to have smaller or larger machines.
(Optional) Creating a node pool for Windows
If you run game servers on Windows, you
need to create a dedicated node pool for those servers. Windows Server 2019 (WINDOWS_LTSC_CONTAINERD
) is the recommended image for Windows
game servers. Note that GKE Autopilot does not support Windows nodes.
Warning
RunningGameServers
on Windows nodes is currently Alpha. Feel free to file feedback
through Github issues.
gcloud container node-pools create windows \
--cluster=[CLUSTER_NAME] \
--region=[COMPUTE_REGION] \
--image-type WINDOWS_LTSC_CONTAINERD \
--machine-type e2-standard-4 \
--num-nodes=4
Replace the following:
[CLUSTER_NAME]
: The name of the cluster you created[COMPUTE_REGION]
: The GCP region to create the cluster in, chosen above
Flag explanations:
--cluster
: The name of the cluster you created.--region
: The compute region you chose above.--image-type
: The image type of the instances in the node pool -WINDOWS_LTSC_CONTAINERD
in this case.--machine-type
: The type of machine to use for nodes. Default:e2-standard-4
. Depending on the needs of your game, you may wish to have smaller or larger machines.--num-nodes
: The number of nodes per cluster zone. For regional clusters,--num-nodes=1
creates one node in 3 separate zones in the region, giving you faster recovery time in the event of a node failure.
Setting up cluster credentials
gcloud container clusters create
configurates credentials for kubectl
automatically. If you ever lose those, run:
gcloud container clusters get-credentials [CLUSTER_NAME] --region=[COMPUTE_REGION]
Next Steps
- Continue to Install Agones.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
Last modified November 28, 2024: Set externalTrafficPolicy as Local for agones-allocator (#4022) (08bc4c0)