Como configurar o comportamento de escalonamento do cluster

Nesta página, explicamos como criar e gerenciar uma configuração do Game Servers que especifica o comportamento de escalonamento de uma implantação. É possível personalizar a configuração de escalonamento para alcançar apenas clusters específicos do Game Servers em um realm.

Antes de começar

Antes de começar, recomendamos que você se familiarize com os principais conceitos na Visão geral do Game Servers. Verifique se você também realizou as seguintes tarefas:

  • Verifique se você ativou a API Game Services.
  • Ativar a API Game Services
  • Escolha um shell com a CLI gcloud instalada ou use um cliente de API:
  • Cloud Shell

    Para iniciar o Cloud Shell, execute os seguintes passos:

    1. Acesse o Console do Google Cloud.

      Console do Google Cloud

    2. No canto superior direito do console, clique no botão Ativar Cloud Shell:

    Uma sessão do Cloud Shell é aberta dentro de um quadro inferior no console. Use esse shell para executar comandos gcloud.

    Shell local

    Instale a CLI gcloud.

    Verifique se você definiu o projeto padrão desejado para a Google Cloud CLI. Caso contrário, será necessário especificar a sinalização --project explicitamente para cada comando mais tarde:

    gcloud config list project
    

    Caso contrário, execute o seguinte comando para definir um projeto padrão, substituindo PROJECT_ID pelo ID do projeto que você quer:

    gcloud config set project PROJECT_ID
    

    Execute o seguinte comando para verificar a versão da Google Cloud CLI. O Game Servers requer a versão 306.0.0 ou mais recente da CLI gcloud.

    gcloud version
    

    Para atualizar a instalação, execute o seguinte comando:

    gcloud components update
    

    curl / PowerShell

    Para usar a API REST com curl ou o Windows PowerShell, faça o seguinte:

    1. Crie uma conta de serviço.
    2. Faça o download de uma chave privada como um arquivo JSON.
    3. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo JSON que contém suas credenciais. Essa variável só se aplica à sessão de shell atual. Assim, se você abrir uma nova sessão, precisará definir a variável novamente.

    Biblioteca de cliente

    O Game Servers do Google Cloud pode ser controlado de maneira programática usando uma biblioteca de cliente. Consulte Visão geral das bibliotecas de cliente para instruções sobre como usar a biblioteca e fazer a autenticação.

Como criar uma configuração

Verifique se você criou uma implantação do Game Servers.

É possível criar uma configuração do Game Servers em uma implantação usando a Google Cloud CLI.

Para criar uma configuração de servidor de jogo:

  1. Copie a seguinte especificação de frota em um arquivo:

    - 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. Copie a seguinte especificação da configuração de escalonamento em um arquivo:

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. Execute o seguinte comando e substitua os valores do marcador, como deploymentID e configID, pelos valores apropriados:

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

    Os marcadores das variáveis correspondem às seguintes descrições:

  • configID é um identificador exclusivo que pode ser especificado para essa configuração.
  • deploymentID é o identificador exclusivo da implantação.
  • fleetSpecFile é o caminho do arquivo com a especificação da frota do Agones.
  • scalingConfigsFile é o caminho para o arquivo com a especificação de escalonamento.

Como definir a configuração de uma implantação

Depois de criar uma configuração do Game Servers com uma política de escalonamento, defina-a como a configuração padrão atualizando a implementação da implantação do Game Servers.

O Game Servers aplica o comportamento de escalonamento a todos os clusters.

Como verificar especificações de escalonamento

Para determinar se o Game Servers aplicou o escalonamento configurado a um cluster, execute o seguinte comando para cada cluster no realm. Substitua o marcador namespace pelo namespace especificado ao registrar o cluster do Kubernetes como um cluster do Game Servers:

   kubectl get fleetautoscaler --namespace namespace
   

Os marcadores das variáveis correspondem às seguintes descrições:

  • namespace é o namespace que você usou ao se registrar.

Escalonar apenas clusters específicos

Talvez você queira limitar a configuração de dimensionamento a clusters específicos do Game Servers em um realm. Para isso, basta adicionar um rótulo aos clusters e segmentar apenas os clusters com o rótulo na configuração de escalonamento.

Siga estas etapas:

  1. Atualize o cluster para adicionar um rótulo. Os rótulos são pares de chave-valor no formato key=value. Neste exemplo, especifique o rótulo como --labels=cloud=true.

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

    Os outros marcadores das variáveis correspondem às seguintes descrições:

    • gscID é um identificador exclusivo que pode ser especificado para esse cluster.
    • realmID é o identificador exclusivo do realm em que você quer armazenar o cluster.
    • region é a região do cluster. Escolha a mesma região do realm pai.

  2. Crie uma configuração seguindo as etapas da seção Como criar uma configuração com a seguinte adição: adicione o rótulo à especificação da configuração de escalonamento. Exemplo:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Defina a configuração como a configuração padrão atualizando o lançamento da implantação do Game Servers.

O Game Servers só aplica configurações de escalonamento a clusters do Game Servers que tenham um rótulo que corresponde ao seletor de rótulos na configuração de escalonamento. Neste exemplo, todos os clusters rotulados com cloud=true recebem uma configuração de escalonamento, e os clusters sem esse rótulo não recebem uma configuração de escalonamento.

Como criar programações de escalonamento

O Game Servers permite que você configure várias programações de escalonamento. Configure várias programações de escalonamento que incluem horários de início e de término opcionais ou programações recorrentes, conhecidas como programações cron. Também é possível combinar várias programações e programações recorrentes.

O Game Servers avalia os horários de início e término no Tempo Universal Coordenado (UTC). Outros fusos horários são aceitos como uma diferença de UTC. Os horários de início e término são formatados como strings de data RFC 3339. A menor precisão compatível com o Game Servers é em minutos.

O Game Servers avalia as programações de escalonamento na ordem em que elas são listadas em uma configuração até que uma programação correspondente seja encontrada. Esta seção descreve vários exemplos de programação.

Como criar várias programações de escalonamento

É possível adaptar a especificação de programação de escalonamento a seguir para eventos especiais. Neste exemplo, o Game Servers aplica as seguintes programações de escalonamento:

  • scaling-config-june1-and-7 em 1 de junho de 2020, entre as 17h e as 22h30, e em 7 de junho de 2020, entre as 12h e as 18h
  • A configuração padrão scaling-config-default para todos os outros horários de 25 de maio de 2020 a 31 de maio 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
    

Como criar programações de escalonamento recorrentes

No exemplo de especificação a seguir, veja uma programação cron recorrente do escalonamento para processar um aumento de capacidade em horários de pico. Neste exemplo, o Game Servers aplica as seguintes programações de escalonamento:

  • scaling-config-weekday-peak durante os dias úteis, entre as 17h e as 20h
  • scaling-config-weekend-peak durante os fins de semana, entre as 13h e as 17h
  • A configuração padrão scaling-config-default em todas as outras horas

    - 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
    

Como criar várias programações de escalonamento recorrentes

As especificações de escalonamento podem incluir campos de horário de início e término, bem como uma programação cron recorrente. Neste exemplo, o Game Servers aplica as seguintes programações de escalonamento:

  • scaling-config-july4 de 4 a 7 de julho, entre as 9h e as 23h
  • scaling-config-peak todos os dias entre e as 17h e as 22h
  • A configuração padrão scaling-config-default em todas as outras horas

    - 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
    

A seguir