Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #3] 노드 셀프 힐링 및 자동 교체 (Cluster Autoscaler 활용)

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

 

쿠버네티스 클러스터에서는 노드 장애가 발생했을 때 자동으로 복구되지 않으면 서비스에 영향을 줄 수 있습니다.

이를 방지하기 위해 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가 정상적으로 동작하고 있으며, 필요에 따라 노드를 추가 및 제거하는 것을 확인할 수 있음

 

728x90