# 쿠버네티스 에서는 두가지의 오토스케일링 정책을 제공한다.
1. Cluster Autoscaler : AWS EC2의 오토스케일링과 같이 EC2 인스턴스 자체를 스케일 아웃 하여 신규로 생성하는 것을 말한다.
2. Horizontal Pod Autoscaler : HPA : pod에 스케일 아웃 옵션을 주어 해당 리소스가 임계값을 초과해서 사용할 경우 pod를 증가시키는 방법이다.
# 여기서 Cluster Autoscaler는 생략하고, HPA에 대해서 설명하도록 하겠다.
1. 메트릭 서버배포
- pod의 자원 현황을 실시간으로 확인해야 하므로 지표값을 수집하는 역할을 하는 메트릭 서버를 배포한다.
- 배포하는 방법은 다양하다.
# pod와 node들의 자원을 모니터링 하는 방법에 대해서 알아보자.
- 명령어를 실행하여 yaml 파일을 설치하자.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
- 정상적으로 설치 후 아래의 명령어를 입력하면 아래와 같이 리소스 사용량을 실시간으로 확인 할 수 있다.
seungkim:~/environment $ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
ip-192-168-57-22.ap-northeast-2.compute.internal 60m 3% 1512Mi 21%
ip-192-168-87-102.ap-northeast-2.compute.internal 98m 5% 966Mi 13%
- 배포된 메트릭 파드 확인 > 정상적으로 배포되어 실행중인것을 확인 할 수 있다.
kubectl get deployment metrics-server -n kube-system
seungkim:~/environment $ kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 7m21s
2. HPA 리소스 생성
- YAML 파일로 작성할 코드를 생성한다. 파일명은 horizontal-pod-autoscaler.yaml 파일로 한다.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: backend-app
namespace: kube-example-zzanggu
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: backend-app
minReplicas: 2
maxReplicas: 5
targetCPUUtilizationPercentage: 50
- 생성한 YAML 파일을 실행한다.
seungkim:~/environment $ kubectl apply -f horizontal-pod-autoscaler.yaml
horizontalpodautoscaler.autoscaling/backend-app created
seungkim:~/environment $ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
backend-app Deployment/backend-app <unknown>/50% 2 5 0 71s
- 부하 발생기를 생성하여 pod에 부하를 발생시킨다.
- 부하 발생을 위한 pod를 실행시킨다.
seungkim:~/environment $ kubectl run -i --tty load-generator --image=busybox --rm -- sh
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
/ # while true; do wget -q -o- \
> http://backend-app-service.eks-work.svc.cluster.local:8080/health; done
- 부하 발생 화면
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
wget: bad address 'backend-app-service.eks-work.svc.cluster.local:8080'
- hpa 상태 조회: CPU 사용량이 50% 이상 증가하면 pod가 하나씩 증가하는 방식으로 설정되어 있다.
- MAXPODS가 5개로 설정되어 있고 최소 PODS는 2개로 설정되어 있는것을 확인 할 수 있다.
seungkim:~/environment $ kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
backend-app Deployment/backend-app <unknown>/50% 2 5 0 14m
- HPA에서는 기본값으로 스케일 아웃은 30초, 스케일 인은 5분에 한 번 동작한다.
- 끝 -
'⭐ Kubernetes & EKS > EKS' 카테고리의 다른 글
error: You must be logged in to the server (Unauthorized) 에러 발생 시 해결방법 (0) | 2022.03.14 |
---|---|
GKE vs EKS vs AKS 비교 (0) | 2022.02.25 |
EKS 리소스 관리 (requests와 limits) (0) | 2022.01.03 |
pod의 헬스체크 (Readiness Probe와 Liveness Probe) (0) | 2022.01.03 |
컨테이너를 외부로 공개하기 위한 리소스 (0) | 2022.01.03 |