본 시리즈는 가시다님의 AEWS(AWS EKS Workshop) 1기 진행 내용입니다. (가시다님 노션)
스터디에 사용되는 링크 (AWS EKS Workshop)
목차
1. HPA - Horizontal Pod Autoscaler
2. KEDA - Kubernetes based Event Driven Autoscaler
3. VPA - Vertical Pod Autoscaler
4. CA - Cluster Autoscaler
5. CPA - Cluster Proportional Autoscaler
6. Karpenter : K8S Native AutoScaler & Fargate
EKS 클러스터 세팅 (Cloudformation)
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick4.yaml
1. HPA - Horizontal Pod Autoscaler
Kubernetes autoscaling overview - CON324_Optimizing-Amazon-EKS-for-performance-and-cost-on-AWS.pdf 발췌
HPA - Scale Out
VPA - Scale Up
Karpenter - EKS의 자원 상태를 직접 확인하고, 원하는 SKU의 Node 중 시스템적으로 계산해서 자동 증설
AutoScaler
Workload Autoscaling - Horizontal Pod Autoscaler
HPA 아키텍처 : cAdvisor 이 컨테이너의 메모리/CPU 수집 → metrics-server 는 kubelet 를 통해서 수집 후 apiserver 에 등록 → HPA는 apiserver(Resource API)를 통해서 15분 마다 메모리/CPU 수집하여 정책에 따라 동작
- metrics.type(Resource, Pods, Object), target.type(Utilization, AverageValue, Value)
실습 : kube-ops-view 와 그라파나(17125)에서 모니터링 같이 해보자 - 링크 Docs k8s
## php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: registry.k8s.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
# Run and expose php-apache server
curl -s -O https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/application/php-apache.yaml
cat php-apache.yaml | yh
kubectl apply -f php-apache.yaml
# 확인
kubectl exec -it deploy/php-apache -- cat /var/www/html/index.php
...
# 모니터링 : 터미널2개 사용
watch -d 'kubectl get hpa,pod;echo;kubectl top pod;echo;kubectl top node'
kubectl exec -it deploy/php-apache -- top
# 접속
PODIP=$(kubectl get pod -l run=php-apache -o jsonpath={.items[0].status.podIP})
curl -s $PODIP; echo
그라파나를 미리 준비해두어야 함(17125 추가)
php-apache deployment 배포 후 curl 명령을 while로 날려보자
Target이 35%/50%으로 올라가고 있음이 보인다.
이번에는 다른 pod가 알아서 php-ahache service를 괴롭히게 해보자
6개까지 잘 증가되었다!
이제 부하를 끊고, Scale In되기를 기다려보자
# 그럼 이제 사라져 줘야겠다
kubectl delete deploy,svc,hpa,pod --all
결론
쿠버네티스를 공부하며 한번쯤은 해봤던 HPA였는데, 그라파나까지 연동해서 보니 그럴듯해졌다 (짝짝짝짝)
HPA를 정리해보자면,
리소스 사용률 기반 스케일링: 애플리케이션의 리소스 사용률(CPU, 메모리 등)을 모니터링하고 이에 따라 Pod의 수 조절
- 리소스 사용률을 기준으로 스케일링할 수 있어 애플리케이션의 부하에 따라 자동으로 확장하거나 축소
메트릭 수집 및 모니터링: HPA는 지정된 리소스에 대한 메트릭을 주기적으로 수집하고 모니터링
- CPU 사용률, 메모리 사용률 등의 메트릭을 수집하여 애플리케이션의 상태를 파악하고 스케일링 결정에 활용
스케일링 알고리즘: HPA는 설정된 스케일링 알고리즘에 따라 Pod의 수를 조절
- Kubernetes에서 기본적으로 사용되는 스케일링 알고리즘은 리소스 사용률의 증감에 따라 Pod의 수를 조절하는 리소스 사용률 기반 알고리즘
- 사용자 정의 메트릭을 활용하여 스케일링 알고리즘을 사용자 정의 가능
HorizontalPodAutoscaler 리소스: HPA는 Kubernetes의 HorizontalPodAutoscaler 리소스를 사용하여 구성
- HPA는 특정 Deployment, ReplicaSet 또는 StatefulSet과 연결되어 해당 애플리케이션에 대한 자동 스케일링을 정의
최소 및 최대 Pod 수 제한: HPA는 설정된 최소 및 최대 Pod 수 제한에 따라 스케일링 작업을 수행
- 최소 Pod 수는 애플리케이션의 최소 가용성을 보장하며, 최대 Pod 수는 자원 소비를 제한하여 클러스터의 안정성을 유지
'Tech > Kubernetes' 카테고리의 다른 글
[AEWS_1기] 5주차 - EKS Autoscaling (3/6) - VPA (0) | 2023.05.22 |
---|---|
[AEWS_1기] 5주차 - EKS Autoscaling (2/6) - KEDA (0) | 2023.05.22 |
[AEWS_1기] 4주차 - Observability (6/6) - kubecost (0) | 2023.05.19 |
[AEWS_1기] 4주차 - Observability (5/6) - 그라파나 Grafana (0) | 2023.05.19 |
[AEWS_1기] 4주차 - Observability (4/6) - 프로메테우스-스택 (0) | 2023.05.19 |
댓글