Escalar implantações de pods com o Horizontal Pod Autoscaler - Amazon EKS

Escalar implantações de pods com o Horizontal Pod Autoscaler

O Horizontal Pod Autoscaler do Kubernetes dimensiona automaticamente o número de Pods em uma implantação, o controlador de replicação ou o conjunto de réplicas com base na utilização da CPU desse recurso. Isso pode ajudar a expandir as aplicações para atender ao aumento da demanda ou a reduzi-las quando os recursos não forem necessários, liberando os nós para outras aplicações. Quando você define uma porcentagem de utilização de CPU, o Horizontal Pod Autoscaler reduz ou expande a aplicação para tentar atingir essa meta.

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 na documentação do Kubernetes.

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 na documentação Kubernetes.

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 na documentação Kubernetes.

  1. 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.

  2. 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.

  3. 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.

  4. 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"
  5. 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 de REPLICAS 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.

  6. 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.

  7. 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