Verhalten der Clusterskalierung konfigurieren

Auf dieser Seite wird erläutert, wie Sie eine Game Servers-Konfiguration erstellen und verwalten, die das Skalierungsverhalten einer Bereitstellung angibt. Die Skalierungskonfiguration kann so angepasst werden, dass sie nur auf bestimmte Game Servers-Cluster abzielt.

Hinweis

Bevor Sie beginnen, sollten Sie sich mit den wichtigsten Konzepten in der Übersicht über Game Servers vertraut machen. Führen Sie außerdem die folgenden Aufgaben aus:

  • Prüfen Sie, ob die Game Services API aktiviert ist.
  • Spieledienst-API aktivieren
  • Wählen Sie eine Shell mit installierter gcloud CLI aus oder verwenden Sie einen API-Client:
  • Cloud Shell

    So starten Sie Cloud Shell:

    1. Rufen Sie die Google Cloud Console auf.

      Google Cloud Console

    2. Klicken Sie in der oberen rechten Ecke der Console auf die Schaltfläche Cloud Shell aktivieren:

    In einem Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet. Mit dieser Shell führen Sie gcloud-Befehle aus.

    Lokale Shell

    Installieren Sie die gcloud CLI.

    Prüfen Sie, ob Sie das gewünschte Standardprojekt für die Google Cloud CLI festgelegt haben. Andernfalls müssen Sie das Flag --project später für jeden Befehl explizit angeben:

    gcloud config list project
    

    Wenn Sie den folgenden Befehl nicht ausführen können, um ein Standardprojekt festzulegen, ersetzen Sie PROJECT_ID durch Ihre gewünschte Projekt-ID:

    gcloud config set project PROJECT_ID
    

    Führen Sie den folgenden Befehl aus, um Ihre Version der Google Cloud CLI zu verifizieren. Für Game Servers ist Version 306.0.0 oder höher der gcloud CLI erforderlich.

    gcloud version
    

    Aktualisieren Sie Ihre Installation mit dem folgenden Befehl:

    gcloud components update
    

    curl / PowerShell

    So verwenden Sie die REST API mit curl oder Windows PowerShell:

    1. Erstellen Sie ein Dienstkonto:
    2. Laden Sie einen privaten Schlüssel als JSON-Datei herunter.
    3. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS auf den Pfad der JSON-Datei fest, die Ihre Anmeldedaten enthält. Diese Variable gilt nur für Ihre aktuelle Shell-Sitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable neu festlegen.

    Clientbibliothek

    Google Cloud Game Servers können mithilfe einer Clientbibliothek programmatisch gesteuert werden. Wie Sie die Bibliothek und die Authentifizierung verwenden, erfahren Sie in der Übersicht zu Clientbibliotheken.

Konfiguration erstellen

Sie müssen ein Game Servers Deployment erstellt haben.

Sie können eine Game Servers-Konfiguration in einer Bereitstellung mit der Google Cloud CLI erstellen.

So erstellen Sie eine Game Servers-Konfiguration:

  1. Kopieren Sie die folgende Fleet-Spezifikation in eine Datei:

    - 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. Kopieren Sie die folgende Spezifikation der Skalierungskonfiguration in eine Datei:

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. Führen Sie den folgenden Befehl aus und ersetzen Sie die Platzhalterwerte wie deploymentID und configID durch die entsprechenden Werte:

    gcloud game servers configs create configID --deployment deploymentID --fleet-configs-file fleetSpecFile --scaling-configs-file scalingConfigsFile
    

    Die Variablenplatzhalter entsprechen den folgenden Beschreibungen:

  • configID ist eine eindeutige Kennung, die Sie für diese Konfiguration angeben können.
  • deploymentID ist die eindeutige Kennung für die Bereitstellung.
  • fleetSpecFile ist der Pfad zur Datei mit der Agones Fleet-Spezifikation.
  • scalingConfigsFile ist der Pfad zur Datei mit der Skalierungsspezifikation.

Konfiguration für eine Bereitstellung festlegen

Nachdem Sie eine Game Servers-Konfiguration mit einer Skalierungsrichtlinie erstellt haben, legen Sie diese als Standardkonfiguration fest. Aktualisieren Sie dazu das Rollout für die Game Servers-Bereitstellung.

Game Servers wendet das Skalierungsverhalten auf alle Cluster an.

Skalierungsspezifikationen prüfen

Führen Sie den folgenden Befehl für jeden Cluster innerhalb des Bereichs aus, um festzustellen, ob Game Servers die konfigurierte Skalierung auf einen Cluster angewendet hat. Ersetzen Sie den Platzhalter namespace durch den Namespace, den Sie bei der Registrierung des Kubernetes-Clusters als Game Servers-Cluster angegeben haben:

   kubectl get fleetautoscaler --namespace namespace
   

