Escalar uma aplicação

Esta página explica como dimensionar uma aplicação implementada no Google Kubernetes Engine (GKE).

Vista geral

Quando implementa uma aplicação no GKE, define quantas réplicas da aplicação quer executar. Cada réplica da sua aplicação representa um pod do Kubernetes que encapsula os contentores da sua aplicação.

Quando dimensiona uma aplicação, aumenta ou diminui o número de réplicas da carga de trabalho ou ajusta os recursos que estão disponíveis para as réplicas no local. Existem dois métodos para dimensionar uma aplicação:

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Inspeção de uma aplicação

Antes de dimensionar a aplicação, deve inspecioná-la e garantir que está em bom estado.

Para ver todas as aplicações implementadas no cluster, execute o seguinte comando:

kubectl get CONTROLLER

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

Por exemplo, se executar kubectl get deployments e tiver criado apenas uma implementação, o resultado do comando deve ser semelhante ao seguinte:

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

O resultado deste comando é semelhante para todos os objetos, mas pode parecer ligeiramente diferente. Para as implementações, o resultado tem seis colunas:

  • NAME apresenta os nomes das implementações no cluster.
  • DESIRED apresenta o número desejado de réplicas ou o estado desejado da aplicação, que define quando cria a implementação.
  • CURRENT apresenta o número de réplicas em execução atualmente.
  • UP-TO-DATE apresenta o número de réplicas que foram atualizadas para alcançar o estado desejado.
  • AVAILABLE Apresenta quantas réplicas da aplicação estão disponíveis para os seus utilizadores.
  • AGE apresenta o tempo durante o qual a aplicação está em execução no cluster.

Neste exemplo, existe apenas uma implementação, my-app, que tem apenas uma réplica porque o respetivo estado desejado é uma réplica. Define o estado desejado no momento da criação e pode alterá-lo em qualquer altura ao dimensionar a aplicação.

Inspecionar StatefulSets

Antes de dimensionar um StatefulSet, deve inspecioná-lo executando o seguinte comando:

kubectl describe statefulset my-app

Na saída deste comando, verifique o campo Pods Status. Se o valor de Failed for superior a 0, o ajuste de escala pode falhar.

Se um StatefulSet parecer não estar em bom estado, faça o seguinte:

  1. Obtenha uma lista de pods e veja que pods não estão em bom estado:

    kubectl get pods
    
  2. Remova o pod não saudável:

    kubectl delete POD_NAME
    

A tentativa de dimensionar um StatefulSet enquanto este não estiver em bom estado pode fazer com que fique indisponível.

Escalar uma aplicação

As secções seguintes descrevem cada método que pode usar para dimensionar uma aplicação. O método kubectl scale é a forma mais rápida de expandir. No entanto, pode preferir outro método em algumas situações, como quando atualiza ficheiros de configuração ou quando faz modificações no local.

kubectl scale

O comando kubectl scale permite-lhe alterar instantaneamente o número de réplicas que quer executar a sua aplicação.

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

kubectl scale CONTROLLER my-app --replicas 4

Se for bem-sucedido, o resultado deste comando deve ser semelhante a deployment "my-app" scaled.

Em seguida, execute:

kubectl get CONTROLLER my-app

O resultado deve ser semelhante ao seguinte:

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

kubectl patch

A partir da versão 1.33 do Kubernetes, pode usar o comando kubectl patch para dimensionar verticalmente a sua carga de trabalho atualizando os recursos atribuídos a um contentor, sem recriar o pod. Para mais informações, incluindo limitações, consulte a documentação do Kubernetes para redimensionar recursos de CPU e memória.

Para usar o comando kubectl patch, especifique o pedido de recurso atualizado na flag --patch. Por exemplo, para dimensionar my-app para 800 mCPUs, execute o seguinte comando:

kubectl patch pod my-app --subresource resize --patch \
  '{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'

kubectl apply

Pode usar kubectl apply para aplicar um novo ficheiro de configuração a um objeto de controlador existente. kubectl apply é útil para fazer várias alterações a um recurso e pode ser útil para os utilizadores que preferem gerir os respetivos recursos em ficheiros de configuração.

