Configurazione del comportamento di scalabilità del cluster

Questa pagina spiega come creare e gestire una config di Game Servers che specifica il comportamento di scalabilità di un deployment. La configurazione di scalabilità può essere personalizzata per scegliere come target solo specifici cluster di Game Servers in un'area di autenticazione.

Prima di iniziare

Prima di iniziare, ti consigliamo di acquisire familiarità con i concetti principali nella panoramica dei server di gioco. Assicurati di aver eseguito anche le seguenti attività:

  • Assicurati di aver attivato l'API Game Services.
  • Abilita l'API Game Services
  • Scegli una shell con gcloud CLI installata o utilizza un client API:
  • Cloud Shell

    Per avviare Cloud Shell, esegui questi passaggi:

    1. Vai alla console Google Cloud.

      Console Google Cloud

    2. Nell'angolo in alto a destra della console, fai clic sul pulsante Attiva Cloud Shell:

    Una sessione di Cloud Shell si apre all'interno di un frame più in basso nella console. Utilizza questa shell per eseguire i comandi gcloud.

    Shell locale

    Installare l'interfaccia a riga di comando gcloud.

    Verifica di aver impostato il progetto predefinito desiderato per Google Cloud CLI (in caso contrario dovrai specificare il flag --project in modo esplicito per ogni comando in un secondo momento):

    gcloud config list project
    

    In caso contrario, puoi eseguire il seguente comando per impostare un progetto predefinito, sostituendo PROJECT_ID con l'ID progetto desiderato :

    gcloud config set project PROJECT_ID
    

    Esegui il comando seguente per verificare la tua versione di Google Cloud CLI. Game Servers richiede la versione 306.0.0 o successiva dellgcloud CLI.

    gcloud version
    

    Per aggiornare l'installazione, esegui il comando seguente:

    gcloud components update
    

    curl / PowerShell

    Per utilizzare l'API REST con curl o Windows PowerShell, segui questi passaggi:

    1. Crea un account di servizio.
    2. Scarica una chiave privata come file JSON.
    3. Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso del file JSON che contiene le tue credenziali. Questa variabile si applica solo alla sessione di shell attuale. Pertanto, se apri una nuova sessione, imposta di nuovo la variabile.

    Libreria client

    I server di gioco Google Cloud possono essere controllati in modo programmatico utilizzando una libreria client. Per istruzioni sull'utilizzo della libreria e l'autenticazione, consulta la panoramica sulle librerie client.

Creazione di una configurazione

Assicurati di aver creato un deployment di Game Servers.

Puoi creare una configurazione di Game Servers in un deployment utilizzando Google Cloud CLI.

Per creare una configurazione del server di gioco:

  1. Copia la seguente specifica del parco risorse in un file:

    - 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. Copia la seguente specifica di configurazione di scalabilità in un file:

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. Esegui questo comando e sostituisci i valori segnaposto, ad esempio deploymentID e configID, con i valori appropriati:

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

    I segnaposto delle variabili corrispondono alle seguenti descrizioni:

  • configID è un identificatore univoco che puoi specificare per questa configurazione.
  • deploymentID è l'identificatore univoco del deployment.
  • fleetSpecFile è il percorso del file con la specifica del parco risorse Agones.
  • scalingConfigsFile è il percorso del file con la specifica di scalabilità.

Configurazione della configurazione di un deployment

Dopo aver creato una configurazione di Game Servers con un criterio di scalabilità, impostala come configurazione predefinita aggiornando l'implementazione per il deployment di Game Servers.

Game Servers applica il comportamento di scalabilità a tutti i cluster.

Verifica delle specifiche di scalabilità

Per determinare se Game Servers ha applicato la scalabilità configurata a un cluster, esegui il comando seguente per ogni cluster all'interno dell'area di autenticazione. Sostituisci il segnaposto namespace con lo spazio dei nomi specificato durante la registrazione del cluster Kubernetes come cluster di Game Servers:

   kubectl get fleetautoscaler --namespace namespace
   

