Como escalonar um aplicativo


Nesta página, você aprende a escalonar um aplicativo implantado no Google Kubernetes Engine (GKE).

Visão geral

Ao implantar um aplicativo no GKE, você define quantas réplicas do aplicativo pretende executar. Ao escalonar um aplicativo, você aumenta ou diminui o número de réplicas.

Cada réplica do aplicativo representa um pod do Kubernetes que encapsula os contêineres desse aplicativo.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Como inspecionar um aplicativo

Antes de escalonar o aplicativo, é preciso inspecioná-lo para garantir que esteja íntegro.

Para ver todos os aplicativos implantados no cluster, execute o comando a seguir:

kubectl get CONTROLLER

Substitua CONTROLLER por deployments, statefulsets ou outro tipo de objeto controlador.

Por exemplo, se você executar kubectl get deployments e tiver criado apenas uma implantação, a saída do comando será semelhante a esta:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

A saída desse comando é semelhante para todos os objetos, mas pode parecer um pouco diferente. Nas implantações, a saída tem seis colunas:

  • NAME lista os nomes das implantações no cluster.
  • DESIRED exibe o número pretendido de réplicas ou o estado pretendido do aplicativo, que você define ao criar a implantação.
  • CURRENT mostra quantas réplicas estão em execução atualmente.
  • UP-TO-DATE exibe o número de réplicas que foram atualizadas para atingir o estado desejado.
  • AVAILABLE exibe quantas réplicas do aplicativo estão disponíveis para os usuários.
  • AGE exibe o tempo de execução do aplicativo no cluster.

Neste exemplo, há apenas uma implantação, my-app, que tem apenas uma réplica porque seu estado desejado é uma réplica. Você define o estado pretendido no momento da criação, mas pode alterá-lo a qualquer momento dimensionando o aplicativo.

Como inspecionar StatefulSets

Antes de escalonar um StatefulSet, é preciso inspecioná-lo executando o seguinte comando:

kubectl describe statefulset my-app

Na saída desse comando, verifique o campo Status dos pods. Se o valor Failed for maior que 0, o escalonamento poderá falhar.

Se um StatefulSet parecer não íntegro, execute estas etapas:

  1. Receba uma lista de pods e veja quais deles não são íntegros:

    kubectl get pods
    
  2. Remova o pod não íntegro:

    kubectl delete POD_NAME
    

Tentar escalonar um StatefulSet enquanto ele estiver não íntegro pode torná-lo indisponível.

Como escalonar um aplicativo

Nas seções a seguir, você verá cada método que é possível usar para escalonar um aplicativo. O método kubectl scale é a maneira mais rápida de escalonar. No entanto, talvez você prefira outro método em algumas situações, como ao atualizar arquivos de configuração ou ao executar modificações no local.

kubectl scale

O comando kubectl scale permite alterar instantaneamente o número de réplicas que você quer executar no aplicativo.

Para usar kubectl scale, especifique o novo número de réplicas definindo a sinalização --replicas. Por exemplo, para escalonar my-app para quatro réplicas, execute o comando a seguir, substituindo CONTROLLER por deployment, statefulset ou outro tipo de objeto controlador:

kubectl scale CONTROLLER my-app --replicas 4

Se for bem-sucedida, a saída desse comando será semelhante a deployment "my-app" scaled.

Em seguida, execute:

kubectl get CONTROLLER my-app

A saída será semelhante a:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl apply

É possível usar kubectl apply para aplicar um novo arquivo de configuração a um objeto controlador existente. kubectl apply é útil para fazer várias alterações para um recurso e pode ser útil para usuários que preferem gerenciar recursos em arquivos de configuração.

Para escalonar usando kubectl apply, o arquivo de configuração fornecido precisa incluir um novo número de réplicas no campo replicas da especificação do objeto.

Veja a seguir uma versão atualizada do arquivo de configuração para o objeto my-app de exemplo. O exemplo mostra uma implantação, portanto, se você usar outro tipo de controlador, como StatefulSet, altere kind proporcionalmente. Esse exemplo funciona melhor em um cluster com pelo menos três nós.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0

