Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #8] HPA 및 Cluster Autoscaler 연동을 통한 동적 확장

ygtoken 2025. 3. 16. 18:57
728x90

 

쿠버네티스에서는 애플리케이션 부하가 증가할 때, 자동으로 리소스를 확장하여 서비스 안정성을 유지해야 합니다.

이를 위해 HPA(Horizontal Pod Autoscaler)와 Cluster Autoscaler를 연동하여 Pod 및 노드 수준에서 자동 확장하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. HPA를 활용한 Pod 자동 확장 설정

2. Cluster Autoscaler와 HPA를 연동하여 리소스 최적화

3. kubectl을 활용한 HPA 및 Cluster Autoscaler 작동 상태 모니터링

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ HPA를 활용한 Pod 자동 확장 설정

 

❓ 문제 상황

 

운영팀에서 트래픽 증가 시 Pod이 자동으로 확장되도록 설정해야 합니다.

CPU 사용률이 50%를 초과하면 최대 5개의 Pod까지 자동으로 확장되도록 HPA를 설정해야 합니다.

Deployment 이름: web-app

최소 Pod 개수: 2개

최대 Pod 개수: 5개

CPU 사용률 임계값: 50%

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. HPA를 설정하여 CPU 사용률이 50%를 초과하면 Pod 개수를 자동 확장합니다.

 

2. kubectl 명령어를 활용하여 HPA가 정상적으로 작동하는지 확인합니다.

 


✅ 정답 Manifest (HPA 설정)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-app
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50  # CPU 사용률이 50%를 초과하면 확장

 

 


📌 적용 후 예상 결과 값

 

1. HPA가 정상적으로 생성되었는지 확인

kubectl get hpa

 

💡 예상 출력 값

NAME         REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
web-app-hpa  Deployment/web-app   30%/50%  2        5        2          10s

 

2. 부하 테스트 후 HPA 작동 확인

kubectl get hpa

 

💡 예상 출력 값 (CPU 사용률이 50%를 초과하여 Pod 확장됨)

NAME         REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
web-app-hpa  Deployment/web-app   70%/50%  2        5        4          1m

CPU 사용률이 증가하면 자동으로 Pod 개수가 확장됨

 


2️⃣ Cluster Autoscaler와 HPA를 연동하여 리소스 최적화

 

❓ 문제 상황

 

운영팀에서 HPA에 의해 Pod 개수가 증가했지만, 클러스터 내 가용 노드 리소스가 부족하여 새 Pod이 스케줄링되지 못하는 문제가 발생했습니다.

이를 해결하기 위해 Cluster Autoscaler를 활성화하여 노드가 자동으로 추가되도록 설정해야 합니다.

최소 노드 개수: 2개

최대 노드 개수: 5개

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Cluster Autoscaler를 활성화하여 노드의 자동 확장을 설정합니다.

 

2. HPA와 연동하여 Pod이 증가하면 필요한 노드가 추가될 수 있도록 구성합니다.

 


✅ Cluster Autoscaler 설정 (GKE, EKS, AKS 예제 포함)

 

🔹 GKE에서 Cluster Autoscaler 활성화

gcloud container clusters update my-cluster \
  --enable-autoscaling \
  --min-nodes 2 \
  --max-nodes 5 \
  --node-pool default-pool

 

🔹 EKS에서 Cluster Autoscaler 활성화

eksctl scale nodegroup --cluster=my-cluster \
  --name=my-nodegroup --nodes-min=2 --nodes-max=5

 

🔹 AKS에서 Cluster Autoscaler 활성화

az aks update --resource-group my-resource-group \
  --name my-cluster --enable-cluster-autoscaler \
  --min-count 2 --max-count 5

이제 HPA가 Pod을 확장하면, Cluster Autoscaler가 필요한 경우 노드를 추가함

 


📌 적용 후 예상 결과 값

 

1. HPA에 의해 Pod이 확장되었지만, 노드 리소스 부족으로 Pending 상태 확인

kubectl get pods

 

💡 예상 출력 값 (노드 부족으로 Pending 상태)

NAME                          READY   STATUS    RESTARTS   AGE
web-app-5df5c4d4c5-1a2b3      1/1     Running   0          5m
web-app-5df5c4d4c5-2b3c4      1/1     Running   0          5m
web-app-5df5c4d4c5-3c4d5      0/1     Pending   0          30s  <- 노드 부족

 

2. Cluster Autoscaler가 새로운 노드를 추가하여 Pending 상태 해소

kubectl get nodes

 

💡 예상 출력 값 (새로운 노드 추가됨)

NAME          STATUS   ROLES    AGE   VERSION
node-1        Ready    <none>   15m   v1.26.2
node-2        Ready    <none>   15m   v1.26.2
node-3        Ready    <none>   1m    v1.26.2

Cluster Autoscaler가 새로운 노드를 추가하고, Pod이 정상적으로 배포됨

 


3️⃣ kubectl을 활용한 HPA 및 Cluster Autoscaler 작동 상태 모니터링

 

❓ 문제 상황

 

운영팀에서 HPA와 Cluster Autoscaler가 정상적으로 동작하는지 확인하고, 현재 상태를 모니터링해야 합니다.

kubectl 명령어를 활용하여 HPA 및 노드 자동 확장 상태를 점검해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl get hpa 명령어를 사용하여 HPA 상태를 확인합니다.

 

2. kubectl get nodes 명령어를 사용하여 노드 확장 상태를 점검합니다.

 


✅ HPA 및 Cluster Autoscaler 상태 확인 명령어

 

🔹 현재 HPA 상태 확인

kubectl get hpa

 

💡 예상 출력 값

NAME         REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
web-app-hpa  Deployment/web-app   75%/50%  2        5        5          2m

 

🔹 현재 노드 상태 확인

kubectl get nodes

 

💡 예상 출력 값

NAME          STATUS   ROLES    AGE   VERSION
node-1        Ready    <none>   20m   v1.26.2
node-2        Ready    <none>   20m   v1.26.2
node-3        Ready    <none>   2m    v1.26.2

HPA와 Cluster Autoscaler가 정상적으로 작동하고 있으며, 부하에 따라 확장이 이루어지고 있음

 

728x90