I segnaposto delle variabili corrispondono alle seguenti descrizioni:

  • namespace è lo spazio dei nomi utilizzato per la registrazione.

Scala solo cluster specifici

Potresti voler limitare la configurazione della scalabilità a cluster di Game Servers specifici in un'area di autenticazione. Per farlo, aggiungi un'etichetta ai cluster e scegli come target solo i cluster con l'etichetta nella configurazione di scalabilità.

Segui questi passaggi:

  1. Aggiorna il cluster per aggiungere un'etichetta. Le etichette sono coppie chiave/valore nel formato key=value. Per questo esempio, specifica l'etichetta --labels=cloud=true.

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

    Gli altri segnaposto di variabili corrispondono alle seguenti descrizioni:

    • gscID è un identificatore univoco che puoi specificare per questo cluster.
    • realmID è l'identificatore univoco del regno in cui vuoi archiviare il cluster.
    • region è l'area geografica del cluster. Scegli la stessa area geografica dell'area di autenticazione principale.

  2. Crea una configurazione seguendo la procedura descritta nella sezione Creazione di una configurazione con la seguente aggiunta: aggiungi l'etichetta alla specifica di configurazione di scalabilità. Ad esempio:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Imposta la configurazione come predefinita aggiornando l'implementazione per il deployment di Game Servers.

Game Servers applica le configurazioni di scalabilità solo ai cluster di Game Servers con un'etichetta corrispondente al selettore di etichette nella configurazione di scalabilità. Quindi, in questo esempio, i cluster etichettati con cloud=true riceveranno una configurazione di scalabilità e tutti i cluster privi di tale etichetta non riceveranno una configurazione di scalabilità.

Creazione di pianificazioni di scalabilità

Game Servers consente di configurare più pianificazioni di scalabilità. Puoi configurare più pianificazioni di scalabilità che includono orari di inizio e di fine facoltativi o programmazioni ricorrenti, note come pianificazioni cron. Puoi anche combinare più pianificazioni ricorrenti.

Game Servers valuta le ore di inizio e fine nel fuso orario UTC (Coordinated Universal Time). Il fuso orario UTC è supportato anche per altri fusi orari. Le ore di inizio e di fine vengono formattate come stringhe di data RFC 3339. I Game Servers con la precisione più bassa sono di minuti.

Game Servers valuta le pianificazioni di scalabilità nell'ordine in cui sono elencate in una configurazione finché non viene trovata una pianificazione corrispondente. Questa sezione descrive una serie di esempi di pianificazione.

Creazione di più pianificazioni di scalabilità

Puoi adattare la seguente specifica di pianificazione della scalabilità per eventi speciali. In questo esempio, Game Servers applica le seguenti pianificazioni di scalabilità:

  • scaling-config-june1-and-7 dalle 17:00 alle 22:30 e dalle 00:00 alle 18:00 del 1° giugno 2020
  • La configurazione predefinita di scaling-config-default per tutti gli altri orari tra il 25 maggio 2020 e il 31 maggio 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
    

Creazione di pianificazioni di scalabilità ricorrenti

La specifica di esempio seguente illustra un programma di scalabilità cron ricorrente per gestire un aumento di capacità durante le ore di punta. In questo esempio, Game Servers applica le seguenti pianificazioni di scalabilità:

  • scaling-config-weekday-peak nei giorni feriali dalle 17:00 alle 20:00
  • scaling-config-weekend-peak durante i fine settimana dalle 13:00 alle 17:00
  • La configurazione predefinita di scaling-config-default in tutte le altre situazioni

    - 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
    

Creazione di più pianificazioni di scalabilità ricorrenti

Le specifiche di scalabilità possono includere sia i campi di inizio sia di fine, nonché una pianificazione cron ricorrente. In questo esempio, Game Servers applica le seguenti pianificazioni di scalabilità:

  • scaling-config-july4 dal 4 luglio al 7 luglio dalle 09:00 alle 23:00
  • scaling-config-peak tutti i giorni dalle 17:00 alle 22:00
  • La configurazione predefinita di scaling-config-default in tutte le altre situazioni

    - 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
    

Passaggi successivi