AWS 오토스케일링 정보를 알아봅니다. Cluster Autoscaler를 이용한 방법, 이것을 이용할 대 주의할 점, Horizontal Pod Autoscaler를 이용한 파드 오토스케일링 방법에 대해 파악합니다.
AWS EKS 관련 내용이 궁금하신 분은 여기 링크를 참고바랍니다.
목차
ToggleCluster Autoscaler를 이용한 데이터 플레인 오토스케일링
Cluster Autoscaler를 이용한 발견적 오토스케일링
→ 새로운 파드를 배포하려 할 때 리소스가 없어 Pending 상태의 파드가 발생했을 때 노드를 추가함.
- AWS 오토스케일링과 연결한 Cluster Autoscaler가 동작하기 위해서는 데이터 노드의 IAM 역할에 IAM 정책을 추가해야 함.
1> AWS 서비스 → 컴퓨팅 → Amazon EC2 선택
2> 인스턴스 ID 1개 선택 → IAM 역할 아래 링크 클릭
3> IAM 역할에 관한 ‘요약’ 페이지 → <정책 연결> 버튼 클릭
4> ‘정책이름’ → AutoScalingFullAccess 선택
- 오토스케일링 그룹 이름 확인
1> 서비스 → 컴퓨팅 → Amazon EC2
2> Auto Scaling 그룹 선택
3> eksctl-eks-work-xxxx 선택 → ‘Auto Scaling 그룹 이름’ 항목 표시된 Auto Scaling 그룹 이름 메모
command:
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --skip-nodes-with-local-storage=false
- --nodes=2:5<AUTOSCALING GROUP NAME>. # 오토스케일링 그룹 이름 설정
env:
- name: AWS_REGION
value: ap-northeast-2
# Cluster Autoscaler 활성화
kubectl apply -f cluster-autoscaler.yaml
# 동작 확인
kubectl logs -f deployment/cluster-autoscaler -n kube-system
# 예제 애플리케이션 레플리카 수를 10으로 변경
kubectl scale --replicas=10 deployment/backend-app
# Pending 상태의 파드 상세를 확인하면 노드 스케일 아웃을
# 기다리고 있는 것을 알 수 있다.
kubectl describe pod <Pending 상태의 파드 이름>
# Cluster Autoscaler로 노드 증가
kubectl get node
# 파드도 Running 상태
kubectl get pod
# 예제 애플리케이션 레플리카 수를 2로 변경
kubectl scale --replicas=2 deployment/backend-app
# 노드 수도 줄어든다.
kubectl get node
Cluster Autoscaler에서 주의할 점
AWS 오토스케일링 기능을 이용한 예방적 오토스케일링
- 실제 부하 상태를 보면서 노드를 스케일링하는 설정을 만듬
- pod_cpu_reserved_capacity 메트릭
- CloudWatch 왼쪽 메뉴 ‘지표’ 선택 → 오른쪽 화면 ‘사용자 지정 네임스페이스’의 ContainerInsights’ → ‘ClusterName, Namespace, PodName’ 선택 → ‘지표’ 오른쪽 검색 창 ‘pod_cpu_reserved_capacity’를 입력 검색 결과에서 ‘PodName’이 ‘cluster-autoscaler’인 항목을 선택 → 오른쪽 위에 있는 <그래프로 표시된 지표> 버튼 클릭
- EC2 ‘Auto Scaling 그룹’ 선택 → 그룹 선택 → ‘모니터링’ → ‘CloudWatch 모니터링 세부 정보’ → EC2 선택 후 CPU 사용률(백분율) 오른쪽 메뉴 버튼 ‘지표에서 보기’
Horizontal Pod Autoscaler를 이용한 파드 오토스케일링
- 목적 : 애플리케이션 자체의 스케일링
- HPA 리소스 생성 : 파드의 리소스 사용 현황을 모니터링하고 임곗값을 넘을 경우 스케일 아웃함.
매트릭 서버 배포
# 메트릭 서버를 클러스터에 적용
kubectl apply -f <https://github.com/kubernetes-sigs/metrics-server/> \\
release/download/v04.2/components.yaml
# 배포된 파드 확인
kubectl get deployment metrics-server -n kube-system
# 메트릭 API가 활성화되어 있는 것을 확인
kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
- 메트릭 서버 metrics-server – https://github.com/kubernetes-sigs/metrics-server
- https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/metrics-server.html
HPA 리소스 생성
# HPA 적용
kubectl apply -f autoscaling/horizontal-pod-autoscaler.yaml
동작 확인
# 윈도우 10의 경우 다음 명령 실행
exec winpty bash
# 부하를 주기 위한 파드 실행
kubectl run -i –tty load-generator –image=busybox –rm — sh
# 프롬프트가 표시되면 다음 명령어 입력
while true; do wget -q -0- \\
<http://backend-app-service.eks-work.sv.cluster.local:8080/health>; done
- HPA에서는 스케일 아웃은 30초, 스케일 아웃은 5분에 한 번 동작
여기까지 아마존 EKS 오토스케일링에 방법에 대해 알아보았습니다.