Ative o Horizontal Pod Autoscaler (HPA) para dimensionar seus pods automaticamente com base na utilização de cpu, no uso de memória ou em métricas personalizadas. O HPA aumenta o número de réplicas de pods para lidar com picos de tráfego e reduz essa quantidade durante períodos ociosos, economizando recursos automaticamente. Esse recurso é ideal para aplicações com cargas de trabalho flutuantes que exigem dimensionamento frequente, como plataformas de e-commerce, serviços de educação online e aplicações financeiras.
Antes de começar
Para usar o HPA eficazmente, recomendamos ler a documentação oficial do Kubernetes sobre Horizontal Pod Autoscaling para compreender seus princípios fundamentais, algoritmos e comportamentos de dimensionamento configuráveis.
Além disso, os clusters do Alibaba Cloud Container Service for Kubernetes (ACK) oferecem diversas soluções de dimensionamento de carga de trabalho (elasticidade da camada de agendamento) e dimensionamento de nós (elasticidade da camada de recursos). Antes de prosseguir, leia Auto scaling para entender os casos de uso e as limitações de cada solução.
Pré-requisitos
Crie um cluster gerenciado ACK ou um cluster dedicado ACK. Para mais informações, consulte Create a Kubernetes cluster.
Se você usar comandos kubectl para implementar o HPA, conecte-se ao cluster Kubernetes com o kubectl. Para mais informações, consulte Obtain the KubeConfig of a cluster and use kubectl to connect to the cluster.
Criar uma aplicação HPA no console
O ACK integra-se nativamente ao HPA, permitindo criar aplicações habilitadas para HPA diretamente pelo console. Ative o HPA ao criar uma nova aplicação ou em uma aplicação existente. Recomendamos criar apenas um HPA por carga de trabalho.
Ativar o HPA ao criar uma aplicação
O exemplo a seguir usa um Deployment para demonstrar como ativar o HPA durante a criação de uma aplicação. Os passos para outros tipos de carga de trabalho são semelhantes.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Deployments, clique em Create from Image.
-
Na página Create, siga as instruções na tela para configurar as informações básicas da aplicação, os contêineres, os services e o dimensionamento, criando assim um Deployment compatível com HPA.
Para etapas detalhadas e descrições dos parâmetros, consulte Create a stateless workload (Deployment). A seção a seguir descreve apenas os parâmetros principais.
Basic Information: Configure as definições da aplicação, como nome e número de réplicas.
-
Container: Configure a imagem e os recursos necessários de cpu e memória.
O recurso de perfilamento de recursos analisa o uso histórico e fornece recomendações para configurar Requests e Limits dos contêineres. Para mais informações, consulte Resource profiling.
ImportanteDefina Requests de recursos para a aplicação a fim de habilitar o HPA.
-
Advanced Settings:
-
Na seção Scaling, marque a opção HPA Enable e configure as condições e os parâmetros de dimensionamento.
Metric: As métricas suportadas são cpu e memória. A métrica deve corresponder ao tipo de recurso solicitado. Se ambos os tipos (cpu e memória) forem especificados, o HPA executará o dimensionamento quando qualquer uma das métricas atingir seu limiar.
Trigger Condition: Limiar de utilização de recursos, definido em porcentagem. Quando a utilização excede esse valor, ocorre o scale out dos contêineres. Para detalhes sobre o algoritmo do Horizontal Pod Autoscaling, consulte Detalhes do algoritmo.
Max. Replicas: Número máximo de réplicas para scale out do Deployment. Este valor deve ser superior ao número mínimo de réplicas.
Min. Replicas: Quantidade mínima de réplicas do Deployment. O valor deve ser um número inteiro maior ou igual a 1.
-
Após a conclusão, visualize o Deployment criado na página Deployments. Clique no nome do Deployment e, na página de detalhes, acesse a aba Pod Scaling. Nesta seção, visualize métricas relacionadas à atividade do HPA, como utilização de cpu ou memória e limites de réplicas. Gerencie o HPA atualizando sua configuração ou desativando-o.
Ativar o HPA para uma aplicação existente
Este exemplo demonstra como habilitar o HPA em um Deployment existente. O procedimento para outros tipos de carga de trabalho é similar.
Página de Cargas de Trabalho
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Deployments, clique no nome da aplicação desejada, selecione a aba Pod Scaling e clique em Create na área do HPA.
-
Na caixa de diálogo Create, configure as definições de dimensionamento conforme as instruções na página.
Name: Nome da política de HPA.
-
Metric: Clique em Add.
Metric Name: Suporta cpu e memória. A métrica deve corresponder ao tipo de recurso configurado. Ao especificar ambos (cpu e memória), o HPA acionará o dimensionamento assim que qualquer uma das métricas atingir o limiar definido.
Threshold: Porcentagem de utilização de recursos acima da qual os contêineres iniciam o scale out. Para mais detalhes sobre o algoritmo do Horizontal Pod Autoscaling, consulte Detalhes do algoritmo.
Max. Containers: Quantidade máxima de réplicas para scale out do Deployment. Deve ser superior ao número mínimo de réplicas.
Min. Containers: Número mínimo de contêineres para scale down do Deployment. O valor deve ser um inteiro maior ou igual a 1.
Após concluir a configuração, clique no nome do Deployment na página Stateless Application e acesse a aba Pod Scaling nos detalhes do Deployment. Nessa área, visualize métricas da atividade do HPA, como utilização de cpu/memória e limites de réplicas. Gerencie o HPA atualizando configurações ou desativando-o.
Página de Dimensionamento de Carga de Trabalho
Esta página está disponível apenas para usuários incluídos na lista de permissões. Para solicitar acesso, envie um ticket.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workload Scaling.
-
No canto superior direito da página, clique em Create Auto Scaling e selecione a aba HPA and CronHPA. Escolha a carga de trabalho alvo e, na seção Configure Auto Scaling Policy, selecione HPA e configure a política conforme as instruções.
Scaling Policy Name: Nome da política de HPA.
Min. Containers: Quantidade mínima de réplicas para a carga de trabalho. Deve ser um número inteiro maior ou igual a 1.
Max. Containers: Limite máximo de contêineres para scale out da carga de trabalho. Este valor precisa ser maior que o mínimo de réplicas.
Metric Name: Métricas suportadas incluem cpu, GPU, memória, requisições do Nginx Ingress e métricas personalizadas. O tipo de métrica deve corresponder ao recurso especificado. Se múltiplas métricas forem definidas, o Horizontal Pod Autoscaler (HPA) realizará o dimensionamento quando qualquer uma delas atingir o limiar.
Threshold: Porcentagem de utilização de recursos. Se a utilização ultrapassar esse valor, os contêineres iniciarão o scale out. Para mais informações sobre o algoritmo do Horizontal Pod Autoscaling, consulte Detalhes do algoritmo.
Após a criação, visualize a lista de HPAs na página Workload Scaling. Na coluna Actions, verifique métricas de atividade do HPA, como utilização de recursos e limites de réplicas. Gerencie o HPA atualizando configurações ou desativando-o.
Verificar os resultados
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workload Scaling.
Selecione a aba Horizontal Scaling e escolha HPA para visualizar o status de dimensionamento e a lista de tarefas.
Em ambientes de produção, a aplicação dimensiona com base na carga dos pods. Em ambientes de teste, execute testes de estresse nos pods para validar o comportamento de dimensionamento horizontal.
Criar uma aplicação HPA usando kubectl
Use um modelo de orquestração para criar manualmente um HPA e vinculá-lo ao Deployment alvo. Recomendamos criar apenas um HPA por carga de trabalho. Este exemplo mostra como implantar uma aplicação Nginx com suporte a HPA.
-
Crie um arquivo chamado nginx.yml e copie o conteúdo abaixo para ele.
ImportantePara implementar o HPA, defina recursos de
requestpara o Pod. Caso contrário, o HPA não funcionará. Utilize o recurso de perfilamento de recursos para analisar dados históricos de uso e obter recomendações de Requests e Limits para os contêineres. Para mais informações, consulte Resource profiling. -
Execute o comando a seguir para criar a aplicação Nginx.
kubectl apply -f nginx.yml -
Crie um arquivo chamado hpa.yml e copie o conteúdo seguinte para criar o HPA.
Use
scaleTargetRefpara especificar o objeto alvo do HPA. Neste exemplo, o HPA está vinculado a um Deployment chamadonginxe dispara o dimensionamento quando a utilização média de cpu dos contêineres em todos os Pods atinge 50%.Kubernetes 1.24 e posteriores
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # The minimum number of replicas for the Deployment. Must be an integer greater than or equal to 1. maxReplicas: 10 # The maximum number of replicas for the Deployment. Must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # The target average resource utilization, which is the ratio of average resource usage to the requested resource amount.Kubernetes anterior à versão 1.24
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Must be an integer greater than or equal to 1. maxReplicas: 10 # Must be greater than the minimum number of replicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50Se precisar especificar métricas de cpu e memória simultaneamente, defina ambos os tipos de recurso
cpuememoryno campometricsem vez de criar dois HPAs separados. O HPA executará o dimensionamento quando detectar que qualquer uma das métricas atingiu o limiar.metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50 -
Execute o comando abaixo para criar o HPA.
kubectl apply -f hpa.ymlNeste momento, execute o comando
kubectl describe hpa <HPA name>. Neste exemplo, o nome do HPA é nginx-hpa. A saída esperada é a mensagem de aviso a seguir, indicando que o HPA ainda está sendo implantado. Use o comandokubectl get hpapara verificar o status do HPA.Warning FailedGetResourceMetric 2m (x6 over 4m) horizontal-pod-autoscaler missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7 Warning FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5 -
Depois que o HPA for criado e o Pod atender às condições de dimensionamento (neste exemplo, utilização de cpu do Pod Nginx superior a 50%), execute novamente o comando
kubectl describe hpa <HPA-name>para visualizar o status do dimensionamento horizontal.A saída a seguir indica que o HPA está operando corretamente.
Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m6s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
Operações relacionadas
Se o comportamento padrão de dimensionamento não atender aos requisitos do seu negócio, utilize o campo behavior para configurar as ações de scale-down (scaleDown) e scale-up (scaleUp) com maior granularidade. Para mais informações, consulte Comportamento de dimensionamento configurável.
Cenários típicos para uso do campo behavior incluem, mas não se limitam a:
Scale out rápido durante picos repentinos de tráfego.
Scale out rápido combinado com scale in lento para cargas de trabalho com flutuações frequentes.
Desativação do scale-in para aplicações sensíveis a estado.
Uso da janela de estabilização
stabilizationWindowSecondsem cenários com recursos limitados ou sensíveis a custos, restringindo a taxa de scale out para reduzir ajustes frequentes causados por flutuações temporárias.
Para descrições e exemplos da configuração de behavior, consulte Tune HPA scaling sensitivity.
FAQ
Documentação relacionada
Outras operações relacionadas
Para implementar o Horizontal Pod Autoscaling com base em métricas de componentes da Alibaba Cloud usando Kubernetes External Metrics, consulte Horizontal Pod Autoscaling based on Nginx Ingress metrics.
Para converter métricas do Managed Service for Prometheus em métricas compatíveis com HPA, consulte Horizontal Pod autoscaling based on metrics from Managed Service for Prometheus.
Para solução de problemas do HPA, consulte Node auto scaling FAQ.
Caso precise coordenar CronHPA e HPA, consulte Use CronHPA with HPA.
Outras soluções de dimensionamento de carga de trabalho
Se sua aplicação apresenta padrões periódicos de uso de recursos e você precisa dimensionar pods com base em uma programação, consulte Use CronHPA for scheduled horizontal scaling.
Quando o uso de recursos da aplicação tiver variações cíclicas difíceis de definir por regras, utilize o AHPA para identificar automaticamente padrões de carga de trabalho com base em métricas históricas e realizar o auto scaling de Pods. Para mais informações, consulte Auto Scaling Prediction (AHPA).
Para definir limites de recursos automaticamente para pods com base no uso real, consulte Use Vertical Pod Autoscaler (VPA).
Para criar políticas de dimensionamento flexíveis baseadas em eventos de filas de mensagens, programações ou métricas personalizadas, consulte Event-driven autoscaling.
Soluções combinadas
Combine o HPA com o recurso de auto scaling de nós para dimensionar automaticamente os nós do cluster quando os recursos forem insuficientes. Para mais informações, consulte Enable node auto scaling.