Kubernetes

Horizontal Pod Autoscaling 적용하기

백셀건전지 2021. 8. 31. 15:42

0. HPA(Horizontal Pod Autoscaling)이란

Horizontal Pod Autoscaling은 Node에 배포된 CPU 사용량(또는 베타 지원의 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션 컨트롤러, 디플로이먼트, 레플리카 셋 또는 스테이트풀 셋의 파드 개수를 자동으로 Scale Out하고 Scale In하는 기능을 말한다. 

비슷한 기능으로 Vertical Pod Autoscaling이 있는데, 이는 HPA와는 달리 Pod에 할당된 resource request 값을 적절히 조절하여 pod의 "크기"를 조정하는 것이다.


1. Metric Server 설치

Metric Server는 각 Pod와 Node의 리소스 사용량을 확인할 수 있는 컴포넌트이다.

아래의 명령어를 통하여 component를 다운로드받는다.

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

다운로드 한 후 vi 편집기로 components.yaml 파일을 열어 아래의 --kubelet-insecure-tls 값과 --kubelet-preferred-address-types 값을 추가한다.

이는 Metric Server는 Public TLS 통신을 기본으로 하지만, Kube API는 자체의 TLS를 사용하기 때문이다.

]$ vim components.yaml
....
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
....

kubectl apply 명령어로 components.yaml파일을 적용한다.

Metric Server에 필요한 쿠버네티스 컴포넌트들이 한꺼번에 설치된다.

]$ kubectl apply -f components.yaml
 
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server unchanged
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

2. CPU 리소스 확인

CPU와 메모리 사용량이 정상적으로 나오기 위해서는 deployment.yaml 파일의 container 옵션 중 resource를 정의해 주어야 조회가 가능하다.

Metric server가 정상적으로 설치되면, kubectl top 명령어를 통하여 cluster 내의 pod들에 대한 CPU와 메모리 사용량을 확인할 수 있다.

kubectl top pods -A

3. Autoscale 설정

위의 명령어를 통해 CPU와 Memory가 조회되면, kubectl autoscale 명령어를 통해 HPA를 적용할 수 있다.

autoscale의 옵션 중 --min과 --max flag는 pod의 최소/최대 갯수이고, --cpu-percent는 위에 정의한 cpu request 대비 몇 %이상 시 scale out 될 것인지에 대한 조건이다.

명령어 실행 후 kubectl get hpa 명령어를 통하여 적용된 HPA를 확인할 수 있다.

kubectl autoscale deployment -n ${NAMESPACE} ${DEPLOYMENT_NAME} --cpu-percent=90 --min=2 --max=10
kubectl get hpa -A

 

HPA가 정상적으로 적용되었는지 확인하기 위해서는 아래의 명령어를 통하여 traffic를 증가시킬 수 있다.

while true;
do curl${url};
done

 

'Kubernetes' 카테고리의 다른 글

Istio Envoy Proxy의 TCP Dump 수집  (0) 2021.12.24
Pod Affinity를 적용하여 Pod 분산 배포하기  (0) 2021.09.01
Vertical Pod Autoscaling 적용하기  (0) 2021.09.01
EKS에 EFS Mount하기  (0) 2021.08.31
Blue/Green Deployment with Istio  (0) 2021.08.31