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:
- Escalabilidade horizontal, em que aumenta ou diminui o número de réplicas da carga de trabalho.
- Escalabilidade vertical, em que ajusta os recursos disponíveis para réplicas no local.
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:
Obtenha uma lista de pods e veja que pods não estão em bom estado:
kubectl get pods
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:
Aceda à página Workloads na Trusted Cloud consola.
Na lista de cargas de trabalho, clique no nome da carga de trabalho que quer dimensionar.
Clique em list Ações > Dimensionar > Editar réplicas.
Introduza o novo número de Réplicas para a carga de trabalho.
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:
Aceda à página Workloads na Trusted Cloud consola.
Na lista de cargas de trabalho, clique no nome da implementação que quer ajustar automaticamente.
Clique em list Ações > Ajuste automático.
Introduza o Número máximo de réplicas e, opcionalmente, o Número mínimo de réplicas para a implementação.
Em Métricas de ajuste automático de escala, selecione e configure as métricas conforme pretendido.
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.