Kubernetes/Kubernetes Advanced

Kubernetes 리소스 시리즈 #15: Cluster Autoscaler & Metrics Server (오토스케일링 및 모니터링 리소스)

ygtoken 2025. 3. 5. 00:37
728x90

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와 함께 사용하여 자동 스케일링을 최적화할 수 있음

 

728x90