Para dimensionar através de kubectl apply, o ficheiro de configuração que fornece deve incluir um novo número de réplicas no campo replicas da especificação do objeto.

Segue-se uma versão atualizada do ficheiro de configuração para o objeto my-app de exemplo. O exemplo mostra uma implementação, pelo que, se usar outro tipo de controlador, como um StatefulSet, altere o kind em conformidade. Este exemplo funciona melhor num 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 ficheiro, o valor do campo replicas é 3. Quando este ficheiro de configuração é aplicado, o objeto my-app é dimensionado para três réplicas.

Para aplicar um ficheiro de configuração atualizado, execute o seguinte comando:

kubectl apply -f config.yaml

Em seguida, execute:

kubectl get CONTROLLER my-app

O resultado deve ser semelhante ao seguinte:

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

Consola

Para dimensionar uma carga de trabalho na Trusted Cloud consola, siga estes passos:

  1. Aceda à página Workloads na Trusted Cloud consola.

    Aceda a Cargas de trabalho

  2. Na lista de cargas de trabalho, clique no nome da carga de trabalho que quer dimensionar.

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

  4. Introduza o novo número de Réplicas para a carga de trabalho.

  5. Clique em Escala.

Implementações de escala automática

Pode criar uma escala automática de implementações com base na utilização da CPU dos pods através do kubectl autoscale ou do menu cargas de trabalho do GKE na consola doTrusted Cloud .

kubectl autoscale

kubectl autoscale cria um objeto HorizontalPodAutoscaler (ou HPA) que segmenta um recurso especificado (denominado alvo de dimensionamento) e dimensiona-o conforme necessário. O HPA ajusta periodicamente o número de réplicas do objetivo de escalabilidade para corresponder à utilização média da CPU que especificar.

Quando usa o kubectl autoscale, especifica um número máximo e mínimo de réplicas para a sua aplicação, bem como um alvo 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 um objetivo de utilização da CPU de 50%, execute o seguinte comando:

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

Neste comando, a flag --max é obrigatória. A flag --cpu-percent é a utilização da CPU de destino em todos os pods. Este comando não dimensiona imediatamente a implementação para seis réplicas, a menos que já exista uma procura sistémica.

Após a execução de kubectl autoscale, o objeto HorizontalPodAutoscaler é criado e segmenta a aplicação. Quando existe uma alteração na carga, o objeto aumenta ou diminui as réplicas da aplicação.

Para ver uma lista dos objetos HorizontalPodAutoscaler no seu cluster, execute o seguinte comando:

kubectl get hpa

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

kubectl get hpa HPA_NAME

Substitua HPA_NAME pelo nome do seu objeto HorizontalPodAutoscaler.

Para ver a configuração de HorizontalPodAutoscaler:

kubectl get hpa HPA_NAME -o yaml

O resultado deste comando é semelhante ao seguinte:

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 percentual 50 transmitido a partir do exemplo kubectl autoscale.

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

kubectl describe hpa HPA_NAME

Pode modificar o HorizontalPodAutoscaler aplicando um novo ficheiro de configuração com kubectl apply, usando kubectl edit ou usando kubectl patch.

Para eliminar um objeto HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

Consola

Para ajustar automaticamente a escala de uma implementação, siga estes passos:

  1. Aceda à página Workloads na Trusted Cloud consola.

    Aceda a Cargas de trabalho

  2. Na lista de cargas de trabalho, clique no nome da implementação que quer ajustar automaticamente.

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

  4. Introduza o Número máximo de réplicas e, opcionalmente, o Número mínimo de réplicas para a implementação.

  5. Em Métricas de ajuste automático de escala, selecione e configure as métricas conforme pretendido.

  6. Clique em Ajuste automático da escala.

Escala automática com métricas personalizadas

Pode dimensionar as suas implementações com base em métricas personalizadas exportadas do Cloud Monitoring.

Para saber como usar métricas personalizadas para dimensionar automaticamente as implementações, consulte o tutorial Dimensionar automaticamente implementações com métricas personalizadas.

O que se segue?