Kubernetes에서 트래픽 증가에 따라 자동으로 노드를 추가하거나 불필요한 노드를 제거하는 기능이 필요할 수 있습니다.
이를 위해 Cluster Autoscaler를 사용하며, Pod의 리소스 모니터링을 위해 Metrics Server가 함께 사용됩니다.
이번 글에서는 Cluster Autoscaler와 Metrics Server의 개념, 동작 방식, 그리고 실전 활용법을 정리하겠습니다.
🔹 Cluster Autoscaler란?
Cluster Autoscaler는 클러스터의 노드 개수를 자동으로 조정하는 컴포넌트입니다.
✔️ HPA(VPA 포함)가 Pod 개수를 증가시켰을 때, 필요한 노드를 자동으로 추가
✔️ 사용되지 않는 노드가 많아지면 불필요한 노드를 자동으로 제거
✔️ 클라우드 환경(AWS, GCP, Azure)에서 동작하며, 온프레미스에서는 사용 제한
💡 HPA(VPA)는 Pod를 확장하지만, 노드가 부족하면 Cluster Autoscaler가 이를 해결합니다.
🔹 Cluster Autoscaler 동작 방식
1️⃣ 새로운 Pod가 스케줄링되지 못할 경우, Cluster Autoscaler가 새로운 노드를 추가
2️⃣ HPA 또는 수동 확장을 통해 Pod가 줄어들면, 사용되지 않는 노드를 제거
3️⃣ 최소/최대 노드 개수를 설정하여 클러스터 크기를 자동으로 조정
💡 Cluster Autoscaler는 HPA와 함께 사용되며, 클라우드 제공자의 오토스케일링 그룹을 조정합니다.
🔹 Cluster Autoscaler 배포 예제 (AWS 환경)
아래는 AWS에서 Cluster Autoscaler를 배포하는 예제입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system # 시스템 네임스페이스에서 실행
spec:
replicas: 1
selector:
matchLabels:
app: cluster-autoscaler
template:
metadata:
labels:
app: cluster-autoscaler
spec:
serviceAccountName: cluster-autoscaler # 클라우드 API 접근을 위한 ServiceAccount
containers:
- name: cluster-autoscaler
image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.25.0 # Cluster Autoscaler 이미지
command:
- ./cluster-autoscaler
- --cloud-provider=aws # 클라우드 제공자 설정
- --nodes=1:10:my-nodegroup # 최소 1개, 최대 10개 노드 유지
- --logtostderr=true
- --v=4
💡 위 설정이 적용되면, 클러스터의 필요에 따라 노드가 자동으로 추가되거나 제거됩니다.
💡 클라우드 환경에 따라 --cloud-provider 옵션을 gce, azure 등으로 변경해야 합니다.
🔹 Cluster Autoscaler 상태 확인
kubectl logs -f deployment/cluster-autoscaler -n kube-system
💡 로그를 확인하여 노드가 추가 또는 삭제되는지 모니터링할 수 있습니다.
🔹 Metrics Server란?
Metrics Server는 Kubernetes에서 Pod 및 노드의 리소스 사용량(CPU, 메모리 등)을 수집하는 컴포넌트입니다.
✔️ HPA, VPA가 Pod의 리소스를 조정할 때 필요한 데이터 제공
✔️ kubectl top 명령어를 사용하여 CPU, 메모리 사용량 확인 가능
✔️ Cluster Autoscaler와 함께 사용하여 클러스터 리소스 모니터링 가능
💡 Metrics Server는 Kubernetes의 기본 API 서버에서 제공되지 않으므로, 별도로 설치해야 합니다.
🔹 Metrics Server 배포
아래는 Metrics Server를 배포하는 예제입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: metrics-server
template:
metadata:
labels:
app: metrics-server
spec:
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2 # Metrics Server 이미지
args:
- --kubelet-insecure-tls # 인증 문제 방지 (테스트 환경)
💡 이제 Metrics Server를 통해 Pod 및 노드의 리소스 사용량을 확인할 수 있습니다.
🔹 Metrics Server 상태 확인
kubectl get deployment -n kube-system | grep metrics-server
출력 예시:
metrics-server 1/1 1 1 5m
💡 정상적으로 실행 중이라면 Metrics Server가 리소스 데이터를 수집하고 있습니다.
🔹 Pod 및 노드 리소스 사용량 확인
1️⃣ Pod의 CPU 및 메모리 사용량 확인
kubectl top pod --all-namespaces
출력 예시:
NAMESPACE NAME CPU(cores) MEMORY(bytes)
default my-pod 250m 100Mi
2️⃣ 노드의 리소스 사용량 확인
kubectl top node
출력 예시:
NAME CPU(cores) MEMORY(bytes)
node-1 1.2 3.5Gi
node-2 0.8 2.1Gi
💡 Metrics Server가 정상적으로 동작하면, kubectl top 명령어로 실시간 리소스 사용량을 확인할 수 있습니다.
🔹 Cluster Autoscaler & Metrics Server 비교
기능 Cluster Autoscaler Metrics Server
역할 | 노드 개수 자동 조정 | 리소스 사용량 수집 |
사용 목적 | 노드 부족 시 자동 확장 | HPA, VPA 등에 리소스 데이터 제공 |
필요 조건 | 클라우드 환경(AWS, GCP, Azure) | 모든 Kubernetes 클러스터에서 사용 가능 |
주요 활용 | HPA와 함께 노드 추가/삭제 | kubectl top 명령어, HPA/VPA에 데이터 제공 |
💡 Cluster Autoscaler는 클러스터의 크기를 조정하고, Metrics Server는 실시간 리소스를 모니터링하는 역할을 합니다.
🚀 마무리
✔️ Cluster Autoscaler는 필요할 때 노드를 추가하고 불필요한 노드는 제거
✔️ Metrics Server는 Kubernetes에서 CPU/메모리 사용량을 수집하여 HPA 등에 제공
✔️ HPA와 함께 사용하여 자동 스케일링을 최적화할 수 있음