Escalar implantações de pods com o Horizontal Pod Autoscaler
O Horizontal Pod Autoscaler
O Horizontal Pod Autoscaler é um recurso de API padrão no Kubernetes que simplesmente requer que uma fonte de métricas (como o servidor de métricas do Kubernetes) esteja instalada no cluster do Amazon EKS para funcionar. Você não precisa implantar ou instalar o Horizontal Pod Autoscaler no cluster para começar a escalar as aplicações. Para obter mais informações, consulte Horizontal Pod Autoscaler
Use este tópico para preparar o Horizontal Pod Autoscaler para seu cluster do Amazon EKS e verificar se ele está funcionando com uma aplicação de exemplo.
nota
Este tópico é baseado no passo a passo do autoscaler do pod horizontal
-
Você tem um cluster existente do Amazon EKS. Caso contrário, consulte Começar a usar o Amazon EKS.
-
Você tem o servidor de métricas do Kubernetes instalado. Para ter mais informações, consulte Visualizar o uso de recursos com o servidor KubernetesMetrics.
-
Você estiver usando um cliente do
kubectl
que está configurado para se comunicar com o cluster do Amazon EKS.
Execute uma aplicação de teste do Horizontal Pod Autoscaler
Nesta seção, você implanta uma aplicação de exemplo para verificar se o Horizontal Pod Autoscaler está funcionando.
nota
Este exemplo é baseado no passo a passo do autoscaler do pod horizontal
-
Implante uma aplicação simples de servidor Web do Apache, com o comando a seguir.
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
É atribuído um limite de CPU de 500 milicpu a esse Pod de servidor Web do Apache e ele está atendendo na porta 80.
-
Crie um recurso Horizontal Pod Autoscaler para a implantação do
php-apache
.kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Esse comando cria um autoscaler que tem como meta 50% de utilização de CPU para a implantação, com um mínimo de um Pod e um máximo de dez Pods. Quando a carga média da CPU for inferior a 50%, o autoscaler tentará reduzir o número de Pods na implantação para um mínimo de um. Quando a carga for maior que 50%, o autoscaler tentará aumentar o número de Pods na implantação, até um máximo de dez. Para obter mais informações, consulte How does the Horizontal Pod Autoscaler work?
(Funcionamento do Horizontal Pod Autoscaler) na documentação do Kubernetes. -
Descreva o autoscaler com o seguinte comando para visualizar seus detalhes.
kubectl get hpa
Veja um exemplo de saída abaixo.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 51s
Como você pode ver, a carga atual da CPU é
0%
, pois ainda não há nenhuma carga no servidor. O número de Pod já está no limite mais baixo (um), portanto, não pode ser reduzido. -
Crie uma carga para o servidor web executando um contêiner.
kubectl run -i \ --tty load-generator \ --rm --image=busybox \ --restart=Never \ -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
-
Para observar a expansão da implantação, execute periodicamente o seguinte comando em um terminal separado do terminal em que você executou a etapa anterior.
kubectl get hpa php-apache
Veja um exemplo de saída abaixo.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 250%/50% 1 10 5 4m44s
A contagem de réplicas pode levar mais de um minuto para aumentar. Enquanto a porcentagem real da CPU for maior do que a porcentagem de meta, a contagem de réplicas aumentará, até 10. Neste caso, é
250%
, então o número deREPLICAS
continua a aumentar.nota
Poderá demorar alguns minutos para você ver a contagem de réplicas atingir seu máximo. Se apenas 6 réplicas, por exemplo, forem necessárias para que a carga da CPU permaneça em 50% ou menos, a carga não escalará além de 6 réplicas.
-
Pare a carga. Na janela do terminal em que você está gerando a carga, interrompa a carga mantendo pressionadas as teclas
Ctrl+C
. Você pode observar a escala de réplicas voltar para 1 executando o comando a seguir novamente no terminal em que está observando a redução da escala na horizontal.kubectl get hpa
Veja um exemplo de saída abaixo.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 25m
nota
O período de tempo padrão para reduzir a escala na vertical é de cinco minutos, portanto, levará algum tempo para você ver a contagem de réplicas chegar a 1 novamente, até mesmo quando a percentagem de CPU atual for 0%. O período de tempo é modificável. Para obter mais informações, consulte Horizontal Pod Autoscaler
na documentação do Kubernetes. -
Ao concluir os testes da aplicação de exemplo, exclua os recursos do
php-apache
.kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache