on
AWS EKS | 쿠버네티스 팟 자동증설 방법 - HPA autoscaler
AWS EKS | 쿠버네티스 팟 자동증설 방법 - HPA autoscaler
반응형
목차
쿠버네티스 팟 자동증설 방법 - HPA autoscaler
개요
Horizontal Pod Autoscaler는 CPU 사용량 (또는 사용자 정의 메트릭, 아니면 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션 컨트롤러(ReplicationController), 디플로이먼트(Deployment), 레플리카셋(ReplicaSet) 또는 스테이트풀셋(StatefulSet)의 파드 개수를 자동으로 스케일한다. Horizontal Pod Autoscaler는 크기를 조정할 수 없는 오브젝트(예: 데몬셋(DaemonSet))에는 적용되지 않는다.
사전조건
참고 - https://www.eksworkshop.com/beginner/080_scaling/install_kube_ops_view/
실제 HPA를 적용하기 위해 metric을 구성해야 합니다.
HPA를 적용하기 위해 metric을 구성하는 부분은
"metrics server"를 설치합니다. 참고 - https://www.eksworkshop.com/beginner/080_scaling/deploy_hpa/
(별첨)
metric을 구성하지 않으면 pod이나 node의 cpu, memory를 볼 수 있는 서비스가 존재하지 않는다고 보시면 될 것 같습니다.
metrics server를 설치하지 않고 kubectl top 명령어를 사용할 때
0. KUBE-OPS-VIEW
- Kubernetes Operational View의 약자로, 여러 쿠버네티스 클러스터의 상태를 시각적으로 볼 수 있는 간단한 페이지입니다.
- 모니터링 및 운영 관리의 목적으로 사용되진 않으나 10-2 Cluster Autoscaler와 같이 클러스터 오토스케일링 작업 시, 스케일 인/아웃의 과정을 시각적으로 관찰할 수 있습니다.
- 참고 : https://aws-eks-web-application.workshop.aws/ko/100-scaling/300-kube-ops-view.html
helm : Helm을 통해, kube-ops-view를 배포합니다. Helm은 쿠버네티스 차트를 관리하기 위한 도구로 차트는 사전 구성된 쿠버네티스 리소스 패키지를 의미합니다. Helm으로 차트를 관리하는 목적은 다양한 manifest 파일들을 손쉽게 관리하기 위함입니다.
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash helm repo add stable https://charts.helm.sh/stable
helm 을 이용하여 설치하며, service.type는 꼭 LoadBalancer를 사용해야 하는 단점이 존재하지만 자동으로 public하게 공개되는 URL이 나온다는건 장점입니다.
#설치 (메뉴얼방법) helm install kube-ops-view \ stable/kube-ops-view \ --set service.type=LoadBalancer \ --set rbac.create=True
수행 후 화면
helm 을 이용한 kube-ops-view 설치화면
kubectl proxy를 이용해서 접근하라고 하지만, 굳이 그러지 않아도 되는게 service.type에 LoadBalancer를 등록하였기 때문에 public하게 접근할 수 있습니다.
확인
kubectl get svc kube-ops-view
서비스를 확인합니다.
kube-ops-view 서비스를 확인합니다.
kube-ops-view를 통해 UI로 노드에 pod들이 배포된 자원을 확인하고
CPU, Memory 등을 확인할 수 있습니다.
kube-ops-view 설치완료 화면
1. metrics server 구성
- 참고 - https://github.com/kubernetes-sigs/metrics-server
- 쿠버네티스 metrics server를 생성합니다. Metrics Server는 쿠버네티스 클러스터 전체의 리소스 사용 데이터를 집계합니다. 각 워커 노드에 설치된 kubelet을 통해서 워커 노드나 컨테이너의 CPU 및 메모리 사용량 같은 메트릭을 수집합니다.
# 2021년 기준 설치 명령어 (v1.8)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml
# 2021년 기준 최근버전 설치 명령어 (둘중 하나만 수행)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
github에 있는 yaml파일 기준 최신 배포판인 metrics-server를 설치할 수 있습니다.
# 확인명령어
kubectl get apiservice v1beta1.metrics.k8s.io -o json | jq '.status'
all checks passed 화면이 결국 apiservice가 잘 등록되었다는 말씀
리소스 확인
kubectl get all -l k8s-app=metrics-server -A
label 명을 이용하여 metrics-server 의 모든 리소스를 확인합니다.
이제 안되던 kubectl top 명령어도 사용해 봅니다.
(top 명령어도 사용해보자)
kubectl top 명령어
2. (확인) Deploy a Sample App
- HPA를 테스트하기 위해 sample app을 하나 배포합니다.
# 샘플 php-apache 구성
kubectl create deployment php-apache --image=us.gcr.io/k8s-artifacts-prod/hpa-example kubectl set resources deploy php-apache --requests=cpu=200m kubectl expose deploy php-apache --port 80 kubectl get pod -l app=php-apache # 대신에 (kubectl get all -l app=php-apache)
cpu vCPU=0.2개 사용하는 80 export port의 서비스를 만들고, 라벨링 php-apache로 검색해서 찾아 보여줌
php-apache 샘플 pod이 배포된 것을 확인
3. HPA 설정
- HPA (Horizontal Pod Autoscaler)
kubectl autoscale deployment php-apache `#The target average CPU utilization` \ --cpu-percent=50 \ --min=1 `#The lower limit for the number of pods that can be set by the autoscaler` \ --max=10 `#The upper limit for the number of pods that can be set by the autoscaler`
최소1, 최대10 / cpu 50% 이상일때 pod이 scale-out 하도록 구성하는 명령어입니다.
HPA 구성 화면
처음에는 "/50%" 라는 표현이 나올텐데, target에 unknown은 지표를 찾을 수 없었다는 뜻이며, "50%"는 저희가 정한 상한선입니다.
즉, 50%가 넘는게 감지되면 MINPODS에서 MAXPODS 사이의 replica 갯수를 조절합니다.
1) 만약 시간이 지나도 태그가 사라지지 않는다면, metrics server 가 제대로 설치가 된건지 확인합니다.
- 사례
# hpa 확인
kubectl get hpa
- 설치
# "1. metrics server 구성" 참고 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml
2) 만약 한번 setting한 HPA(autoscale)을 수정하고 싶다면?
- edit 메소드를 사용해서 hpa를 수정 반영합니다.
# php-apache라는 HPA를 수정합니다.
kubectl edit hpa php-apache
HPA 임계치를 수정
ex) targetCPUUtilizationPercentage = 80 , minReplicas = 2 로 셋팅했습니다.
적용 바로 직후 적용 후 1분 뒤
- pod이 생성된 것까지 확인
적용 후 1분뒤 모든 리소스
(이제 metric server도 설치해보고, 실제 cpu 부하도 주고 해보자)
- unknown이 반영되는것을 테스트하기 위함
php-apache metric 확인
4. HPA 테스트
(가상의 OS를 만들어 부하를 주도록 합니다.)
kubectl --generator=run-pod/v1 run -i --tty load-generator --image=busybox /bin/sh
(별첨) 응답 테스트
wget -q -O - http://php-apache
부하 테스트( 응답테스트 응용 )
while true; do wget -q -O - http://php-apache; done
무한 반복문을 이용한 부하주기
(모니터링)
: replicas가 6대에서 8대 그리고 10대로 늘어나는 것을 확인할 수 있습니다.
php-apache pod이 증설된 모습
부하를 끊고 Scale-in이 완료된 작업
php-apache pod이 감소된 모습
여기까지 pod들이 cpu metric에 의해 자동으로 증설하고
감소하는 것을 살펴봤습니다.
metrics-server pod을 꼭 설치한 다음에
설정하셔야 제대로 동작한다는 점을 주의깊게 살펴봐주세요 ^^
끝.
관련글
1.URL 쿠버네티스 Pod 증설 - https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/
내용이 도움이 되셨거나 초보 블로거를 응원하고 싶으신 분은 아래 하트 ♥공감 버튼을 꾹 눌러주세요! 내용의 수정이 있거나 도움이 필요하신 분은 방명록을 남겨주세요!
반응형
from http://st-soul.tistory.com/238 by ccl(A) rewrite - 2021-10-08 20:00:52