CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 5주차 스터디 내용 정리
Kubernetes 에서 기본으로 제공하는 Pod AutoScaling 기능으로는 HPA, VPA 가 존재합니다.
CSP 의 Managed Kubernetes 서비스를 사용하면 Node AutoScaling 기능인 CA 를 사용할 수 있습니다.
이 3가지를 가장 기본적인 Kubernetes AutoScaling 이라고 할 수 있습니다.
이번 포스팅에서는 EKS AutoScaling 중 Pod의 수평적 오토스케일링을 할 수 있는 HPA 에 대해 알아보겠습니다.
1. HPA (Horizontal Pod Autoscaling)
HPA 는 용어 그대로 수평적 파드 오토스케일링 기능으로
현재의 EKS 사용 메트릭에 따라 Minimum - Maximum Pod 개수에 따라 Pod 를 배포할 수 있습니다.
[Scale In - Out 기능]
EKS 에서 HPA 는 HorizontalPodAutoscaler 를 통해 구현할 수 있습니다.
HorizontalPodAutoscaler는 배포, 복제 컨트롤러 또는 복제본 집합에 있는 pods의 수를 해당 리소스의 CPU 사용률에 따라 자동으로 조정합니다.
1.1. Metrics Server Install
HPA 를 구현하기 위해 EKS 상에 운영되고 있는 리소스를 수집할 목적으로 Metrics Server 를 설치해줍니다.
# Helm 설치
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
1.2. 테스트 APP 배포
HPA 를 위한 테스트 APP 을 배포해봅니다.
해당 테스트 코드는 k8s 공식 문서의 코드를 사용했습니다.
curl -s -O https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/application/php-apache.yaml
cat php-apache.yaml | yh
kubectl apply -f php-apache.yaml
1.3. HPA 정책 생성
CPU 사용률이 50% 이상을 넘어가면 최대 10개까지 Pod 를 생성하는 정책입니다.
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
kubectl describe hpa
실제 사용된 HorizontalPodAutoscaler Yaml 파일 형식입니다.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
metrics:
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
1.4. HPA 테스트를 위한 Pod 생성
busybox Pod를 통해서 기존에 생성한 php-apache pod 에 부하를 줍니다.
kubectl run -i \
--rm \
--tty load-generator \
--image=busybox:1.28 \
--restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
1 개만 존재하던 php-apache pod 가 7개까지 생성된 것을 확인할 수 있습니다.
참고 문서
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/horizontal-pod-autoscaler.html
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details
https://kubetm.github.io/k8s/08-intermediate-controller/hpa/