---
title: "Agonesを構築してみた | grasys blog"
url: "https://blog.grasys.io/post/izumi/deploy-agones-sample/"
description: "今回は、ゲーム専用サーバをKubernetes上で実行する為のソフトウェアAgonesの環境を構築してみました。 こんにちは、エンジニアの泉水です。 今回はゲーム専用サーバのホスティング、スケーリングをKubernetes上で管理するAgonesのサンプルをGKEへ上で構築してみました。 1.Agonesって？ Ag…"
---

# Agonesを構築してみた

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[izumi](/authors/izumi/)
-   公開日：2020年8月5日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Agones](/tags/agones/)[#Google Cloud](/tags/google-cloud/)[#GKE](/tags/gke/)

![Agonesを構築してみた](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

今回は、ゲーム専用サーバをKubernetes上で実行する為のソフトウェアAgonesの環境を構築してみました。

こんにちは、エンジニアの泉水です。 今回はゲーム専用サーバのホスティング、スケーリングをKubernetes上で管理するAgonesのサンプルをGKEへ上で構築してみました。

## 1.Agonesって？

Agonesは、ゲーム専用サーバーのホスティングとスケーリングを Kubernetes上で行うオープンソースプロジェクトです。 公式サイトは[こちら](https://agones.dev/site/)

今回はこちらの[サンプル](https://github.com/googleforgames/agones)を利用して構築していきます。 masterブランチは開発中のコードが混在していて正しく動作しない可能性があるので、release-1.7.0ブランチを利用しました。

### 1-1. Agonesの構成

今回は以下のAgonesのリソースについて見ていきたいと思います。

-   GameServer: ゲームサーバ本体
-   Fleet: ゲームサーバの集合
-   FleetAutoScaler: Fleetのスケールアップ、スケールダウン

## 2.GKEクラスタの構築

弊社ではGCPのリソース管理にTerraformを使用することが多いので今回もTerraformで構築していきます。 また、すぐに構築できるようにTerraformの構成ファイル(以後tfファイル)が準備されています。 [tfファイルサンプル](https://github.com/googleforgames/agones/tree/release-1.7.0/install/terraform/modules/gke)

### 2-1. GKEクラスタを作成する

サンプルのtfファイル内にGCPプロジェクト名が設定されているのでそこを自分の環境に合わせて修正します。 その他、クラスタ名やzoneなどお好みに合わせて変更してください。

Plain textcontent\_copy

```
   default = {
     "zone"              = "us-west1-c"
     "name"              = "test-cluster"
     "machineType"       = "n1-standard-4"
     "initialNodeCount"  = "4"
- "project"           = "agones"
+    "project"           = "test-project"
     "network"           = "default"
     "kubernetesVersion" = "1.15"
   }
```

machineTypeを変更したい場合は上記のmachineTypeの変更に加えてcluster.tf内に定義されているmachineTypeの指定を修正する必要があります。

Plain textcontent\_copy

```
     node_config {
- machine_type = "n1-standard-4"
+      machine_type = "n1-standard-2"
```

ちなみに、私はmachineTypeをn1-standard-2で構築しましたが問題なく動作しました。

tfファイルの修正が終わったら、`terraform plan`、`teffaform apply`を実施しで構築完了です。

## 3.Agonesをデプロイする

Agonesのデプロイ方法はhelm、Kubernetesのyamlファイルが提供されていますが今回はyamlファイルを利用します。 [installのサンプル](https://github.com/googleforgames/agones/tree/release-1.7.0/install/yaml)

### 3-1. namespaceを作成する

デプロイを実施する前にnamespaceを作成します。

Plain textcontent\_copy

```
$ kubectl create namespace agones-system
namespace/agones-system created
$ kubectl get namespace
NAME              STATUS   AGE
agones-system     Active   7s
default           Active   91s
kube-node-lease   Active   93s
kube-public       Active   93s
kube-system       Active   93s
```

### 3-2. Agonesモジュールをデプロイする

Plain textcontent\_copy

```
$ kubectl create -f install.yaml
serviceaccount/agones-allocator created
serviceaccount/agones-controller created
serviceaccount/agones-sdk created
secret/agones-manual-cert created
secret/allocator-client-ca created
secret/allocator-tls created
secret/allocator-tls-ca created
...省略
```

デプロイを実行するユーザのIAM権限はGKE管理者である必要があります。  
GKEクラスタ管理者などでは、RBACの作成に失敗してしまいます。

デプロイしたAgonesモジュールはagones-systemネームスペースに作成されます。

Plain textcontent\_copy

```
$ kubectl get pod -n agones-system
NAME                                 READY   STATUS    RESTARTS   AGE
agones-allocator-7cd58db9dc-764n9    1/1     Running   0          5m6s
agones-allocator-7cd58db9dc-78xjn    1/1     Running   0          5m6s
agones-allocator-7cd58db9dc-9jqmz    1/1     Running   0          5m6s
agones-controller-6f4458776f-6ldg6   1/1     Running   0          5m6s
agones-ping-59d46d7fb5-jx7nf         1/1     Running   0          5m6s
agones-ping-59d46d7fb5-mh8wl         1/1     Running   0          5m6s
```

Plain textcontent\_copy

```
$ kubectl get service -n agones-system
NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)            AGE
agones-allocator            LoadBalancer   10.11.244.106   35.xxx.xxx.xxx    443:30882/TCP      5m38s
agones-controller-service   ClusterIP      10.11.245.126   <none>            443/TCP,8080/TCP   5m38s
agones-ping-http-service    LoadBalancer   10.11.240.127   34.xxx.xxx.xxx      80:30662/TCP       5m38s
agones-ping-udp-service     LoadBalancer   10.11.244.123   104.xxx.xxx.xxx   50000:31417/UDP    5m38s
```

## 4.GameServerのデプロイする

サンプルのゲームサーバ単体をデプロイしてみます。

※GameServer、Fleet、FleetAutoscalerのサンプルは全て[こちら](https://github.com/googleforgames/agones/tree/release-1.7.0/examples/simple-udp)のマニフエストを使用します。

### 4-1. ゲームサーバのデプロイ

Plain textcontent\_copy

```
$ kubectl create -f gameserver.yaml
gameserver.agones.dev/simple-udp-lrq2k created
$ kubectl get gs
NAME               STATE   ADDRESS           PORT   NODE                                     AGE
simple-udp-lrq2k   Ready   104.xxx.xxx.xxx   7380   gke-test-cluster-default-23a9c43b-q099   7s
```

### 4-2. ゲームサーバへの接続

ncコマンドで接続してみます。  
このサンプルサーバは接続後入力した文字列を返すだけの単純なものです。  
また、「EXIT」を入力するとサーバとの接続が終了します。

Plain textcontent\_copy

```
$ nc -u 104.xxx.xxx.xxx 7380
TEST
ACK: TEST
```

## 5\. Fleetのデプロイ

サンプルのゲームサーバに対するFleetをデプロイしていきます。 デプロイする前に4で作成したゲームサーバは削除してください。

### 5-1.fleetをデプロイする

Fleetをデプロイしてみます。

Plain textcontent\_copy

```
$ kubectl create -f fleet.yaml
fleet.agones.dev/simple-udp created

$ kubectl get fleet
NAME         SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-udp   Packed       2         2         0           2       26s
```

fleet.yamlのreplicasで指定した数のゲームサーバが起動したことが確認できます。

Plain textcontent\_copy

```
$ kubectl get gameserver
NAME                     STATE   ADDRESS         PORT   NODE                                     AGE
simple-udp-bnsbw-cx247   Ready   35.xxx.xxx.xxx   7972   gke-test-cluster-default-23a9c43b-qsgr   70s
simple-udp-bnsbw-l8888   Ready   35.xxx.xxx.xxx   7854   gke-test-cluster-default-23a9c43b-qsgr   70s
```

### 5-2. allocateする

起動したゲームサーバをallocateします。

Plain textcontent\_copy

```
$ kubectl create -f gameserverallocation.yaml
gameserverallocation.allocation.agones.dev/simple-udp-bnsbw-l8888 created
```

ゲームサーバ1台がallocateの状態になっていることが確認できます。

Plain textcontent\_copy

```
$ kubectl get gameserver
NAME                     STATE       ADDRESS         PORT   NODE                                     AGE
simple-udp-bnsbw-c8tjh   Ready       35.xxx.xxx.xxx   7060   gke-test-cluster-default-23a9c43b-qsgr   12m
simple-udp-bnsbw-l8888   Allocated   35.xxx.xxx.xxx   7854   gke-test-cluster-default-23a9c43b-qsgr   23m
```

### 5-3. ゲームサーバの台数を0へ変更する

allocateがどのような状態か確認する為にFleetの設定を変更してゲームサーバの台数を0台に変更します。

Plain textcontent\_copy

```
kubectl scale fleet simple-udp --replicas=0

$ kubectl get fleet
NAME         SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
simple-udp   Packed       0         1         1           0       3h16m
```

ゲームサーバの台数を0へ変更してもAllocatedの状態となっているゲームサーバpodは削除されないことが確認できました。  
Allocated状態のゲームサーバが鎖状されないのもAgonesの特徴です。

Plain textcontent\_copy

```
$ kubectl get gameserver
NAME                     STATE       ADDRESS         PORT   NODE                                     AGE
simple-udp-bnsbw-l8888   Allocated   35.xxx.xxx.xxx   7854   gke-test-cluster-default-23a9c43b-qsgr   23m
```

## 6\. FleetAutoscalerのデプロイ

FleetAutoscalerではゲームサーバの最小・最大台数や、バッファ台数を設定することができます。

### 6-1. FleetAutoscalerをデプロイする

今回は最大10、最小2、バッファ2で設定します。

Plain textcontent\_copy

```
$ kubectl create -f fleetautoscaler.yaml
fleetautoscaler.autoscaling.agones.dev/simple-udp-autoscaler created

$ kubectl get gameserver
NAME                     STATE       ADDRESS         PORT   NODE                                     AGE
simple-udp-bnsbw-c8tjh   Ready       35.xxx.xxx.xxx   7060   gke-test-cluster-default-23a9c43b-qsgr   12m
simple-udp-bnsbw-l8888   Ready       35.xxx.xxx.xxx   7854   gke-test-cluster-default-23a9c43b-qsgr   23m
```

### 6-2. allocateしてみます

allocate後、ゲームサーバ数を確認すると1台ゲームサーバが追加されていてバッファが2台になっていることがわかります。

Plain textcontent\_copy

```
$ kubectl create -f gameserverallocation.yaml
gameserverallocation.allocation.agones.dev/simple-udp-bnsbw-l8888 created

$ kubectl get gameserver
NAME                     STATE       ADDRESS         PORT   NODE                                     AGE
simple-udp-jlq7t-4kq6c   Ready       35.xxx.xxx.xxx   7060   gke-test-cluster-default-23a9c43b-qsgr    2m
simple-udp-bnsbw-c8tjh   Ready       35.xxx.xxx.xxx   7060   gke-test-cluster-default-23a9c43b-qsgr   12m
simple-udp-bnsbw-l8888   Allocated   35.xxx.xxx.xxx   7854   gke-test-cluster-default-23a9c43b-qsgr   23m
```

## 終わり

今回はAgonesのサンプルのデプロイから動作の確認を行ってみました。  
次回（？）はもっと他の細かい動作を書いていければと思います。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/izumi/)

### [izumi](/authors/izumi/)

izumiのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/izumi/)
