1. 개요

 - HPA는 Horizontal Pod Autoscaler의 약자입니다.

   HPA는 애플리케이션 메트릭을 모니터링하여 Deployment, ReplicaSet, StatefulSet의 Pod 수를 자동으로 조절하는 기능입니다.


* 참고 URL: https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/


2. 사전 조건

 - EKS 구축(Worker Node 포함)

 - EKS 관리할 서버 구축

 - EKS 관리하는 서버에 kubectl 설치


3. 내용

  3.0 EKS 구축 및 kubectl 명령어 확인

       → Node Status가 Ready 확인(Status가 Not Ready이거나 kubectl 명령어가 나오지 않을 경우 정상적으로 EKS 구축이 되지 않은 것이므로 꼭 확인 바랍니다.)

    - 클러스터 접근 및 Node 상태 확인

      [명령어]

       $ aws eks --region update-kubeconfig --name

       $ kubectl get nodes

       


    3.1 Metric Server 설치

      [명령어]

       $ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

       $ kubectl get pods -A -o wide

 

       $ kubectl get apiservice v1beta1.metrics.k8s.io -o json | grep -i -A 5 status

     


       [top 확인]

        $ kubectl run nginx-pod --image=nginx

        $ kubectl get pods

        $ kubectl top pods nginx-pod

       

        $ kubectl delete pods nginx-pod


    3.2 HELM 설치

      [명령어]

       $ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

       $ helm version --short

     

       $ helm repo add stable https://charts.helm.sh/stable

       $ helm completion bash >> ~/.bash_completion

       $ source


    3.3 application 배포

      [명령어]

       $ kubectl create deployment php-apache --image=us.gcr.io/k8s-artifacts-prod/hpa-example

       $ kubectl set resources deploy php-apache --requests=cpu=200m

       $ kubectl expose deploy php-apache --port 80

       $ kubectl get pods -A --show-labels | grep -i php-apache

     


    3.4 HPA 설정

      [명령어]

       $ kubectl autoscale deployment php-apache --max=10 --min=1 --cpu-percent=30 

         -> Pod단 CPU 30% 이상일 때 최소 갯수는 1개, 최대 갯수는 10개로 Scale Out하도록 구성


      * HPA 수정 (CPU 및 최소 / 최대 갯수 변경시)

       $ kubectl edit hpa php-apache(빨간색 네모 박스 수정)

       


    3.5 부하테스트

      [부하 전]

       $ watch -d kubectl get deployment,replicaset,pods -o wide -A


      [부하 후]

       $ kubectl --generator=run-pod/v1 run -i --tty load-generator --image=busybox /bin/sh

       $ wget -q -O - http://php-apache

        → OK! 떨어지면 정상

       $ while true; do wget -q -O - http://php-apache; done


감사합니다.