Configura el comportamiento del escalamiento del clúster

En esta página, se explica cómo crear y administrar una configuración de Game Servers en la que se especifica el comportamiento de escalamiento de una implementación. La configuración de escalamiento se puede personalizar para que se oriente solo a clústeres de Game Servers específicos en un dominio.

Antes de comenzar

Antes de comenzar, te recomendamos que te familiarices con los conceptos clave en la Descripción general de servidores para juegos. Asegúrate de haber realizado las siguientes tareas:

  • Asegúrate de haber habilitado la API de los servicios de juego.
  • Habilitar la API de servicios de juego
  • Elige una shell que tenga gcloud CLI instalada o usa un cliente de API:
  • Cloud Shell

    Para iniciar Cloud Shell, sigue estos pasos:

    1. Ve a la consola de Google Cloud.

      Consola de Google Cloud

    2. Desde la esquina superior derecha de la consola, haz clic en el botón Activar Cloud Shell: .

    Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola. Usa esta shell para ejecutar los comandos de gcloud.

    Shell local

    Instala la CLI de gcloud

    Verifica que hayas configurado el proyecto predeterminado que deseas para Google Cloud CLI (de lo contrario, debes especificar la marca --project de forma explícita para cada comando más adelante):

    gcloud config list project
    

    Si no puedes ejecutar el siguiente comando para configurar un proyecto predeterminado, reemplaza PROJECT_ID por el ID del proyecto deseado:

    gcloud config set project PROJECT_ID
    

    Ejecuta el siguiente comando para verificar tu versión de Google Cloud CLI. Game Servers requiere la versión 306.0.0 o una posterior de gcloud CLI.

    gcloud version
    

    Para actualizar la instalación, ejecuta el siguiente comando:

    gcloud components update
    

    curl / PowerShell

    Para usar la API de REST con curl o Windows PowerShell, haz lo siguiente:

    1. Crea una cuenta de servicio.
    2. Descarga una clave privada como un archivo JSON.
    3. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON que contiene tus credenciales. Esta variable solo se aplica a la sesión actual de Cloud Shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

    Biblioteca cliente

    Google Cloud Game Servers se puede controlar de manera programática mediante una biblioteca cliente. Consulta Descripción general de bibliotecas cliente a fin de obtener instrucciones para usar la biblioteca y la autenticación.

Crea una configuración

Asegúrate de haber creado una implementación de Game Servers.

Puedes crear una configuración de Game Servers en una implementación mediante Google Cloud CLI.

Sigue estos pasos a fin de crear una configuración de servidor para videojuegos:

  1. Copia la siguiente especificación de flota en un archivo:

    - 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 siguiente especificación de configuración de escalamiento en un archivo:

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. Ejecuta el siguiente comando y reemplaza los valores del marcador de posición, como deploymentID y configID, por los valores apropiados:

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

    Los marcadores de posición de variables corresponden a las siguientes descripciones:

  • configID es un identificador único que puedes especificar para esta configuración.
  • deploymentID es el identificador único de la implementación.
  • fleetSpecFile es la ruta al archivo con la especificación de la flota de Agones.
  • scalingConfigsFile es la ruta al archivo con la especificación de escalamiento.

Establece la configuración para una implementación

Después de crear una configuración de Game Servers con una política de escalamiento, configúrala como predeterminada con solo actualizar el lanzamiento para la implementación de Game Servers.

Game Servers aplica el comportamiento de escalamiento a todos los clústeres.

Verifica las especificaciones del escalamiento

Para determinar si Game Servers aplicó el escalamiento configurado a un clúster, ejecuta el siguiente comando para cada clúster dentro del dominio. Reemplaza el marcador de posición namespace por el espacio de nombres que especificaste cuando registraste el clúster de Kubernetes como un clúster de Game Servers:

   kubectl get fleetautoscaler --namespace namespace
   

