1. HPA 환경 구성 및 동작 확인
이번 실습은 5장 Amazon EKS 원클릭 배포 환경에서 진행합니다.
그리고 새롭게 인프라를 배포하면 아래 기본 설정 명령을 입력 후 진행 바랍니다.
기본 설정 명령어
1.1. HPA 환경 구성
테스트용 php-apache 설치
curl -s -O https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/application/php-apache.yaml
cat php-apache.yaml | yh
Bash
복사
# 테스트용 php-apache 다운로드 및 확인
kubectl apply -f php-apache.yaml
Bash
복사
# 테스트용 php-apache 배포
kubectl exec -it deploy/php-apache -- cat /var/www/html/index.php
Bash
복사
# 테스트용 php-apache 동작 확인
모니터링 - 신규 터미널
watch -d 'kubectl get hpa,pod;echo;kubectl top pod;echo;kubectl top node'
Bash
복사
# [신규 터미널] hpa, 파드 메트릭, 노드 메트릭 - 모니터링
접속 확인
PODIP=$(kubectl get pod -l run=php-apache -o jsonpath={.items[0].status.podIP})
curl -s $PODIP; echo
Bash
복사
# 파드 IP 확인 및 접속 확인
HPA 생성
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Bash
복사
# HPA 생성 - 파드의 요청 CPU의 50% 이상일 경우 스케일링 수행
kubectl describe hpa
Bash
복사
# HPA 확인
1.2. HPA 동작 확인
그라파나 대시보드 생성
•
Kubernetes / Horizontal Pod Autoscaler ID : 17125
•
Absolute time range : Last 15 minutes
php-apache에 부하 발생
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
Bash
복사
# 부하 발생 후 scale-out 확인
php-apache에 부하 중지
•
부하 중지 : 5분 후 scale-in 확인
•
Ctrl + C
1.3. HPA 실습 자원 삭제
실습 자원 삭제
kubectl delete deploy,svc,hpa,pod --all
Bash
복사
# 실습 자원 삭제
2. VPA 환경 구성 및 동작 확인
2.1. VPA 환경 구성
네임 스페이스 추가 및 모니터링 - 신규 터미널
kubectl create ns vpa
Bash
복사
# 네임 스페이스 추가
watch -d 'kubectl get pod -n vpa'
Bash
복사
# [신규 터미널] VPA 생성 자원 모니터링
VPA 설치
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
Bash
복사
# helm chart repository 추가
helm install vpa fairwinds-stable/vpa --namespace vpa
Bash
복사
# VPA 설치
kubectl get crd | grep autoscaling
Bash
복사
# VPA CRD 정보 확인
2.2. VPA 동작 확인
모니터링 - 신규 터미널
watch -d kubectl top pod
Bash
복사
# [신규 터미널] 파드 메트릭 수집 모니터링
테스트용 자원 설치
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/hamster.yaml
cat hamster.yaml | yh
Bash
복사
# 테스트용 hamster 다운로드 및 확인
kubectl apply -f hamster.yaml && kubectl get vpa -w
Bash
복사
# 테스트용 hamster 설치
VPA 동작 정보 확인
kubectl describe pod | grep Requests: -A2
Bash
복사
# 파드 리소스 요구 사항 확인
kubectl get events --sort-by=".metadata.creationTimestamp" | grep VPA
Bash
복사
# VPA에 의해 파드 삭제 및 생성 이벤트 확인
2.3. VPA 실습 자원 삭제
실습 자원 삭제
kubectl delete -f hamster.yaml
Bash
복사
# 테스트용 hamster 삭제
helm uninstall vpa -n vpa
Bash
복사
# VPA 삭제
3. CA 환경 구성 및 동작 확인
3.1. CA 환경 구성
Auto Scaling Group(ASG) 확인 및 조정
aws autoscaling describe-auto-scaling-groups \
--query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
--output table
Bash
복사
# 현재 ASG 정보 확인
export ASG_NAME=$(aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].AutoScalingGroupName" --output text); echo $ASG_NAME
Bash
복사
# ASG 이름 변수 선언
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name ${ASG_NAME} \
--min-size 3 \
--max-size 6 \
--desired-capacity 3
Bash
복사
# ASG Max Size를 6으로 변경
CA 설치 및 확인
curl -s -O https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
sed -i "s/<YOUR CLUSTER NAME>/$CLUSTER_NAME/g" cluster-autoscaler-autodiscover.yaml
Bash
복사
# CA 설치 파일 다운로드 및 변수 치환
kubectl apply -f cluster-autoscaler-autodiscover.yaml
Bash
복사
# CA 배포
kubectl get pod -n kube-system | grep cluster-autoscaler
Bash
복사
# CA 확인
3.2. CA 동작 확인
테스트용 자원 설치
cat <<EoF> nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-to-scaleout
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
service: nginx
app: nginx
spec:
containers:
- image: nginx
name: nginx-to-scaleout
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 500m
memory: 512Mi
EoF
Bash
복사
# 테스트용 디플로이먼트 파일 생성
kubectl apply -f nginx.yaml
Bash
복사
# 테스트용 디플로이먼트 배포
kubectl get deployment/nginx-to-scaleout
Bash
복사
# 테스트용 디플로이먼트 정보 확인
노드 scale-out 확인
kubectl scale --replicas=15 deployment/nginx-to-scaleout && date
Bash
복사
# replica를 15로 조정 (scale-out 확인)
aws autoscaling describe-auto-scaling-groups \
--query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
--output table
Bash
복사
# 현재 ASG 정보 확인
노드 scale-in 확인
kubectl delete -f nginx.yaml && date
Bash
복사
# 테스트용 디플로이먼트 삭제 (scale-in 확인 - 10분 이상 소요)
aws autoscaling describe-auto-scaling-groups \
--query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
--output table
Bash
복사
# 현재 ASG 정보 확인
3.3. CA 실습 자원 삭제
실습 자원 삭제
kubectl delete -f cluster-autoscaler-autodiscover.yaml
Bash
복사
# CA 삭제
4. 실습 환경 삭제
5장 HPA, VPA, CA 실습이 종료되어 Amazon EKS 원클릭 배포를 삭제해 모든 실습 환경을 삭제합니다.
실습 종료 후 자원 삭제
helm uninstall -n monitoring kube-prometheus-stack
helm uninstall -n kube-system kube-ops-view
Bash
복사
# helm chart 삭제
eksctl delete cluster --name $CLUSTER_NAME \
&& aws cloudformation delete-stack --stack-name $CLUSTER_NAME
Bash
복사
# Amazon EKS 원클릭 배포 삭제
Warning: Amazon EKS 원클릭 배포의 삭제는 약 15분 정도 소요됩니다. 삭제가 완료될 때 까지 SSH 연결 세션을 유지합니다.
Warning: 만약에 CloudFormation 스택이 삭제되지 않는다면 수동으로 VPC(myeks-VPC )를 삭제 후 CloudFormation 스택을 다시 삭제해 주세요.
여기까지 5장 HPA, VPA, CA 구성 하기 실습을 마칩니다.
수고하셨습니다 :)