[サルでもわかる]Azure にAgones をDeployしてみる[超基本]

Agnes はKubernetes上で動くGame Dedicated Server のライブラリです。
オープンソースで大規模なスケールのマルチプレイサーバにも対応しています。
サンプルを利用してAzure Kubernetes Service への展開を試しました

詳細は[こちら](https://agones.dev/site/docs/installation/creating-cluster/aks/)に記載されていますが、Cloud Shellで実行されているためここではGUIでの手順を記載します。

### AKSクラスターの作成 

(1)リソースグループを作成
　　リージョンは任意ですがとりあえず「東日本」を選択
![agones01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/69073c7c-5ccf-808d-c266-1a82341648c7.png)

(2)AKSクラスターを作成するため「Kubernetes Service」を検索し「作成」をクリック
![agones02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/6202acaa-a968-811a-3dc4-7692ceb4f78d.png)

(3)リソースグループやリージョンなどを設定
![agones03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/31853925-7d73-4a74-77ae-72a43c852428.png)

(4)複数のノードプールを設定する場合は追加(今回はデフォルト
![agones04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/bcab36fe-868e-2104-06b3-023c68014315.png)

(5)クラスターへの認証とアクセス制限を設定(今回はデフォルト)
![agones05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/e954db10-8663-144a-6283-7f68f77e8d4b.png)

(6)ネットワークやセキュリティ設定の設定(今回はデフォルト)
![agones06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/37a99fde-97ef-9e6a-79a0-28b7882ab1d6.png)

(7)Azure Container Registryと連携するようであれば設定
　監視はAzure Monitorを利用するため「有効」がチェックされているか確認
![agones07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/d93f68b2-252e-92f8-231c-21a8643c2ae8.png)

(8)検証が問題なく完了したら「作成」をクリック
![agones08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/82ad55f9-d0d7-38da-1f1e-6e05fdc0e575.png)

(9)AKSクラスターにUDPトラフィックを通過させる必要があるため、NSGの受信セキュリティ規則に宛先ポート範囲を7000～8000に設定した新しいルールを作成。
![agones09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/b4e59cc3-4860-65ec-5fad-79c4279e1248.png)

### Agonesのインストール
やり方はyamlファイルを使用する方法とhelmパッケージマネージャを利用する方法があります。
今回はテストなのでyamlの方で試します

(1)Azure CLIにて下記コマンドでAKSクラスタに接続
(myResourceGroup と myAKSCluster は適宜自分の環境に合わせて書き換えて下さい)

```
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
```

(2)接続を確認するためにクラスタノードの一覧を表示

```
kubectl get nodes
```

(3)Agones をインストールするため、下記コマンドを実行

```
kubectl create namespace agones-system
kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.20.0/install/yaml/install.yaml
```

ただしこのURLのinstall.yamlはデフォルトのものなので、ローカルにダウンロードし必要に応じて内容は変更した上でこちらの手順を実施してください
各パラメータの詳細は[こちら](https://agones.dev/site/docs/installation/install-agones/helm/#configuration)

(4)正常にインストールされたことを確認するために、下記コマンドを実行
  6つのPodが正常に稼働していることが確認できる

```
kubectl describe --namespace agones-system pods
kubectl get pods --namespace agones-system
```

### ゲームサーバを作成する
テストのためにAgonesを使ったGameServerを作成します

(1)Azure CLIにて下記コマンドを実行しサンプルゲームサーバを作成

```
kubectl create -f https://raw.githubusercontent.com/googleforgames/agones/release-1.20.0/examples/simple-game-server/gameserver.yaml
```

Kubernetesの中にGameServerを作成し、シンプルなudpゲームサーバーコードを実行するためのバッキングポッドも作成。
下記コマンドで実行状況を確認することができる。

```
kubectl get gameservers
```

(2)サーバステータスに関してはそれぞれ下記コマンドで確認することが可能

ステータスの状態変化を確認

```
watch kubectl describe gameserver
```

IPアドレスの取得

```
kubectl get gs
```

(3)netcat が実行可能なAKSと同一ネットワークにあるVMなどからコマンドを実行し
　ゲームサーバと通信できることを確認

```
nc -u {IP} {PORT}
```

各ゲームエンジンに対応したSDKも用意されているので、それぞれのSDKを使ったゲームサーバの挙動もそのうち試したい