Los marcadores de posición de variables corresponden a las siguientes descripciones:

  • namespace es el espacio de nombres que usaste cuando te registraste.

Escala solo clústeres específicos

Se recomienda limitar la configuración de escalamiento a clústeres específicos de Game Servers en un dominio. Para ello, agrega una etiqueta a los clústeres y, luego, orienta solo a esos clústeres con la etiqueta en la configuración de escalamiento.

Lleva a cabo los pasos siguientes:

  1. Actualiza el clúster para agregar una etiqueta. Las etiquetas son pares clave-valor con el formato key=value. En este ejemplo, especifica la etiqueta como --labels=cloud=true.

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

    Los demás marcadores de posición de variables corresponden a las siguientes descripciones:

    • gscID es un identificador único que puedes especificar para este clúster.
    • realmID es el identificador único del dominio en el que deseas almacenar el clúster.
    • region es la región del clúster. Elige la misma región que el dominio superior.

  2. Para crear una configuración, sigue los pasos en la sección Crea una configuración con la siguiente adición: agrega la etiqueta a la especificación de la configuración de escalamiento. Por ejemplo:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Establece la configuración como la predeterminada mediante la actualización del lanzamiento de la implementación de Game Servers.

Game Servers solo aplica configuraciones de escalamiento a los clústeres de Game Servers que tienen una etiqueta que coincide con el selector de etiquetas en la configuración de escalamiento. Por lo tanto, en este ejemplo, cualquier clúster que etiquetaste con cloud=true obtiene una configuración de escalamiento y cualquier clúster sin esa etiqueta no obtiene una configuración de escalamiento.

Crea programas de escalamiento

Game Servers te permite configurar varios programas de escalamiento. Puedes configurar varios programas de escalamiento que incluyan horas de inicio y de finalización opcionales o programas recurrentes, conocidos como programas cron. También puedes combinar varios programas recurrentes.

Game Servers evalúa las horas de inicio y finalización en el horario universal coordinado (UTC). Se admiten otras zonas horarias como un desplazamiento de UTC. Las horas de inicio y finalización tienen el formato de strings de fecha RFC 3339. La precisión más baja que admite Game Servers es de minutos.

Game Servers evalúa los programas de escalamiento en el orden en que se enumeran en un archivo de configuración hasta que se encuentra un programa coincidente. En esta sección, se describe una variedad de ejemplos de programación.

Crea varios programas de escalamiento

Puedes adaptar la siguiente especificación de programas de escalamiento para eventos especiales. En este ejemplo, Game Servers aplica los siguientes programas de escalamiento:

  • scaling-config-june1-and-7 el 1 de junio de 2020 entre las 17:00 y 22:30, así como el 7 de junio de 2020 entre las 12:00 p.m. y las 18:00
  • La configuración predeterminada de scaling-config-default para todas las demás horas entre el 25 de mayo de 2020 y el 31 de mayo de 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
    

Crea programas de escalamiento recurrentes

En la siguiente especificación de ejemplo, se muestra un programa de escalamiento cron recurrente para controlar un aumento de capacidad durante las horas de mayor actividad. En este ejemplo, Game Servers aplica los siguientes programas de escalamiento:

  • scaling-config-weekday-peak durante los días de semana entre las 17:00 y las 20:00
  • scaling-config-weekend-peak durante los fines de semana entre las 13:00 y las 17:00
  • La configuración predeterminada de scaling-config-default en todos los demás horarios

    - 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
    

Crea varios programas de escalamiento recurrentes

Las especificaciones de escalamiento pueden incluir campos de hora de inicio y finalización, así como un programa cron recurrente. En este ejemplo, Game Servers aplica los siguientes programas de escalamiento:

  • scaling-config-july4 del 4 de julio al 7 de julio entre las 9:00 y las 23:00
  • scaling-config-peak todos los días entre 17:00 y 22:00
  • La configuración predeterminada de scaling-config-default en todos los demás horarios

    - 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
    

¿Qué sigue?