실습 1탄 = 6/7
1
EKS 는 Pod에 대해 자동 증가가 고려 되어야 한다. = 미리 IP가 여유 있게 가지고 있어야 한다.
EC2기반 EKS는 Cluster에 대해서도 자동 증가가 고려 되어야 한다.
2
echo ${AWS_REGION}
리전 변경 필요시
export AWS_REGION=us-east-1
export AWS_REGION=us-east-2
export AWS_REGION=us-west-1
export AWS_REGION=us-west-2
US East (N. Virginia)us-east-1
US East (Ohio)us-east-2
US West (N. California)us-west-1
US West (Oregon)us-west-2
echo ${AWS_REGION}
3
쿠버네티스 metrics server는 클러스터 전체의 리소스 사용 데이터를 집계합니다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
매트릭 파드가 생성된다.
2
확인
kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 2m39s
4
파일 수정
cat <<EOF> flask-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-flask-backend
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-flask-backend
template:
metadata:
labels:
app: demo-flask-backend
spec:
containers:
- name: demo-flask-backend
image: $ACCOUNT_ID.dkr.ecr.ap-northeast-2.amazonaws.com/demo-flask-backend:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
cpu: 250m
limits:
cpu: 500m
EOF
kubectl apply -f flask-deployment.yaml
deployment.apps/demo-flask-backend configured
5
HPA를 설정하기 위해, yaml 파일 생성
cat <<EOF> flask-hpa.yaml
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: demo-flask-backend-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo-flask-backend
minReplicas: 1
maxReplicas: 5
targetCPUUtilizationPercentage: 30
EOF
kubectl apply -f flask-hpa.yaml
horizontalpodautoscaler.autoscaling/demo-flask-backend-hpa created
6
kubectl autoscale deployment demo-flask-backend --cpu-percent=30 --min=1 --max=5
or
kubectl autoscale deployment demo-flask-backend --cpu-percent=10 --min=1 --max=5
7
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
demo-flask-backend Deployment/demo-flask-backend <unknown>/30% 1 6 0 7s
demo-flask-backend-hpa Deployment/demo-flask-backend <unknown>/30% 1 5 1 39s
8
cloud9 새창에서
kubectl get hpa -w
(seo-eks@myeks:default) [root@myeks-host ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
demo-flask-backend Deployment/demo-flask-backend <unknown>/30% 1 5 1
demo-flask-backend-hpa Deployment/demo-flask-backend <unknown>/30% 1 5 1
9
cloud9 새창에서 부하 테스트
echo $(kubectl get ingress/backend-ingress -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/contents/aws
ab -c 200 -n 200 -t 30 http://k8s-default-backendi-xxxxxxx.us-east-1.elb.amazonaws.com/contents/aws
ab -c 200 -n 200 -t 30 http://$(kubectl get ingress/backend-ingress -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/contents/aws
// 로드 밸런서가 동작하는지 사전에 확인하자!!!
// 에러 발생
10
참고 !!!
aws 부하 테스트 가이드 = AWS에 미리 알려주고 부하 테스트해야 한다.
https://aws.amazon.com/ko/blogs/korea/how-to-loading-test-based-on-aws/
11
부하 테스트 명령어
ab -c 200 -n 200 -t 30 http://www.aaa.com
https://brunch.co.kr/@topasvga/1680
1
EC2를 삭제 해도 Autoscaling 으로 다시 EC2가 생성되어 비용이 발생 된다.
자원 삭제시 반드시 Autoscaling Group을 삭제, EC2도 없는지 확인 필수
https://brunch.co.kr/@topasvga/1883
감사합니다.