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

このページでは、デプロイメントのスケーリング動作を指定する Game Servers 構成ファイルを作成し、管理する方法について説明します。

始める前に

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

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

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

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

      Google Cloud Console

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

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

    ローカルシェル

    gcloud をインストールするには、Cloud SDK をインストールします。これには、gcloud コマンドライン ツールが含まれています。

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

    gcloud config list project
    

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

    gcloud config set project project-id
    

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

    gcloud version
    

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

    gcloud components update
    

    クライアント ライブラリ

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

Config を作成する

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

デプロイメントに Game Servers の構成ファイルを作成するには、gcloud コマンドライン ツールを使用します。

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 では、複数のスケーリング スケジュールを構成できます。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
    

次のステップ