반응형
현재 Pod(cotainer)가 실행되면서 CPU 값이 급등하게 증가하게 되면 자동으로 Pod를 Scaling 하고자합니다. 즉, Pod에 부하가 발생시 Pod를 자동으로 Auto Scaling을 구현하도록 합니다.
1. 먼저 Kubernetes metrics Server를 생성합니다. 매우 중요!!! Metrics Server가 없으면 Pod에 CPU값을 확인할 수 없어요
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
2. Metrics Server가 정상적으로 생성되었는지 확인합니다.(한 14초 정도 걸림)
kubectl get deployment metrics-server -n kube-system
또는
kubectl top pods -n kube-system
- 실행 중
- CPU 및 메모리 확인
Deployment Object Pod에 CPU값 할당하기
1. 컨테이너에 필요한 리소스 양 업데이트합니다.(deployment.yaml)
#수정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
namespace: wsi-skills-namespace
labels:
app: backend-deployment
spec:
replicas: 2
selector:
matchLabels:
app: backend-deployment
template:
metadata:
labels:
app: backend-deployment
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: worker2 #Node Key
operator: In
values:
- backend #Node Value
containers:
- name: backend-dockerimages
image: [[DockerImage]]
ports:
- containerPort: 8080
resources: #이 부분을 꼭 지정해줘야합니다
requests:
cpu: "150m"
limits:
cpu: "250m"
kubectl apply -f deployment.yaml
2. 할당을 확인합니다.
kubectl get pods [[PodFullName]] --namespace=wsi-skills-namespace -o yaml | grep resources -C 8
3. HPA 설정(hpa.yaml)
cat << EOF > hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: backend-end-hpa-k8s
namespace: wsi-skills-namespace #Namespace를 지정해줘야합니다 중요!!!!
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: backend-deployment
minReplicas: 2 #Pod minSize
maxReplicas: 5 #Pod MaxSize
targetCPUUtilizationPercentage: 30
EOF
kubectl apply -f hpa.yaml
4. kubectl get hpa -n wsi-skills-namespace → HPA 상태 확인(처음에 10초정도 걸림 그 뒤 0%뜸)
5. hpa 부하를 테스트 하기위해 hpa 명령을 백그라운드로 실행
kubectl get hpa -w -n wsi-skills-namespace
6. 부하 테스트(부하가 늘어나는 것을 확인합니다)
sudo yum install -y httpd-tools
#이 테스트는 internal 기존에 부하 시키기
ab -c 200 -n 200 -t 30 http://$(kubectl get ingress/[[ingressName]] -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/대상그룹HealthCheckPath
#이 테스트는 리다이렉션해서 부하시키기
while true;do curl -L wsi-match-alb-1805030163.ap-northeast-2.elb.amazonaws.com/?type=test; sleep 0; done
7. Pod의 갯수를 확인합니다. Pod에 갯수가 늘어나는 것을 확인할 수 있습니다.
kubectl get deployment backend-deployment --namespace=wsi-skills-namespace
- 결과
8. 부하를 안주게되면 다시 CPU 사용률이 줄어듭니다.
9. 삭제하는 방법도 있어야겠죠?
kubectl get hpa
kubectl delete hpa [[HPAName]]
반응형
'2022년 전에 정리한 문서들' 카테고리의 다른 글
HPA Option 추가(CPU) (0) | 2022.08.24 |
---|---|
EKS - Horizontal Pod Autoscaling(Memory) - Pod (0) | 2022.08.24 |
EKS - Internal ALB Node Objects(Backend) - 1.22 Version (0) | 2022.08.24 |
EKS - Internet-facing ALB Node Objects(Front) - 1.22 Version (0) | 2022.08.24 |
EKS - ALB Controller Create (0) | 2022.08.24 |