본문 바로가기

Programming/Cloud

DAY 179. 쿠버네티스(Kubernetes) - HPA

 

 

더보기

[시작하기에 앞서]

 

웹 서버가 감당할 수 없는만큼 사용자 양이 크게 늘어났을 경우 처리 방법

 

1. Scale-up : 서버 자체 성능을 향상 시킨다.

- 서버를 더 많은 숫자의 사용자를 감당할 수 있도록 스케일 업 한다.

- 그러나 하드웨어에는 물리적으로 한계가 있다.

 

2. Scale-out : 동일한 서버를 여러 개를 운영한다.

- 2대 이상 증설하여 서버를 운영하는 것을 스케일 아웃 이라고 한다.

- 사용자들이 보내는 요청, 즉 트래픽을 균일하게 분배해주는 로드 밸런서가 필요하다.

 

▷ 로드 밸런싱 : 로드 밸런서가 모든 요청을 받아서 적절히 서버에 분배해주는 부하분산 역할을 하는 것이 서비스 객체이다.

 ReplicaSet : 서버의 갯수가 일정히 유지되도록 한다.

 

서비스가 운영되면서 사용자가 많이 접속하는 시간이 있다고 하면, 접속이 많지 않은 시간에 굳이 웹서버를 여러 대를 구동시킬 이유가 없다. 그래서 이런 것을 유동적으로 조정하는 것이 Auto Scale이다.

 

 HPA(HorizontalPodAutoscaler) : Pod를 수평으로 늘렸다 줄였다 하는 역할(쿠버네티스에서 Auto Scale이 가능하도록 하는 것)

 

 

kuweb-hpa.yaml

▷ minReplicas : 최소 Replicas 개수

▷ maxReplicas : 최대 Replicas 개수

▷ targetCPUUtilizationPercentage : CPU 사용 %, 지정 퍼센트 이상이 되면 maxReplicas 숫자까지 증가한다.

 

 

▶ kubectl apply -f .\kuweb-hpa.yaml

horizontalpodautoscaler.autoscaling/kuweb-hpa created

 

kubectl describe hpa kuweb-hpa

 

yaml 파일에 작성한 대로 잘 나온다.

 

 


 

 

kubernetes metric server 설치해보자.

 

https://github.com/kubernetes-sigs/metrics-server

 

GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in aut

Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines. - GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container reso...

github.com

 

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

 

위의 명령어 입력하면 설치가 된다.

serviceaccount/metrics-server created

 

 

 

 

 

▶ kubectl get pods --all-namespaces

 

여태까지 안 보이던 쿠버테티스 시스템에서 사용하는 pod들을 볼 수 있다.

그 중 metrics-server(디플로이)- ~(레플리카셋)- ~(파드)

그러나 지금은 READY 가  0/1 인 상태

 

 

▶kubectl logs --namespace=kube-system metrics-server-블라블라

 

because it doesn't contain any IP SANs" node="docker-desktop" 

에러 발생

 

▶kubectl edit deploy -n kube-system metrics-server

명령어 실행하면 메모장으로 yaml 파일이 열리는데 args 검색해서 설정 부분 밑에 

 --kubelet-insecure-tls 설정을 넣어야 한다. (띄어 쓰기로 할 것)

 

설정 변경 후 메모장 닫으면 deployment.apps/metrics-server edited 라고 나온다.

 

kubectl get pods --all-namespaces

kubectl get hpa

명령어로 CPU 사용률 등을 확인할 수 있다.

 

 

 

kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://kuweb-service; done"

 

이렇게하고 또 다른 poswershell에서 kubectl get hpa로 보면 계속해서 CPU 사용률이 증가하는 것을 볼 수 있다.

 

그리고 명령어 Ctrl + C로 종료하고 일정 시간이 지나면서 계속 확인해보면 TARGETS가 0%로 줄어들고 kuweb-deployment (Pod) 가 기본 설정 갯수까지 떨어진다.