Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
O HPA é um recurso muito importante quando falamos de aplicações sendo executadas no Kubernetes, pois quando utilizamos um ambiente tão poderoso quanto o Kubernetes é porque estamos construindo ou hospedando uma aplicação que provavelmente deve trabalhar de maneira escalável.
O HPA trabalha controlando o número de réplicas de um Pod com base em uma métrica, basicamente o seu funcionamento consiste em comandar a criação de mais Pods caso o número da métrica ultrapasse o desejado, ou destruir alguns quando o recurso está pouco utilizado, o comum é que ele utilize a métrica de CPU utilizada pelo Pod, então basicamente na criação de um HPA você vai definir o número que ele deve considerar de cpu para começar a escalar, o número mínimo de Pods que ele deve manter e o número máximo que ele deve escalar.
Seu uso é bem simples de ser implementado, ele precisa ser acoplado a um deployment ou replicaset, após isso ele se encarregará de buscar as métricas desses recursos e começará a controlar o número de Pods, a seguir detalhes o seu uso.
Há mais de uma maneira de você construir um Horizontal Pod Autoscaling, a mais simples delas é definir suas configurações na própria linha de comando utilizando o kubectl, segue um exemplo:
kubectl autoscale deployment “nome-do-deployment” --cpu-percent=50 --min=1 --max=10
TerminalEsse comando cria automaticamente um HPA que controlará o deployment definido, para isso deve ser ajustado o nome do deployment que você está utilizando, também é possível alterar as métricas de porcentagem de cpu, min e max. É importante ajustar esses valores para os utilizados no seu ambiente.
Para utilizar o comando mas com um replicaset, basta substituir o tipo que será alvo, como no exemplo a seguir:
kubectl autoscale replicaset “nome-do-replicaset” --cpu-percent=50 --min=1 --max=10
TerminalTambém é possível construir a partir de um arquivo manifesto YAML, abaixo mostramos um exemplo:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nome-do-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nome-do-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
hpa.ymlTambém é possível utilizar a métrica de memória para o auto scaling:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nome-do-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nome-do-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
hpa.ymlEssa é geralmente a maneira mais utilizadas em pipelines do tipo CI/CD, aqui basta substituir o “nome-do-hpa” e “nome-do-deployment”, e as métricas que deseja utilizar, assim como o número de Pods mínimo e máximo, nas chaves minReplicas e maxReplicas respectivamente, atente-se também com o valor de targetCPUUtilizationPercentage, esse valor é que define a média utilizada de cpu para que o recurso comece a escalar ou desescalar.
O uso acima demonstra a aplicação em um Deployment, para utilizar com um replicaset, basta substituir o kind da linha 10 por Replicaset.
Como todos os recursos do Kubernetes, podemos utilizar alguns comandos que já são padrão da API com o Horizontal Pod Autoscaling.
O comando abaixo irá mostrar todos os Horizontal Pod Autoscaling que estão disponíveis no seu namespace.
kubectl get hpa
TerminalCaso queira aplicar esse comando em um outro namespace a partir do atual pode acrescentar o parâmetro –namespace=”nome-do-namespace”, como no exemplo a seguir:
kubectl get hpa --namespace=application
TerminalCom esse comando é possível ver os detalhes do seu HPA construído.
kubectl describe hpa "nome-do-hpa"
TerminalDemonstramos o quanto é simples trabalhar com escalonamento horizontal no Kubernetes, de fato ele já nos entrega um recurso muito poderoso de fácil uso e de fácil entendimento, após criado o HPA você não precisa se preocupar mais com o gerenciamento do número de Pods necessário para atender a demanda.
Importante lembrar que é interessante tentar buscar uma métrica mais assertiva quanto ao número de utilização de cpu para que o HPA se torne mais otimizado, pois esse número além de controlar a criação de novos Pods para atender o escalonamento também destrói Pods existentes quando a média no número de cpu está abaixo do definido.