Neste arquivo, o valor do campo replicas é 3. Quando este arquivo de configuração é aplicado, o objeto my-app é dimensionado para três réplicas.

Para aplicar um arquivo de configuração atualizado, execute o comando a seguir:

kubectl apply -f config.yaml

Em seguida, execute:

kubectl get CONTROLLER my-app

A saída será semelhante a:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

Console

Para escalonar uma carga de trabalho no console do Google Cloud, execute as seguintes etapas:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, clique no nome da carga de trabalho que você quer escalonar.

  3. Clique em Ações > Escalonar > Editar réplicas.

  4. Insira o novo número de Réplicas da carga de trabalho.

  5. Clique em Escala.

Como fazer escalonamento automático de implantações

É possível fazer o escalonamento automático de implantações com base na utilização de CPU dos pods usando kubectl autoscale ou no menu "Cargas de trabalho do GKE" do console do Google Cloud.

kubectl autoscale

kubectl autoscale cria um objeto HorizontalPodAutoscaler (ou HPA) que segmenta um recurso especificado (chamado de meta de escalonamento) e o dimensiona conforme necessário. O HPA ajusta periodicamente o número de réplicas da meta de escalonamento para corresponder à utilização média de CPU que você especifica.

Quando você usa kubectl autoscale, especifica um número máximo e mínimo de réplicas para o aplicativo, bem como uma meta de utilização da CPU. Por exemplo, para definir o número máximo de réplicas como seis e o mínimo como quatro, com uma meta de utilização da CPU de 50%, execute o comando abaixo:

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

Neste comando, a sinalização --max é obrigatória. A sinalização --cpu-percent é a meta de utilização de CPU em todos os pods. Este comando não escalona imediatamente a implantação para seis réplicas, a menos que já exista uma demanda sistêmica.

Depois de executar kubectl autoscale, o objeto HorizontalPodAutoscaler é criado e direcionado ao aplicativo. Quando há alteração na carga, o objeto aumenta ou diminui as réplicas do aplicativo.

Para ver uma lista dos objetos HorizontalPodAutoscaler no cluster, execute:

kubectl get hpa

Para ver um objeto HorizontalPodAutoscaler específico no cluster, execute:

kubectl get hpa HPA_NAME

Substitua HPA_NAME pelo nome do objeto HorizontalPodAutoscaler.

Para ver a configuração HorizontalPodAutoscaler:

kubectl get hpa HPA_NAME -o yaml

A saída deste comando é semelhante a:

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: HPA_NAME
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: HPA_NAME
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

Neste exemplo de saída, o campo targetCPUUtilizationPercentage contém o valor de porcentagem 50 transmitido do exemplo kubectl autoscale.

Para ver uma descrição detalhada de um objeto HorizontalPodAutoscaler específico no cluster:

kubectl describe hpa HPA_NAME

Modifique o HorizontalPodAutoscaler aplicando um novo arquivo de configuração com kubectl apply, usando kubectl edit ou kubectl patch.

Para excluir um objeto HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

Console

Para fazer o escalonamento automático de uma implantação, execute as etapas abaixo:

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Na lista de cargas de trabalho, clique no nome da implantação que você quer escalonar automaticamente.

  3. Clique em Ações > Escalonamento automático.

  4. Insira o Número máximo de réplicas e, como opção, o Número mínimo de réplicas da implantação.

  5. Em Métricas de escalonamento automático, selecione e configure as métricas conforme desejado.

  6. Clique em Escalonamento automático.

Como fazer escalonamento automático com métricas personalizadas

É possível escalonar as implantações com base em métricas personalizadas exportadas do Cloud Monitoring.

Para saber como usar métricas personalizadas para fazer o escalonamento automático de implementações, consulte o tutorial Implantações de escalonamento automático com métricas personalizadas.

A seguir