Die Variablenplatzhalter entsprechen den folgenden Beschreibungen:

  • namespace ist der Namespace, den Sie bei der Registrierung verwendet haben.

Nur bestimmte Cluster skalieren

Es kann sinnvoll sein, die Skalierungskonfiguration auf bestimmte Game Servers-Cluster zu beschränken. Dies erreichen Sie, indem Sie Clustern ein Label hinzufügen und dann nur die Cluster mit dem Label in der Skalierungskonfiguration ansprechen.

Gehen Sie so vor:

  1. Aktualisieren Sie den Cluster, um ein Label hinzuzufügen. Labels sind Schlüssel/Wert-Paare im Format key=value. In diesem Beispiel geben Sie das Label als --labels=cloud=true an.

    gcloud game servers clusters update gscID --realm=realmID --location=region \
      --update-labels=labels --no-dry-run
    

    Die anderen Platzhalter für Variablen entsprechen folgenden Beschreibungen:

    • gscID ist eine eindeutige Kennung, die Sie für diesen Cluster angeben können.
    • realmID ist die eindeutige Kennung für den Bereich, in dem Sie den Cluster speichern möchten.
    • region ist die Region des Clusters. Wählen Sie dieselbe Region aus wie die des übergeordneten Bereichs.

  2. Erstellen Sie eine Konfiguration. Folgen Sie dazu den Schritten im Abschnitt Konfiguration erstellen und fügen Sie das Label der Spezifikation der Skalierungskonfiguration hinzu. Beispiel:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Legen Sie die Konfiguration als Standardkonfiguration fest. Aktualisieren Sie dazu das Rollout für die Game Servers-Bereitstellung.

Game Servers wendet Skalierungskonfigurationen nur auf Game Servers-Cluster an, deren Label mit dem Labelselektor in der Skalierungskonfiguration übereinstimmt. In diesem Beispiel erhalten alle Cluster mit dem Label cloud=true eine Skalierungskonfiguration. Alle Cluster ohne dieses Label erhalten keine Skalierungskonfiguration.

Skalierungspläne erstellen

Mit Game Servers können Sie mehrere Skalierungspläne konfigurieren. Sie können mehrere Skalierungspläne konfigurieren, die Start- und optionale Endzeiten sowie wiederkehrende Pläne beinhalten. Diese werden als Cron-Pläne bezeichnet. Es ist auch möglich, mehrere und wiederkehrende Pläne zu kombinieren.

Game Servers wertet die Start- und Endzeit in der koordinierten Weltzeit (Coordinated Universal Time, UTC) aus. Andere Zeitzonen werden basierend auf der Abweichung von UTC unterstützt. Die Start- und Endzeiten werden als Datumsstrings im Format RFC 3339 formatiert. Die geringste Genauigkeit, die Game Servers unterstützt, sind Minuten.

Game Servers wertet die Skalierungspläne in der Reihenfolge aus, in der sie in einer Konfiguration aufgeführt sind, bis ein passender Skalierungsplan gefunden wird. In diesem Abschnitt werden verschiedene Planungsbeispiele beschrieben.

Mehrere Skalierungspläne erstellen

Sie können die folgende Skalierungsplanspezifikation für besondere Ereignisse anpassen. In diesem Beispiel wendet Game Servers folgende Skalierungspläne an:

  • scaling-config-june1-and-7 am 1. Juni 2020 zwischen 17:00 Uhr und 22:30 Uhr sowie am 7. Juni 2020 zwischen 12:00 und 18:00 Uhr
  • Die scaling-config-default-Standardkonfiguration für alle anderen Zeiten zwischen dem 25. Mai 2020 und dem 31. Mai 2021

    - 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
    

Wiederkehrende Skalierungspläne erstellen

Die folgende Beispielspezifikation veranschaulicht einen wiederkehrenden Cron-Skalierungszeitplan, um die Kapazität während der Spitzenzeiten zu bewältigen. In diesem Beispiel wendet Game Servers folgende Skalierungspläne an:

  • scaling-config-weekday-peak an Wochentagen zwischen 17:00 und 20:00 Uhr
  • scaling-config-weekend-peak an Wochenenden zwischen 13:00 und 17:00 Uhr
  • Standardmäßige scaling-config-default-Konfiguration zu allen anderen Zeiten

    - 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
    

Mehrere wiederkehrende Skalierungspläne erstellen

Die Skalierungsspezifikationen können sowohl Start- als auch Endzeitfelder sowie einen wiederkehrenden Cron-Zeitplan enthalten. In diesem Beispiel wendet Game Servers folgende Skalierungspläne an:

  • scaling-config-july4 vom 4. Juli bis zum 7. Juli zwischen 9:00 Uhr und 23:00 Uhr
  • scaling-config-peak täglich zwischen 17:00 und 22:00 Uhr
  • Standardmäßige scaling-config-default-Konfiguration zu allen anderen Zeiten

    - 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
    

Nächste Schritte