このページでは、デプロイメントのスケーリング動作を指定する Game Servers 構成ファイルを作成し、管理する方法について説明します。スケーリング構成は、レルム内の特定の Game Servers クラスタにのみターゲット設定するようにカスタマイズできます。
始める前に
始める前に、Game Servers の概要の主なコンセプトを理解しておくことをおすすめします。次のタスクも完了していることを確認してください。
- Game Services API が有効になっていることを確認します。 Game Services API を有効にする
- gcloud CLI がインストールされているシェルを選択するか、API クライアントを使用します。
Google Cloud Console に移動します。
コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン をクリックします。
- サービス アカウントを作成する。
- 秘密鍵を JSON ファイルとしてダウンロードします。
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
Cloud Shell
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 で使用するには、次の操作を行います。
クライアント ライブラリ
Google Cloud Game Servers は、クライアント ライブラリを使用して、プログラムで制御できます。ライブラリと認証の手順については、クライアント ライブラリの概要をご覧ください。
Config を作成する
Game Servers のデプロイメントを作成していることを確認します。
Google Cloud CLI を使用して、デプロイメントに Game Servers の構成ファイルを作成できます。
Game Servers の構成ファイルを作成するには:
次のフリート仕様をファイルにコピーします。
- name: fleet-spec-1 fleetSpec: replicas: 0 scheduling: Packed strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25% template: metadata: labels: gameName: udp-server spec: ports: - name: default portPolicy: Dynamic containerPort: 7654 protocol: UDP health: initialDelaySeconds: 30 periodSeconds: 60 sdkServer: logLevel: Info grpcPort: 9357 httpPort: 9358 template: spec: containers: - name: dedicated image: gcr.io/agones-images/udp-server:0.21 imagePullPolicy: Always resources: requests: memory: 200Mi cpu: 500m limits: memory: 200Mi cpu: 500m
次のスケーリング構成ファイルの仕様をファイルにコピーします。
- name: scaling-config-1 fleetAutoscalerSpec: policy: type: Buffer buffer: bufferSize: 1 minReplicas: 0 maxReplicas: 4
次のコマンドを実行します。deploymentID や configID などのプレースホルダ値は、適切な値に置き換えます。
gcloud game servers configs create configID --deployment deploymentID --fleet-configs-file fleetSpecFile --scaling-configs-file scalingConfigsFile
変数のプレースホルダは、次の説明のとおりです。
- configID は、この構成ファイルに指定できる一意の ID です。
- deploymentID は、デプロイメントの一意の ID です。
- fleetSpecFile は、Agones フリート仕様を含むファイルへのパスです。
- scalingConfigsFile は、スケーリング仕様を含むファイルへのパスです。
デプロイメントの構成ファイルの設定
スケーリング ポリシーを使用して Game Servers 構成ファイルを作成した後、Game Servers デプロイメントのロールアウトを更新して、その構成ファイルをデフォルトの構成ファイルとして設定します。
Game Servers は、すべてのクラスタにスケーリング動作を適用します。
スケーリング仕様の確認
構成されたスケーリングが Game Servers によってクラスタに適用されているかどうかを判断するには、レルム内の各クラスタに対して次のコマンドを実行します。namespace プレースホルダを、Kubernetes クラスタを Game Servers クラスタとして登録するときに指定した Namespace に置き換えます。
kubectl get fleetautoscaler --namespace namespace
変数のプレースホルダは、次の説明のとおりです。
- namespace は、登録に使用した Namespace です。
特定のクラスタのみスケーリング
スケーリング構成を、レルムの特定の Game Servers クラスタに制限する必要がある場合があります。これを行うには、クラスタにラベルを追加し、次にスケーリング構成でそのラベルを持つクラスタのみをターゲット設定します。
手順は次のとおりです。
クラスタを更新して、ラベルを追加します。ラベルは、
key=value
の形式の Key-Value ペアです。この例では、ラベルを--labels=cloud=true
として指定します。gcloud game servers clusters update gscID --realm=realmID --location=region \ --update-labels=labels --no-dry-run
変数のプレースホルダは、次の説明のとおりです。
- gscID は、このクラスタに指定できる一意の ID です。
- realmID は、クラスタを保存するレルムの一意の ID です。
region は、クラスタのリージョンです。親レルムと同じリージョンを選択します。
Config を作成するセクションの手順に沿って構成を作成し、スケーリング構成の仕様にラベルを追加します。例:
- name: scaling-config-1 fleetAutoscalerSpec: policy: type: Buffer buffer: bufferSize: 1 minReplicas: 0 maxReplicas: 4 selectors: - labels: "cloud": "true"
Game Servers デプロイのロールアウトを更新して、構成ファイルをデフォルトの構成ファイルとして設定します。
Game Servers によって、スケーリング構成のラベルセレクタに一致するラベルを持つ Game Servers クラスタにのみスケーリング構成が適用されます。この例では、cloud=true
とラベル付けされたクラスタにはスケーリング構成が付与され、そのラベルのないクラスタはスケーリング構成が付与されません。
スケーリング スケジュールの作成
Game Servers では、複数のスケーリング スケジュールを構成できます。cron スケジュールと呼ばれる、開始時刻と終了時刻、または定期的なスケジュールを含む複数のスケーリング スケジュールを構成できます。複数の定期的スケジュールを組み合わせることもできます。
Game Servers では、協定世界時(UTC)で開始時刻と終了時刻が評価されます。他のタイムゾーンは、UTC のオフセットとしてサポートされます。開始時刻と終了時刻は、RFC 3339 の日付文字列形式になります。Game Servers がサポートする最小の精度は分です。
Game Servers は、一致するスケジュールが見つかるまで構成に一覧表示された順序でスケーリング スケジュールを評価します。このセクションでは、さまざまなスケジューリングの例を紹介します。
複式スケーリング スケジュールの作成
特別なイベントに対して、次のようなスケーリング スケジュール仕様を調整できます。この例では、Game Servers によって次のスケーリング スケジュールが適用されます。
scaling-config-june1-and-7
では、2020 年 6 月 1 日 17:00 から 22:30 までと、2020 年 6 月 7 日 12:00 から 18:00 までデフォルトの
scaling-config-default
構成ファイルでは、2020 年 5 月 25 日から 2021 年 5 月 31 日までの期間で、上記の日時以外のすべての時間- name: scaling-config-june1-and-7 schedules: - startTime: "2020-06-01T17:00:00Z" endTime: "2020-06-01T22:30:00Z" - startTime: "2020-06-07T12:00:00Z" endTime: "2020-06-07T18:00:00Z" fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 100 minReplicas: 10 bufferSize: 5 - name: scaling-config-default schedules: - startTime: "2020-05-25T00:00:00Z" endTime: "2021-05-31T00:00:00Z" fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 5 minReplicas: 1 bufferSize: 1
定期スケーリング スケジュールの作成
次の仕様は、ピーク時に容量の増加を処理する、定期的な cron スケーリング スケジュールを示しています。この例では、Game Servers によって次のスケーリング スケジュールが適用されます。
scaling-config-weekday-peak
では、平日の 17:00 から 20:00 までscaling-config-weekend-peak
では、週末の 13:00 から 17:00 までデフォルトの
scaling-config-default
構成ファイルでは、上記以外のすべての時間- name: scaling-config-weekday-peak schedules: - cronJobDuration: 3600s cronSpec: '0 17-20 * * 1-5' fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 100 minReplicas: 10 bufferSize: 5 - name: scaling-config-weekend-peak schedules: - cronJobDuration: 3600s cronSpec: '0 13-17 * * 0,6' fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 150 minReplicas: 20 bufferSize: 10 - name: scaling-config-default fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 5 minReplicas: 1 bufferSize: 1
複式定期スケーリング スケジュールの作成
スケーリング仕様には、開始時間と終了時間の両方のフィールドのほか、定期的な cron スケジュールを含めることができます。この例では、Game Servers によって次のスケーリング スケジュールが適用されます。
scaling-config-july4
では、7 月 4 日から 7 月 7 日までの 9:00 から 23:00 までscaling-config-peak
では、毎日 17:00 から 22:00 までデフォルトの
scaling-config-default
構成ファイルでは、上記以外のすべての時間- name: scaling-config-july4 schedules: - cronJobDuration: 3600s cronSpec: '0 9-18 * * *' startTime: "2020-07-04T00:00:00Z" endTime: "2020-07-07T00:30:00Z" fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 150 minReplicas: 10 bufferSize: 5 - name: scaling-config-peak schedules: - cronJobDuration: 3600s cronSpec: '0 17-22 * * *' fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 100 minReplicas: 10 bufferSize: 5 - name: scaling-config-default fleetAutoscalerSpec: policy: type: Buffer buffer: maxReplicas: 40 minReplicas: 5 bufferSize: 4
次のステップ
構成ファイルをロールアウトする方法を学習する。
構成ファイルを削除する方法を学習する。