Agones のアップグレード

このページでは、Game Servers クラスタの Agones を安全にアップグレードする方法について説明します。

始める前に

始める前に、Game Servers の概要の主なコンセプトを理解しておくことをおすすめします。次のタスクも完了していることを確認してください。

  • Game Services API が有効になっていることを確認します。
  • Game Services API を有効にする
  • gcloud CLI がインストールされているシェルを選択するか、API クライアントを使用します。
  • Cloud Shell

    Cloud Shell を起動するには、次の手順に従います。

    1. Google Cloud Console に移動します。

      Google Cloud Console

    2. コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン をクリックします。

    コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud コマンドを実行します。

    ローカルシェル

    gcloud CLI をインストールします。

    Google Cloud CLI に必要なデフォルトのプロジェクトが設定されていることを確認します(設定されていない場合、後でコマンドごとに --project フラグを明示的に指定する必要があります)。

    gcloud config list project
    

    デフォルト プロジェクトを設定していない場合は、次のコマンドを実行して、デフォルト プロジェクトを設定します。PROJECT_ID は、設定するプロジェクト ID に置き換えてください。

    gcloud config set project PROJECT_ID
    

    次のコマンドを実行して、Google Cloud CLI のバージョンを確認します。Game Servers には、gcloud CLI のバージョン 306.0.0 以降が必要です。

    gcloud version
    

    インストールを更新するには、次のコマンドを実行します。

    gcloud components update
    

    curl / PowerShell

    REST API を curl または Windows PowerShell で使用するには、次の操作を行います。

    1. サービス アカウントを作成する。
    2. 秘密鍵を JSON ファイルとしてダウンロードします。
    3. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、認証情報を含む JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定する必要があります。

    クライアント ライブラリ

    Google Cloud Game Servers は、クライアント ライブラリを使用して、プログラムで制御できます。ライブラリと認証の手順については、クライアント ライブラリの概要をご覧ください。

アップグレードを計画する

新しい Game Servers クラスタをレルムに追加してから、古いクラスタを削除することで、Agones アップグレードを行うことをおすすめします。この方法には次のメリットがあります。

  1. メンテナンスの時間枠なしでアップグレードを行う際、新しいクラスタを作成することは、Agones プロジェクトで推奨されているベスト プラクティスと一致します。この方法により、クラスタ上でゲームが実行されている間での Agones のアップグレードに関連する潜在的な問題を回避できます。
  2. Kubernetes または Google Kubernetes Engine のノードを実際に試してアップグレードする必要はありません。サービスのノードの削除に関する問題などを回避できます。
  3. 単一のオペレーションとしての Kubernetes と Agones の新しいバージョンを含む、アップグレード プロセスの一部として多数のコンポーネントのテストを行い、そのコンポーネントを一緒に本番環境にロールアウトできます。

カナリア アップグレードを計画する

本番環境に適用する前に、新しい Agones バージョンを非本番環境で必ずテストしてください。新しい Agones バージョンを検証したら、本番環境でカナリア レルムをアップグレードすることから始めます。カナリア アップグレードとは、最初に 1 つまたは少数のレルムに適用されるアップグレードのことです。カナリア アップグレードでは、潜在的な問題を含むアップグレードをすべてのレルムに対して行うのではなく、インフラストラクチャのごく一部で新しい機能をテストできます。アップグレードがうまくできない場合は、ユーザーへの中断を最小限に抑え、影響を受けたレルムをロールバックできます。指定されたカナリア レルムがない場合は、トラフィックが最も少ないレルムを選択します。

アップグレードを実行する

このセクションでは、旧版の Agones のクラスタから、アップグレード版の Agones クラスタに GameServer 割り当てを移行するためのアップグレード手順について説明します。このアップグレード手順は、新しいクラスタでマルチクラスタ割り当てが構成されていることを前提としています。

また、次の手順を行うことで、プレーヤーのエクスペリエンスの中断を最小限に抑えながら、本番環境で動作することがわかっている以前のインフラストラクチャに簡単にロールバックできます。

  1. 現在のクラスタと同じサイズの新しいクラスタを作成します。

  2. 互換性のある Kubernetes のバージョンがある新しいクラスタに、Agones の新しいバージョンをインストールします。サポートされているバージョンの一覧については、バージョンとアップグレードをご覧ください。

  3. レルムに新しいクラスタを登録します。これにより、レルムに登録された既存のクラスタと同様に、フリートとオートスケーラーのリソースが作成されます。フリートの準備ができると、一致した一部のプレーヤー ゲーム セッションが新しいクラスタに送信されます。

  4. 新しいバージョンの Agones を実行している新しいクラスタの安定性を確認したら、古いクラスタの登録を解除し、削除します。Game Servers クラスタを登録解除して削除すると、割り当てられたサーバー、フリート、フリート オートスケーラーの構成はそのまま残ります。実際の Kubernetes クラスタに対する目立った変更点として、Game Servers により管理されなくなったこと、およびマルチクラスタの割り当てに接続されなくなったことが挙げられます。Game Servers は、未登録のクラスタへの新しい割り当てリクエストの送信を停止します。

  5. 古いクラスタの関連するエンドポイントに直接アクセスされている場合で、古いクラスタに対する追加の割り当てを防ぐには、古いサーバーのアロケータ サービス内にあるすべてのポッドを削除します。

    kubectl scale --replicas=0 -n agones-system deployment/agones-allocator
    
  6. クラスタ内で割り当てられたサーバーがすでにない場合は、古いクラスタをシャットダウンします。割り当てられたサーバーの数を確認するには、次のコマンドを実行します。ここで、namespace は Kubernetes クラスタを Game Servers クラスタとして登録するときに使用した Namespace です。

    kubectl get fleet --namespace namespace
    
    NAME         SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
    fleet-1      Packed       10        10        0           10      2d23h
    
    

アップグレードが必要なクラスタごとに、このアップグレード手順を繰り返します。