지금까지는 사용자 1명이 파드에 접근하는 방법을 알아봤다. 그런데 사용자가 갑자기 늘어나게 된다면 파드가 더 이상 감당할 수 없어서 해당 서비스를 정상적으로 유지하기 힘들 것이다. 쿠버네티스는 이런 경우를 대비해 부하량에 따라 디플로이먼트의 파드 수를 유동적으로 관리하는 기능을 제공한다. 이를 HPA(Horizontal Pod Autoscaler)라고 한다. 이번에는 HPA를 어떻게 설정하고 사용하는지 알아본다.
kubectl expose deployment hpa-hname-pods --type=LoadBalancer --name=hpa-hname-svc --port=80
HPA 작동 구조
그림을 보면 HPA가 자원을 요청할 때 메트릭 서버(Metrics-Server)를 통해 계측 값을 전달받는다. 현재 메트릭 서버가 없기 때문에 계측 값을 수집하고 전달해 주는 메트릭 서버를 설정해야 한다.
kubectl create -f ~/_Book_k8sInfra/ch3/3.3.5/metrics-server.yaml
쿠버네티스 메트릭 서버 파일은 깃허브에 올라와 있지만 실습을 위해 실습 파일로 대체(TLS 인증 무시, kubelet이 내부 주소를 우선 사용하게 변경)
현재는 아무런 부하가 없으므로 cpu와 memory 값이 매우 낮게 나온다.
현재 상태는 scale 기준 값이 설정돼 있지 않아서 파드 증설 시점을 알 수가 없다. 따라서 파드에 부하가 걸리기 전에 scale이 실행되게 디플로이먼트에 기준 값을 기록. 이때 Deployment를 새로 배포하기보다는 기존에 배포한 디플로이먼트 내용을 edit 명령으로 직접 수정
KUBE_EDITOR="vim" kubectl edit deployment hpa-hname-pods
kubectl autoscale deployment hpa-hname-pods --min=1 --max=30 --cpu-percent=50
특정 조건이 만족되는 경우에 자동으로 scale 명령이 수행되도록 한다. min은 최소 파드의 수, max는 최대 파드의 수, cpu-percent는 cpu 사용량이 50% 넘게되면 autosclae하겠다는 뜻이다.