쿠버네티스 클러스터에서는 노드 장애가 발생했을 때 자동으로 복구되지 않으면 서비스에 영향을 줄 수 있습니다.
이를 방지하기 위해 Cluster Autoscaler를 활용하여 장애가 발생한 노드를 자동으로 교체하고, 필요한 경우 노드를 동적으로 추가하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. Cluster Autoscaler를 활용한 노드 자동 스케일링 및 장애 노드 복구
2. 노드 장애 감지 및 자동 교체 설정
3. kubectl 명령어를 활용한 노드 상태 모니터링 및 스케일링 로그 확인
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ Cluster Autoscaler를 활용한 노드 자동 스케일링 및 장애 노드 복구
❓ 문제 상황
운영팀에서 애플리케이션 부하 증가 시 노드를 자동으로 추가하고, 트래픽이 줄어들면 노드를 자동으로 제거하는 기능이 필요합니다.
이를 위해 Cluster Autoscaler를 설정하여 동적 스케일링을 적용해야 합니다.
• 최소 노드 개수: 2개
• 최대 노드 개수: 5개
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Cluster Autoscaler를 설정하여 노드 풀을 자동으로 확장하거나 축소할 수 있도록 구성합니다.
2. kubectl 명령어를 사용하여 노드 상태를 모니터링하고 자동 확장이 정상적으로 작동하는지 확인합니다.
✅ Cluster Autoscaler 설정 (GKE, EKS, AKS 예제 포함)
🔹 GKE (Google Kubernetes Engine)에서 Cluster Autoscaler 활성화
gcloud container clusters update my-cluster \
--enable-autoscaling \
--min-nodes 2 \
--max-nodes 5 \
--node-pool default-pool
🔹 EKS (AWS Elastic Kubernetes Service)에서 Cluster Autoscaler 활성화
eksctl scale nodegroup --cluster=my-cluster \
--name=my-nodegroup --nodes-min=2 --nodes-max=5
🔹 AKS (Azure Kubernetes Service)에서 Cluster Autoscaler 활성화
az aks update --resource-group my-resource-group \
--name my-cluster --enable-cluster-autoscaler \
--min-count 2 --max-count 5
📌 적용 후 예상 결과 값
1. 현재 노드 개수 확인
kubectl get nodes
💡 예상 출력 값 (기본 노드 수 2개)
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 10m v1.26.2
node-2 Ready <none> 10m v1.26.2
2. 부하 증가 후 자동 확장 확인
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> 2m v1.26.2
✅ 부하 증가에 따라 자동으로 노드가 추가됨
2️⃣ 노드 장애 감지 및 자동 교체 설정
❓ 문제 상황
운영팀에서 노드가 장애로 인해 정상적으로 동작하지 않는 경우, 해당 노드를 자동으로 교체하고 서비스 다운타임을 최소화해야 합니다.
이를 위해 Cluster Autoscaler와 함께 노드 장애 감지 및 자동 대체 기능을 설정해야 합니다.
• 비정상적인 노드는 자동으로 교체
• 기존 노드가 정상 상태로 복구되지 않으면 새로운 노드 추가
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl 명령어를 사용하여 비정상적인 노드를 감지합니다.
2. Cluster Autoscaler가 정상적으로 동작하는지 확인합니다.
✅ 노드 장애 감지 및 자동 교체 명령어
🔹 비정상적인 노드 확인
kubectl get nodes
💡 예상 출력 값 (비정상 상태 노드 감지)
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 20m v1.26.2
node-2 NotReady <none> 20m v1.26.2
node-3 Ready <none> 5m v1.26.2
🔹 비정상적인 노드 제거 및 교체
kubectl drain node-2 --ignore-daemonsets --delete-local-data
kubectl delete node node-2
💡 예상 출력 값 (새로운 노드 자동 추가됨)
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 20m v1.26.2
node-3 Ready <none> 5m v1.26.2
node-4 Ready <none> 1m v1.26.2
✅ 비정상 노드가 삭제되고, 새로운 노드가 자동으로 추가됨
3️⃣ kubectl 명령어를 활용한 노드 상태 모니터링 및 스케일링 로그 확인
❓ 문제 상황
운영팀에서 현재 노드의 상태 및 Cluster Autoscaler의 동작 로그를 확인해야 합니다.
kubectl 및 로그 분석을 통해 자동 확장 및 축소 과정이 정상적으로 이루어지는지 검토해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl get nodes 명령어를 사용하여 현재 노드 상태를 점검합니다.
2. Cluster Autoscaler 로그를 확인하여 노드 추가 및 제거 이벤트를 모니터링합니다.
✅ 노드 상태 모니터링 및 로그 확인 명령어
🔹 현재 노드 상태 확인
kubectl get nodes
💡 예상 출력 값
NAME STATUS ROLES AGE VERSION
node-1 Ready <none> 30m v1.26.2
node-2 Ready <none> 25m v1.26.2
node-3 Ready <none> 10m v1.26.2
🔹 Cluster Autoscaler 로그 확인
kubectl logs -n kube-system deployment/cluster-autoscaler
💡 예상 출력 값
Cluster Autoscaler detected unschedulable pods, increasing node count
Adding new node to the cluster: node-4
✅ Cluster Autoscaler가 정상적으로 동작하고 있으며, 필요에 따라 노드를 추가 및 제거하는 것을 확인할 수 있음