Tip ☆ HPA를 통해 늘어나는 파드 수 계산 방법
HPA는 다음과 같은 방법으로 파드의 증가 또는 감소를 조절합니다. 디플로이먼트 스펙에서 resources의 CPU를 10m으로 설정하고, autoscale에서 cpu-percent를 50%로 했다고 가정하겠습니다.
kubectl top pods로 확인된 파드의 메트릭(CPU, MEMORY) 값이 다음과 같다고 해봅시다.
[root@m-k8s ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
hpa-79fc78897f-2qv58 29m 1Mi
파드는 29m이라는 부하를 받고 있습니다. 1개의 파드가 처리할 수 있는 부하는 10m이고, CPU 부하량이 50%가 넘으면 추가 파드를 생성해야 하므로 부하가 5m이 넘으면 파드를 증설하게 돼 있습니다. 따라서 29m/5를 하고 올림하면 6이라는 숫자가 나옵니다. 결국 증가하는 파드의 수는 6입니다. 이때 부하 총량을 가지고 HPA가 작동하기 때문에 일부 파드는 5m을 넘을 수도 있습니다.
[root@m-k8s ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
hpa-79fc78897f-2qv58 7m 1Mi
hpa-79fc78897f-cl7zv 4m 1Mi
hpa-79fc78897f-gwngb 3m 1Mi
hpa-79fc78897f-lqm2m 5m 1Mi
hpa-79fc78897f-thvjs 4m 1Mi
hpa-79fc78897f-ase3p 6m 1Mi
예를 들어, 1개의 파드에서만 다음과 같이 부하가 발생한다면 해당 부하는 분산되지 않습니다. 따라서 부하 분산을 위해서는 쿠버네티스 서비스를 통해 파드 그룹인 디플로이먼트에 도달해야 합니다.
[root@m-k8s ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
hpa-79fc78897f-2qv58 24m 1Mi
hpa-79fc78897f-cl7zv 0m 1Mi
hpa-79fc78897f-gwngb 0m 1Mi
hpa-79fc78897f-lqm2m 0m 1Mi
hpa-79fc78897f-thvjs 0m 1Mi
kubectl get hpa를 실행하면 HPA의 현재 상태를 요약해서 보여줍니다.
[root@m-k8s ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa Deployment/hpa 48%/50% 1 30 6 9m35s