【CEDEC 2020】ポケラボが『アサルトリリィ Last Bullet』に「Kubernetes」に導入した理由…これで大規模サービスを安全かつスピーディに開発できる!?
コンピュータエンターテインメント協会(CESA)は、9月2日~4日の期間、オンラインにて、国内最大のゲーム開発者向けカンファレンス「コンピュータ・エンターテインメント・デベロッパーズ・カンファレンス 2020」(CEDEC 2020)を開催した。
本稿では、9月3日に実施された講演「アサルトリリィ Last Bullet」~Kubernetes導入の軌跡~」のレポートをお届けしていく。
セッションには、ポケラボ ゲーム事業本部エンジニアマネージャーを務める髙田広氏が登壇。今冬リリース予定の『アサルトリリィ Last Bullet』(以下、『ラスバレ』)に導入されているオーケストレーションツール「Kubernetes」について、導入メリットや手順、課題に対する解決策の紹介が行われた。
▲髙田広氏。2014年、ポケラボに入社。『戦乱のサムライキングダム』、『AKB48ステージファイター2 バトルフェスティバル』に携わる。現在、新規プロジェクト『アサルトリリィ Last Bullet』を開発中。
今冬リリース予定の新規ゲームアプリ『ラスバレ』では、ポケラボで初めて「Kubernetes」が導入されている。Kubernetesとは、コンテナ型仮想化ソフトウェア「Docker」を効率よく管理自動化するためのオーケストレーションツールのこと。オートスケーリングや障害時のセルフヒーリング、死活監視など、多くの機能を兼ね備えており、本番運用に当たってコンテナの管理や自動化を行ってくれるツールだ。
Kubernetesを導入するメリットについて髙田氏は、ローカルPC・パブリッククラウト・各種環境にて動作が保証されているというポータビリティ性を挙げる。さらに、ミドルウェア・インフラ構成の設定値をコード化でき、保守性が上がるといったメリットを挙げ、アプリケーションをマイクロサービス化し、大規模なサービスを安全かつスピーディな開発できると続けた。
▲個性豊かな少女たちを操作し、未知の生命体HUGE(ヒュージ)との戦闘を繰り返しながら、物語の核心へと迫っていく『ラスバレ』。ストーリーモードでは、テレビアニメ『アサルトリリィ ブーケ』とリンクした物語が展開する。
●開発環境で動かすまでの歩みについて
髙田氏は開発について、DockerComposeを用いて自社PHPフレームワークでのDB・Memcachedの疎通確認を行えるようにしたことから始めたと説明。苦労した点について、自社PHPフレームワークをベースにappサーバのdockerfileを作成したが、必要なPHP拡張モジュールが足りなかったりとトライ&エラーが続いたと振り返った。
続いて、Kubernetesマニフェストファイルを作成し、疎通確認を開始する作業に入る。マニフェスト管理をしやすくするためにkustomizeのツールを導入し、ローカル環境を構築していく。
▲Kubernetesの各リソースを図に表したもの。ネームスペースをローカルのプレフィックスを付けて定義している。各種役割は、ラベル図のロールで指定している。
AWS開発環境の個人環境の構築は、AWSのVPC設定、EKSクラスタ、EC Node構築はインフラチームにて対応。DBとCacheは実績のあるマネージドサービスであるAurora、ElastiCacheで構築しているそうだ。
▲各種リソースを図に表したもの。ローカル環境の違いとして、イングレスにalbを用いている点が挙げられる。外部アクセスの許可について、IPアドレス指定でイングレスに指定する形をとっている。
ログ収集のアプリケーションログの分割は、access_logとphp error_logを分割するためにサイドカー方式でログ用コンテナを作成。また、stemコマンドをインストールして、コンテナシテでログを閲覧できるようにしたと話した。
分析用ログの転送については、ポケラボでは分析チームが構築したAWS環境が別にあり、DeamonSetを利用して各ノードにfluentdのPotを起動し、外部サービスに分析用ログを転送を行っていると続けた。
Jenkinsを用いたDepioyは、開発者がソースコードを変更してJenkins側でソースコードを取得し、マニフェストファイルを得た後にimageのタグをソースコードのコミットハッシュに書き換えて反映を行ったと説明。その後、ECRにimageを反映し、Applicationへ適応させたと述べた。
●Kubernetesを用いたゲーム開発における課題点と解決方法
Kubernetesを用いたゲーム開発の課題として、外部からアクセスできるAWSの個人環境にてコード修正する際に、即時反映するのに時間がかかるという点が挙げられる。主にマルチ機能をスマートフォンで確認する際にECRへの反映に時間がかかってしまうため、リソースを修正してから確認するまでの時間がかかっているという課題だ。
その解決策として髙田氏は、Telepresenceを利用してリモートクラスターのDeploymentをローカルサーバーと置き換える手順をとったそうだ。Telepresenceはリモートクラスタで動くプロセスやコンテナをローカルクラスタ内で動かせること、リモートクラスターにローカルからアクセスできるといった利点がある。
▲EKSクラスタ上で構築したAWS個人環境を、ローカル環境と置き換える動きが可能となった。
また、同一の課題について、serveoを用いてローカルPC上に構築したWeb環境を外部に公開するといった対策も行っているという。serveoを利用すると、ローカルPC上に構築したWeb環境を外部に公開するためのリバースプロキシと下の動きを利用ができる。serveoサーバーへSSHトンネリングを行うことで、外部からのアクセスをローカルPCに転送する形をとるというわけだ。
▲serveo用のEC2サーバを立ち上げて、SSHトンネリングを用いて外部からのアクセスを可能としている。
他にも、AWSが提供するVPC内のDNSサーバーの制限により、DNS名前解決に失敗するといったケースがあった。この解決策として髙田氏は、接続先のエンドポイントの末尾にドットをつけ、searchによる補完を回避、またはDNSのpod数を増やし、kube-dnsのオートスケール対応を行ったと説明。
定時処理が多く、CronJobを用いるとマニフェストファイルが冗長的になってしまうという課題については、cron.dにジョブを作成し従来通りcron.dにジョブを記載したと紹介。次の手法が従来のプロジェクトと同じくBatch用のEC2サーバーを用意し、カスタマイズにてテンプレート化を行い、冗長化を緩和しCronJobを用いて定時処理を行ったそうだ。
最後に髙田氏は、「Kubernetesは機能が豊富で関数変化が激しいため、知見を深めつつ日々情報収集がをする必要がある」とまとめ、セッションを終了とした。
(取材・文 ライター:島中一郎)
■『アサルトリリィ Last Bullet』
©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト
©AZONE INTERNATIONAL・acus/舞台アサルトリリィプロジェクト
©Pokelabo, Inc. © bushiroad ©Tokyo Broadcasting System Television, Inc. ©Shaft
会社情報
- 会社名
- 株式会社ポケラボ
- 設立
- 2007年11月
- 代表者
- 代表取締役社長 前田 悠太