- HPA 란?
- Horizontal Pod Autoscaler(HPA)는 CPU, Memory 기반으로 Pod를 Scale Out/In 을 한다. Deployment에 세팅을 해주면 hpa라고 하는 리소스가 생성된다.
- HPA에서는 기본적으로 15초 마다 메트릭을 측정하고 조건에 맞을 경우 해당 deployment를 Scale Out/In을 하게 된다. 실제로 각 Node에서 cAdvisor가 메트릭정보를 수집하고 -> kubelet으로 보낸다. EKS 원클릭 배포에서 설치한 Addon인 metric server가 k8s apiserver에 메트릭 정보를 등록하고, HPA Controller가 15초마다 값을 수집하는 방식이다.

- HPA 장단점
- HPA 장점
- 간단하고 쉬운 설정
- HPA는 선언적 구성을 통해 쉽게 설정할 수 있습니다. Kubernetes 매니페스트 파일 내에 간단한 설정을 추가하는 것만으로 자동 스케일링을 활성화할 수 있습니다.
- 자동화된 스케일링
- HPA는 CPU와 메모리 사용량과 같은 리소스 메트릭을 기반으로 자동으로 파드 수를 조절합니다. 이는 애플리케이션의 실시간 리소스 수요에 따라 파드를 자동으로 확장하거나 축소할 수 있게 해 줍니다.
- 직관적인 리소스 기반 메트릭
- CPU와 메모리 사용량은 애플리케이션 성능의 가장 일반적인 지표이므로, 이를 기반으로 한 스케일링은 많은 시나리오에서 직관적이고 효과적입니다.
- 기본 지원
- HPA는 Kubernetes에 내장되어 있으므로, 추가적인 설치 없이 바로 사용할 수 있습니다. 대부분의 Kubernetes 클러스터에서는 HPA를 기본적으로 사용할 수 있습니다.
- 피드백 루프
- HPA는 지속적인 모니터링과 피드백 루프를 통해 파드의 수를 조절합니다. 이는 애플리케이션의 부하 변화에 대응하여 리소스를 적절히 할당함으로써, 비용 효율성과 성능을 최적화합니다.
- 커스텀 메트릭스 지원
- HPA는 커스텀 메트릭스에 대한 지원을 포함하고 있어, Kubernetes 내부뿐만 아니라 외부 메트릭스를 사용하여 스케일링 결정을 내릴 수 있습니다.
- 클라우드 제공자와의 통합
- 많은 클라우드 제공자의 Kubernetes 서비스는 HPA를 지원하며, 때로는 추가적인 기능을 제공하여 클라우드 리소스의 자동화된 스케일링을 더 잘 활용할 수 있게 해 줍니다.
- 간단하고 쉬운 설정
- HPA 단점
- 메트릭 한계
- 기본 HPA는 CPU와 메모리 사용량과 같은 리소스 메트릭을 주로 사용하여 스케일링을 결정합니다. 이러한 메트릭은 반응형이며, 워크로드가 변동하는 데 반응하여 스케일링을 수행합니다.
- 이벤트 기반 스케일링 부족
- HPA는 주로 시스템 리소스 사용량에 기반하여 스케일링을 결정합니다. 그러나, 많은 애플리케이션은 메시지 큐의 메시지 수, 이벤트 발생 빈도 등과 같은 외부 이벤트에 기반하여 자원을 할당받는 것이 더 효율적일 수 있습니다.
- 높은 레이턴시
- 리소스 사용량 기반의 오토스케일링은 워크로드 변화에 대해 다소 지연된 반응을 보일 수 있습니다. 실시간으로 변화하는 워크로드에 대응하기 위해서는 더 빠른 대응이 필요합니다.
- 리소스 사용량 기반의 오토스케일링은 워크로드 변화에 대해 다소 지연된 반응을 보일 수 있습니다. 실시간으로 변화하는 워크로드에 대응하기 위해서는 더 빠른 대응이 필요합니다.
- 메트릭 한계
- HPA 장점
HPA 설정
- Deployment / Service 배포
apiVersion: apps/v1
kind: Deployment
metadata:
name: yeom-deploy1
namespace: nginx-ingress
spec:
selector:
matchLabels:
app: yeomdeploy1
template:
metadata:
labels:
app: yeomdeploy1
spec:
containers:
- name: yeomtainer1
image: nginx
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
namespace: nginx-ingress
name: yeom-svc1
spec:
ports:
- name: yeom-svc-port
port: 80
targetPort: 80
selector:
app: yeomdeploy1
- Kubernetes Mertics Server 설치
- HPA에 등록하기 위해서는 Kubernetes Metrics Server를 설치하여 HPA Controller가 클러스터의 메트릭을 수집할 수 있도록 설정해야 함
- 단순하게 apply 만 해주면 됨
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- HPA 등록
kubectl autoscale deployment yeom-deploy1 --cpu-percent=50 --min=1 --max=10 --namespace nginx-ingress
- HPA 등록시 Default로 등록되는 문제
- Context의 네임스페이스 변경하면 해결
kubectl config set-context --current --namespace=nginx-ingress
HPA 확인
- HPA 상태 확인
kubectl exec -it yeom-deploy1-7bf8c48f6c-pknc2 --namespace nginx-ingress -- /bin/sh

- 과부하 테스트
- 파드 접속 후 파드 과부하 및 파드 CPU 확인
파드 접속
kubectl exec -it yeom-deploy1-7bf8c48f6c-pknc2 --namespace nginx-ingress -- /bin/sh
과부하
yes > /dev/null
파드 CPU 확인
kubectl get hpa yeom-deploy1 --namespace nginx-ingress -w

- 파드 확인

'AWS' 카테고리의 다른 글
[AWS] WEB/WAS/RDS 연동하기 (0) | 2024.10.14 |
---|---|
[AWS] EKS - Cluster Autoscaler 설정 (0) | 2024.09.29 |
[AWS] EKS - Nginx Ingress Controller 설치 및 NLB 생성 (0) | 2024.09.29 |
[AWS] EKS - Load Balancer Controller 설치 및 ALB 생성 (0) | 2024.09.29 |
[AWS] EKS Cluster 생성 (0) | 2024.09.21 |