Aumente ou diminua automaticamente o número de pools de trabalhadores com métricas externas

Esta página descreve como dimensionar automaticamente os conjuntos de trabalhadores do Cloud Run usando métricas baseadas em eventos externos. A escala automática de métricas externas do Cloud Run (CREMA) ativa esta funcionalidade através da utilização da escala automática baseada em eventos do Kubernetes (KEDA) para dimensionar cargas de trabalho com base em origens de eventos externos.

Para ver os escaladores suportados e a compatibilidade com o Cloud Run, consulte o artigo Escalamento automático de métricas externas do Cloud Run (CREMA) na Google Cloud documentação do GitHub.

Acerca do serviço de escalamento automático

Para ajustar automaticamente a escala dos conjuntos de trabalhadores, implemente o serviço de ajuste automático do CREMA no Cloud Run. Este serviço realiza as seguintes ações:

  1. Sonda origens de eventos externos, como tópicos do Apache Kafka ou o GitHub Runner Scaler.

  2. Calcula a quantidade de instâncias necessárias com base na sua configuração YAML.

  3. Atualiza automaticamente a contagem de instâncias do conjunto de trabalhadores.

Antes de começar

  1. Certifique-se de que configurou um novo projeto para o Cloud Run, conforme descrito na página de configuração.

  2. Ative as APIs Artifact Registry, Cloud Build, Cloud Run Admin API, Secret Manager e Parameter Manager:

    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        run.googleapis.com \
        secretmanager.googleapis.com \
        parametermanager.googleapis.com
    
  3. Configure uma carga de trabalho baseada em eventos ou pedidos, como GitHub Runners ou Apache Kafka. Para verificar se a origem da sua carga de trabalho é suportada, consulte a lista de compatibilidade do CREMA na Google Cloud documentação do GitHub.

  4. Reveja a calculadora de preços para estimar os custos. Incorre em custos pelo seu serviço de escalabilidade do Cloud Run com base na frequência com que aciona a escalabilidade.

Funções necessárias

Para receber as autorizações de que precisa para ajustar automaticamente a escala do seu conjunto de trabalhadores, peça ao administrador que lhe conceda as seguintes funções de IAM no seu projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Crie uma conta de serviço personalizada

Crie uma conta de serviço personalizada com as autorizações mínimas necessárias para usar os recursos aprovisionados necessários para a sua carga de trabalho. Para configurar a conta de serviço, faça o seguinte:

gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
  --display-name="CREMA Service Account"

Substitua CREMA_SERVICE_ACCOUNT por um nome para a sua conta de serviço personalizada, por exemplo, crema-service-account. Este comando cria uma conta de serviço que segue o formato crema-service-account@example-project.iam.gserviceaccount.com.

Crie o ficheiro de configuração CREMA

Para definir a lógica de escalabilidade, crie um ficheiro de configuração YAML no diretório raiz. Este ficheiro indica ao serviço CREMA que fontes externas monitorizar, como autenticar com os recursos e que conjuntos de trabalhadores dimensionar.

Exemplo de YAML

O exemplo seguinte mostra o ficheiro de configuração para dimensionar um conjunto de trabalhadores do Cloud Run (example-workerpool) usando as métricas do GitHub Runner. Usa um Secret do Secret Manager denominado github_runner_token para fazer a autenticação no GitHub para ler as métricas.

  apiVersion: crema/v1
  kind: CremaConfig
  metadata:
    name: gh-demo
  spec:
    triggerAuthentications:
      - metadata:
          name: github-trigger-auth
        spec:
          gcpSecretManager:
            secrets:
              - parameter: personalAccessToken
                id: github_runner_token
                version: latest
    scaledObjects:
      - spec:
          scaleTargetRef:
            name: projects/example-project/locations/us-central1/workerpools/example-workerpool
          triggers:
            - type: github-runner
              name: example-runner
              metadata:
                owner: repo-owner
                runnerScope: repo
                repos: repo-name
                targetWorkflowQueueLength: 1
              authenticationRef:
                name: github-trigger-auth
          advanced:
            horizontalPodAutoscalerConfig:
              behavior:
                scaleDown:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 100
                      periodSeconds: 10
                scaleUp:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 2
                      periodSeconds: 10
        pollingInterval: 10

