Configurer le comportement de scaling d'un cluster

Cette page explique comment créer et gérer une configuration de Game Servers qui spécifie le comportement de scaling d'un déploiement. La configuration du scaling peut être personnalisée pour ne cibler que des clusters Game Servers spécifiques dans un domaine.

Avant de commencer

Avant de commencer, nous vous recommandons de vous familiariser avec les concepts clés de la page Présentation de Game Servers. Assurez-vous également que vous avez également effectué les tâches suivantes :

  • Assurez-vous d'avoir activé l'API des services de jeux.
  • Activer l'API Game Services
  • Choisissez une interface système sur laquelle gcloud CLI est installée ou utilisez un client API:
  • Cloud Shell

    Pour lancer Cloud Shell, procédez comme suit :

    1. Accédez à Google Cloud Console.

      Google Cloud Console

    2. Dans l'angle supérieur droit de la console, cliquez sur le bouton Activer Cloud Shell :

    Une session Cloud Shell s'ouvre dans un cadre situé en bas de la console. Cette interface système vous permet d'exécuter les commandes gcloud.

    Shell local

    Installer gcloud CLI

    Vérifiez que vous avez défini le projet par défaut souhaité pour Google Cloud CLI (sinon, vous devrez spécifier l'indicateur --project explicitement pour chaque commande ultérieurement):

    gcloud config list project
    

    Si non, vous pouvez exécuter la commande suivante pour définir un projet par défaut, en remplaçant PROJECT_ID par l'ID de projet souhaité :

    gcloud config set project PROJECT_ID
    

    Exécutez la commande suivante pour vérifier votre version de Google Cloud CLI. Game Servers nécessite la version 306.0.0 ou ultérieure de gcloud CLI.

    gcloud version
    

    Pour mettre à jour votre installation, exécutez la commande suivante :

    gcloud components update
    

    curl/PowerShell

    Pour utiliser l'API REST avec curl ou Windows PowerShell, procédez comme suit :

    1. Créer un compte de service
    2. Téléchargez une clé privée sous la forme d'un fichier JSON.
    3. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS sur le chemin d'accès du fichier JSON contenant vos identifiants. Cette variable ne s'applique qu'à la session de shell actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez de nouveau la définir.

    Bibliothèque cliente

    Google Cloud Game Servers peut être contrôlé par programmation à l'aide d'une bibliothèque cliente. Pour obtenir des instructions sur l'utilisation de la bibliothèque et l'authentification, consultez la page Présentation des bibliothèques clientes.

Créer une ressource Configuration

Assurez-vous d'avoir créé un déploiement Game Servers.

Vous pouvez créer une configuration Game Servers dans un déploiement à l'aide de Google Cloud CLI.

Pour créer une configuration de Game Servers, procédez comme suit :

  1. Copiez la spécification de parc suivante dans un fichier :

    - 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. Copiez la spécification de configuration de scaling suivante dans un fichier :

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. Exécutez la commande suivante et remplacez les valeurs des espaces réservés tels que deploymentID et configID par des valeurs appropriées :

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

    Les espaces réservés de variables correspondent aux descriptions suivantes :

  • configID est un identifiant unique que vous pouvez spécifier pour cette configuration.
  • deploymentID est l'identifiant unique du déploiement.
  • fleetSpecFile est le chemin d'accès au fichier contenant la spécification Agones Fleet.
  • scalingConfigsFile est le chemin d'accès au fichier avec la spécification de scaling.

Définir la configuration d'un déploiement

Après avoir créé une configuration de Game Servers avec une règle de scaling, définissez-la comme configuration par défaut en mettant à jour le déploiement de Game Servers.

Game Servers applique un comportement de scaling à tous les clusters.

Vérifier les spécifications de scaling

Pour déterminer si Game Servers a appliqué le scaling configuré à un cluster, exécutez la commande suivante pour chaque cluster du domaine. Remplacez l'espace réservé namespace par l'espace de noms que vous avez spécifié lors de l'enregistrement du cluster Kubernetes en tant que cluster Game Servers :

   kubectl get fleetautoscaler --namespace namespace
   

Les espaces réservés de variables correspondent aux descriptions suivantes :

  • namespace est l'espace de noms que vous avez utilisé lors de l'enregistrement.

Scaling spécifique à certains clusters

Vous pouvez limiter la configuration de scaling à des clusters Game Servers spécifiques dans un domaine. Pour ce faire, vous devez ajouter un libellé aux clusters, puis cibler uniquement ces clusters avec le libellé dans la configuration de scaling.

Procédez comme suit :

  1. Mettez à jour le cluster pour ajouter un libellé. Les libellés sont des paires clé/valeur au format key=value. Pour cet exemple, indiquez le libellé --labels=cloud=true.

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

    Les autres espaces réservés de variables correspondent aux descriptions suivantes :

    • gscID est un identifiant unique que vous pouvez spécifier pour ce cluster.
    • realmID est l'identifiant unique du domaine dans lequel vous souhaitez stocker le cluster.
    • region est la région du cluster. Choisissez la même région que le domaine parent.

  2. Créez une configuration en suivant les étapes de la section Créer une configuration qui comprend l'ajout suivant : ajoutez le libellé à la spécification de configuration de scaling. Exemple :

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Définissez la configuration comme configuration par défaut en mettant à jour le déploiement de Game Servers.

Game Servers n'applique les configurations de scaling qu'aux clusters Game Servers dont le libellé correspond au sélecteur de libellés de la configuration de scaling. Ainsi, dans cet exemple, les clusters auxquels vous avez attribué le libellé cloud=true obtiennent une configuration de scaling, et tous les clusters sans ce libellé ne reçoivent pas de configuration de scaling.

Créer des planifications de scaling

Game Servers vous permet de configurer plusieurs planifications de scaling. Vous pouvez configurer plusieurs planifications de scaling, dont les heures de début et de fin, ou des planifications récurrentes (appelées cron). Vous pouvez également combiner plusieurs planifications récurrentes.

Game Servers évalue les heures de début et de fin en temps universel coordonné (UTC). Les autres fuseaux horaires sont acceptés en tant que décalage horaire (UTC). Les heures de début et de fin sont au format de chaîne de dates RFC 3339. La plus faible précision possible pour Game Servers est de quelques minutes.

Game Servers évalue les planifications de scaling dans l'ordre dans lequel elles sont répertoriées dans une configuration jusqu'à ce qu'une planification correspondante soit trouvée. Cette section décrit différents exemples de planification.

Créer plusieurs planifications de scaling

Vous pouvez adapter la spécification de planification de scaling suivante pour des événements spéciaux. Dans cet exemple, Game Servers applique les programmations de scaling suivantes :

  • scaling-config-june1-and-7 le 1er juin 2020 entre 17h et 22h30, ainsi que le 7 juin 2020 entre 12h et 18h
  • Configuration par défaut de scaling-config-default pour toutes les autres heures entre le 25 mai 2020 et le 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
    

Créer des planifications de scaling récurrentes

L'exemple de spécification suivant illustre une planification de scaling Cron récurrente afin de gérer une augmentation de la capacité pendant les heures de pointe. Dans cet exemple, Game Servers applique les programmations de scaling suivantes :

  • scaling-config-weekday-peak en semaine, de 17h à 20h
  • scaling-config-weekend-peak pendant le week-end, entre 13h et 17h
  • La configuration scaling-config-default par défaut pour toutes les autres heures

    - 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
    

Créer plusieurs planifications de scaling récurrentes

Les spécifications de scaling peuvent inclure des champs de début et de fin, ainsi qu'une programmation récurrente. Dans cet exemple, Game Servers applique les programmations de scaling suivantes :

  • scaling-config-july4 du 4 au 7 juillet entre 9h et 2h
  • scaling-config-peak tous les jours entre 17h et 22h
  • La configuration scaling-config-default par défaut pour toutes les autres heures

    - 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
    

Étapes suivantes