クラスタのスケーリング動作の構成

このページでは、デプロイメントのスケーリング動作を指定する Game Servers 構成ファイルを作成し、管理する方法について説明します。スケーリング構成は、レルム内の特定の Game Servers クラスタにのみターゲット設定するようにカスタマイズできます。

始める前に

始める前に、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 は、クライアント ライブラリを使用して、プログラムで制御できます。ライブラリと認証の手順については、クライアント ライブラリの概要をご覧ください。

Config を作成する

Game Servers のデプロイメントを作成していることを確認します。

Google Cloud CLI を使用して、デプロイメントに Game Servers の構成ファイルを作成できます。

Game Servers の構成ファイルを作成するには:

  1. 次のフリート仕様をファイルにコピーします。

    - 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
    
  2. 次のスケーリング構成ファイルの仕様をファイルにコピーします。

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. 次のコマンドを実行します。deploymentIDconfigID などのプレースホルダ値は、適切な値に置き換えます。

    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 クラスタに制限する必要がある場合があります。これを行うには、クラスタにラベルを追加し、次にスケーリング構成でそのラベルを持つクラスタのみをターゲット設定します。

手順は次のとおりです。

  1. クラスタを更新して、ラベルを追加します。ラベルは、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 は、クラスタのリージョンです。親レルムと同じリージョンを選択します。

  2. Config を作成するセクションの手順に沿って構成を作成し、スケーリング構成の仕様にラベルを追加します。例:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. 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
    

次のステップ