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にできたのでそのご紹介をできればと思います。
サンプルのリポジトリは下記になります。
このサンプルで構築できるAgonesのクラスタの大きな特徴は下記のとおりです。
1. Agonesの複数クラスタのサポート
大規模なゲームだと1台のゲームサーバーですべてのユーザーのトラフィックをさばくことはほぼ不可能です。
Agonesは複数のゲームサーバーを管理することが可能です。
本サンプルでは、routing専用のclusterを1つ用意し、複数のゲームサーバーに振り分けできるようにしています。
このサンプルでは、2つのゲームサーバーを構築するようになっています。
2. Karpenterのサポート
本サンプルでは、EKSのクラスターオートスケーラーとしてKarpenterを利用しています。
Karpenterは Kubernetes Cluster Autoscalerの代わりになるものです。
柔軟で高速なコンピューティングリソースを提供することができます。
ここではKarpenterについての詳細には触れませんので、下記サイトなどを参照いただければと思います。
AgonesのPodの配置戦略として Packed
を利用する場合、Pod Affinityを利用します。
Karpenterはv0.9.0でPod Affinityについてサポートされたので、v0.9.0以降であればKarpenterは利用可能です。
Karpenterの設定については下記PRを参照ください。
Agones以外での、Terraformを使ったKarpenterの設定の参考にもなるかと思います。
3. ARM(Graviton2)のサポート
このサンプルでは、すべてのNodeがGraviton2で構築されています。
Agonesは 1.23、1.24でARM対応を行っています。
これに伴いGraviton2でもAgonesを動かすことが可能となりました。
Graviton2を使うことで、コスト最適化だけでなくワークロードによってはパーフォマンス向上も見込める可能性があります。
こちらについては、ぜひそれぞれの環境で負荷試験して試していただければと思います。
負荷試験のクレジットなどは、お近くのAWS SAまで聞いてみてください。
4. Amazon CloudWatchを使ったAgonesのダッシュボードの作成
AgonesのメトリックスをCloudWatchでみれるサンプルもつけています。
ダッシュボードを簡単に構築するためのJSONはレポジトリのexmapleディレクトリ配下に入っていますので、ぜひ使ってみてください。 github.com
構築方法
本サンプルはTerraformを利用して構築を行います。
セットアップ方法は下記手順を参考に実施をお願いします。
さいごに
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