쿠버네티스 오토스케일링

TMT

쿠버네티스에서 **오토스케일링(Auto Scaling)**을 적용했다고 할 때, 일반적으로 다음 세 가지 영역을 말할 수 있습니다.

주로 많이 언급되는 것은 **Pod 레플리카 스케일링(Horizontal Pod Autoscaler)**이지만, Node 스케일링까지 포함할 수도 있습니다. 상황에 따라 두 가지 모두 적용하거나 하나만 적용할 수도 있습니다.


🔑 1. Pod 레플리카 스케일링 (Horizontal Pod Autoscaler, HPA)

➡️ 가장 일반적으로 사용하는 오토스케일링 영역이며, 서비스의 트래픽 증가에 따라 Pod의 수를 동적으로 늘리거나 줄이는 것을 의미합니다.

💡 작동 방식:

  • CPU, 메모리, 네트워크 트래픽 등의 메트릭을 기준으로 Pod 레플리카 수를 조정합니다.
  • 기본적으로 쿠버네티스의 HPA(Horizontal Pod Autoscaler) 컨트롤러가 이 기능을 제공합니다.

예시:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 70

📌 이것만 적용하면 무엇이 해결되나요?

  • 트래픽 급증 시 Pod의 수를 자동으로 늘려서 서비스의 가용성을 보장합니다.
  • 트래픽이 줄어들면 불필요한 Pod를 줄여서 비용 최적화를 할 수 있습니다.

🔑 2. Node 스케일링 (Cluster Autoscaler)

➡️ Pod의 수가 늘어나면서 클러스터의 리소스가 부족하면 쿠버네티스 클러스터에 **노드(Node)**를 자동으로 추가하는 기능을 의미합니다.

💡 작동 방식:

  • Cluster Autoscaler라는 컴포넌트를 통해 **노드 그룹(ASG, Managed Node Group)**을 관리합니다.
  • 새로 생성된 Pod이 노드에 스케줄링되지 못할 경우, **클라우드 제공자(AWS, GCP, Azure)**와 연동하여 노드를 자동으로 추가합니다.
  • 반대로 리소스가 과잉되면 노드를 축소시킬 수도 있습니다.

예시:

AWS EKS에서 Cluster Autoscaler 설정:

apiVersion: cluster.k8s.io/v1alpha1
kind: ClusterAutoscaler
metadata:
  name: cluster-autoscaler
  namespace: kube-system
spec:
  scaleDown:
    enabled: true

📌 이것만 적용하면 무엇이 해결되나요?

  • 노드 리소스 부족 문제를 자동으로 해결하여, Pod이 항상 스케줄링될 수 있도록 보장합니다.
  • 불필요한 노드를 제거하여 비용 절감을 할 수 있습니다.

🔑 3. Vertical Pod Autoscaler (VPA)

➡️ 각 Pod이 사용하는 **리소스(CPU, 메모리)**를 동적으로 조정하는 방식입니다. 주로 HPA와 함께 사용되며, 리소스 부족 또는 과잉을 방지하는 데 도움이 됩니다.

💡 작동 방식:

  • VPA는 Pod의 CPU/메모리 사용량을 모니터링하고, **리소스 요청(request) 및 제한(limit)**을 자동으로 조정합니다.
  • 기존 Pod을 제거하고 새 Pod을 다시 생성하여 리소스를 적용합니다.

예시:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  updatePolicy:
    updateMode: "Auto"

📌 이것만 적용하면 무엇이 해결되나요?

  • 애플리케이션이 리소스를 부족하게 요청하거나 과도하게 요청하는 문제를 해결합니다.
  • 비용 최적화리소스 낭비 방지에 효과적입니다.

🔄 오토스케일링 종류별 비교

오토스케일링 종류대상주요 목적조정 기준
Horizontal Pod Autoscaler (HPA)Pod 레플리카 수트래픽 증가 시 확장CPU, 메모리, 커스텀 메트릭
Cluster Autoscaler노드 수리소스 부족 시 노드 확장스케줄링 가능한 Pod 여부
Vertical Pod Autoscaler (VPA)Pod 리소스 요청리소스 최적화CPU, 메모리 사용량

🔎 실무에서 일반적으로 적용하는 조합

  1. HPA + Cluster Autoscaler
    👉 가장 일반적인 조합으로, 트래픽 증가 시 Pod을 확장하고, 리소스가 부족하면 노드를 추가하는 방식입니다.

  2. HPA + VPA
    👉 Pod의 수를 늘리면서 동시에 리소스 요청량을 최적화하는 방식입니다.

  3. HPA + Cluster Autoscaler + VPA
    👉 대규모 서비스에서 리소스 최적화와 확장을 모두 자동화하고자 할 때 사용합니다.


🧩 정리: 실무에서 '오토스케일링'이라고 하면?

  • 보통은 **Horizontal Pod Autoscaler (HPA)**를 의미하는 경우가 많습니다.
  • 그러나 실무에서는 Cluster Autoscaler를 함께 사용하는 것이 일반적입니다.
  • 오토스케일링을 제대로 적용하려면 Pod, Node, 리소스 요청량을 모두 고려해야 합니다.

필요에 따라 각각의 오토스케일링을 조합해서 사용하면 됩니다.

Edit this page