CubicLouve

Spring_MTの技術ブログ

KarpenterとGraviton2を使った大規模ゲーム向けAgones on EKS を立ち上げるサンプル multi-cluster-allocation-demo-for-agones-on-eks の紹介

この記事はAWS for Games Advent Calendar 2022の19日目の記事です。

@Spring_MT と言います。

今回は、AgonesをEKS上で動かすためのサンプルを作ったので、そのご紹介ができればと思います。

Agones

Agonesはマルチプレーヤーゲーム用のDedicated Game Server(DGS)をKubernetes上で動かすためのOSSです。

Agones自体の説明はいろいろな記事で紹介されているので本エントリーでの詳細な説明は省きます。

このAgonesをAWSのEKSを使って運用するためのベースとなるサンプルがaws-samplesにできたのでそのご紹介をできればと思います。

サンプルのリポジトリは下記になります。

github.com

このサンプルで構築できるAgonesのクラスタの大きな特徴は下記のとおりです。

  1. Agonesの複数クラスタのサポート
  2. Karpenterのサポート
  3. ARM(Graviton2)のサポート
  4. Amazon CloudWatchを使ったAgonesのダッシュボードの作成

1. Agonesの複数クラスタのサポート

大規模なゲームだと1台のゲームサーバーですべてのユーザーのトラフィックをさばくことはほぼ不可能です。

Agonesは複数のゲームサーバーを管理することが可能です。

agones.dev

github.com

本サンプルでは、routing専用のclusterを1つ用意し、複数のゲームサーバーに振り分けできるようにしています。

https://github.com/aws-samples/multi-cluster-allocation-demo-for-agones-on-eks/raw/main/imgs/overview.png

このサンプルでは、2つのゲームサーバーを構築するようになっています。

2. Karpenterのサポート

本サンプルでは、EKSのクラスターオートスケーラーとしてKarpenterを利用しています。

Karpenterは Kubernetes Cluster Autoscalerの代わりになるものです。

柔軟で高速なコンピューティングリソースを提供することができます。

ここではKarpenterについての詳細には触れませんので、下記サイトなどを参照いただければと思います。

aws.amazon.com

karpenter.sh

AgonesのPodの配置戦略として Packed を利用する場合、Pod Affinityを利用します。

Karpenterはv0.9.0でPod Affinityについてサポートされたので、v0.9.0以降であればKarpenterは利用可能です。

Karpenterの設定については下記PRを参照ください。

Feature/karpenter by SpringMT · Pull Request #7 · aws-samples/multi-cluster-allocation-demo-for-agones-on-eks · GitHub

Agones以外での、Terraformを使ったKarpenterの設定の参考にもなるかと思います。

3. ARM(Graviton2)のサポート

このサンプルでは、すべてのNodeがGraviton2で構築されています。

Agonesは 1.23、1.24でARM対応を行っています。

これに伴いGraviton2でもAgonesを動かすことが可能となりました。

Graviton2を使うことで、コスト最適化だけでなくワークロードによってはパーフォマンス向上も見込める可能性があります。

aws.amazon.com

こちらについては、ぜひそれぞれの環境で負荷試験して試していただければと思います。

負荷試験のクレジットなどは、お近くのAWS SAまで聞いてみてください。

4. Amazon CloudWatchを使ったAgonesのダッシュボードの作成

AgonesのメトリックスをCloudWatchでみれるサンプルもつけています。

https://github.com/aws-samples/multi-cluster-allocation-demo-for-agones-on-eks/raw/main/imgs/dashboard.png

ダッシュボードを簡単に構築するためのJSONはレポジトリのexmapleディレクトリ配下に入っていますので、ぜひ使ってみてください。 github.com

構築方法

本サンプルはTerraformを利用して構築を行います。

セットアップ方法は下記手順を参考に実施をお願いします。

GitHub - aws-samples/multi-cluster-allocation-demo-for-agones-on-eks: Terraform code to deploy multi-cluster configuration Agones on Amazon EKS

さいごに

AgonesはAWS上で動かすことは可能です。

さらに、このサンプルを使うことで、AWSの最大のメリットといってもよいGraviton2(さらにはGraviton3)を使うことができるうえに、Karpenterを使いリソースを最適化することができます。

ぜひこのサンプルを触っていただき、AgonesをEKSで動かしてみてはいかがでしょうか?

このサンプルを試したあとは必ずclean upをお忘れなく。

https://github.com/aws-samples/multi-cluster-allocation-demo-for-agones-on-eks#clean-up