A configuração YAML usa os seguintes parâmetros de alto nível:

  • triggerAuthentications: determina como o CREMA autentica o serviço externo, como a utilização de um token armazenado no Secret Manager.

  • scaledObjects: define o mapeamento entre o conjunto de trabalhadores do Cloud Run e o recurso de métricas externas. Este parâmetro inclui:

    • scaleTargetRef: os serviços do Cloud Run ou os conjuntos de trabalhadores a dimensionar.

    • triggers: a métrica externa específica usada para o dimensionamento. Se a sua origem de métricas externa exigir autenticação, defina o campo authenticationRef para especificar um dos objetos TriggerAuthentications para credenciais.

  • pollingInterval: controla o intervalo (em segundos) ao qual o CREMA atualiza as respetivas métricas. Se omitir este parâmetro, o CREMA não faz a sondagem automaticamente e tem de acionar uma verificação de dimensionamento manualmente através de um pedido POST ao serviço.

Para mais informações sobre a definição de métricas de configuração básicas e avançadas, consulte a referência de configuração na Google Cloud documentação do GitHub.

Para ver a lista completa de definições de configuração dos seus escaladores compatíveis, consulte Escaladores na documentação do KEDA.

Armazene a configuração da CREMA no Gestor de parâmetros

Para armazenar versões de parâmetros para o seu serviço de escalamento automático do CREMA, siga estes passos:

  1. Crie um parâmetro no Gestor de parâmetros:

    gcloud parametermanager parameters create PARAMETER_ID --location=global  --parameter-format=YAML
    

    Substitua PARAMETER_ID pelo nome do seu parâmetro.

  2. Carregue o ficheiro YAML local como uma nova versão de parâmetros:

    gcloud parametermanager parameters versions create PARAMETER_VERSION \
      --location=global \
      --parameter=PARAMETER_ID \
      --payload-data-from-file=LOCAL_YAML_CONFIG_FILE
    

    Substitua o seguinte:

    • PARAMETER_VERSION: o ID que quer atribuir à versão do parâmetro, por exemplo, 1.
    • LOCAL_YAML_CONFIG_FILE: o caminho para o ficheiro de configuração YAML.

Para mais informações, consulte Crie um parâmetro.

Conceda autorizações adicionais à sua conta de serviço do CREMA

Para dimensionar o conjunto de trabalhadores especificado na configuração YAML, conceda as seguintes autorizações na conta de serviço personalizada:

  1. Conceda à sua conta de serviço do CREMA autorização para ler a partir do Parameter Manager:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \
      --role="roles/parametermanager.parameterViewer"
    

    Substitua o seguinte:

  2. Conceda à sua conta de serviço do CREMA a função roles/run.developer no conjunto de trabalhadores. Isto permite que o serviço CREMA modifique a contagem de instâncias do seu conjunto de trabalhadores em resposta à alteração das métricas:

    WORKER_POOL_NAME=WORKER_POOL_NAME
    WORKER_POOL_REGION=WORKER_POOL_REGION
    gcloud beta run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \
      --region=$WORKER_POOL_REGION \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/run.developer"
    

    Substitua o seguinte:

    • WORKER_POOL_NAME: o nome do conjunto de trabalhadores.
    • WORKER_POOL_REGION: a região do seu conjunto de trabalhadores.
  3. Conceda à sua conta de serviço do CREMA autorização para escrever métricas:

     gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
       --role="roles/monitoring.metricWriter"
    
  4. Conceda à sua conta de serviço do CREMA a função de utilizador da conta de serviço:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/iam.serviceAccountUser"
    

Implemente o serviço para dimensionar as suas cargas de trabalho

Para implementar o serviço de forma a dimensionar o conjunto de trabalhadores, execute o seguinte comando com uma imagem de contentor pré-criada:

gcloud beta run deploy SERVICE_NAME\
  --image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
  --region=SERVICE_REGION \
  --service-account="CREMA_SERVICE_ACCOUNT_NAME" \
  --no-allow-unauthenticated \
  --no-cpu-throttling \
  --base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/java21 \
  --labels=created-by=crema \
  --set-env-vars="CREMA_CONFIG=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"

Substitua o seguinte:

  • SERVICE_NAME: o nome do seu serviço de redimensionador automático.

  • SERVICE_REGION: a região do seu serviço.

  • CREMA_SERVICE_ACCOUNT_NAME: o nome da sua conta de serviço do CREMA.

  • PROJECT_ID: o ID do seu projeto Google Cloud .

  • PARAMETER_REGION, PARAMETER_ID e PARAMETER_VERSION: valores que armazenou no Gestor de parâmetros.

Também pode implementar o seu serviço CREMA através de uma imagem de contentor personalizada criada a partir do código fonte com o Cloud Build.

Teste o seu serviço CREMA

Para verificar se o serviço de escalamento automático está a funcionar corretamente, consulte o separador Registos do serviço do Cloud Run.

Deve ver os seguintes registos nos registos do seu serviço sempre que as métricas são atualizadas:

Cada mensagem de registo é etiquetada com o componente que a emitiu.

[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...

O que se segue?