티스토리 뷰

728x90

쿠버네티스에서 오토 스케일링(Auto Scaling)은 워크로드의 변화에 따라 애플리케이션의 인스턴스(파드)를 자동으로 증가하거나 감소시켜 자원을 효율적으로 사용하는 기술입니다. 쿠버네티스 환경에서 오토 스케일링 방법은 크게 세 가지로 나눌 수 있습니다.

  1. Horizontal Pod Autoscaler (HPA): 파드 수를 자동으로 조정
  2. Vertical Pod Autoscaler (VPA): 파드의 CPU 및 메모리 리소스를 자동으로 조정
  3. Cluster Autoscaler (CA): 클러스터 내의 노드 수를 자동으로 확장/축소

각각의 방법에 대해 상세하게 설명하겠습니다.


✅ 1. Horizontal Pod Autoscaler (HPA)

Horizontal Pod Autoscaler는 파드의 복제본(replica)의 수를 자동으로 늘리거나 줄여주는 쿠버네티스 컨트롤러입니다.

작동 원리

  • Metrics Server에서 수집한 CPU/메모리 사용률 또는 커스텀 지표를 기반으로 파드의 개수를 조정합니다.
  • 리소스 사용량이 설정된 목표치(예: CPU 50%)를 초과하면 자동으로 파드를 추가하고, 사용량이 목표치 이하로 내려가면 파드를 축소합니다.

구성 방법 예시

아래는 HPA를 설정하는 YAML 예시입니다.

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
      target:
        type: Utilization
        averageUtilization: 50

위 설정은 my-app 디플로이먼트의 CPU 사용률이 평균 50%를 넘으면 파드를 늘리고, 50% 이하로 떨어지면 파드를 줄입니다. 최소 2개에서 최대 10개의 파드까지 조정됩니다.

사용 가능한 Metrics

  • CPU 사용률
  • 메모리 사용률
  • Prometheus를 활용한 커스텀 메트릭 (예: HTTP 요청 수, 응답시간 등)

✅ 2. Vertical Pod Autoscaler (VPA)

Vertical Pod Autoscaler는 파드의 CPU와 메모리와 같은 리소스를 자동으로 조정하는 도구입니다.

작동 원리

  • VPA는 파드의 실제 사용량을 모니터링하고, 사용량 패턴에 따라 요청(Request) 및 제한(Limit)을 자동으로 조정합니다.
  • 리소스 설정을 잘못 구성하거나 예측이 어려울 때 효과적으로 활용됩니다.
  • HPA와 동시에 사용하는 것은 권장되지 않습니다. (충돌 가능성이 있음)

구성 방법 예시

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
  • Auto 모드에서는 권장된 리소스에 따라 자동으로 파드를 재시작합니다.
  • 다른 옵션은 Off(추천만 제공), Initial(생성 시에만 적용)이 있습니다.

✅ 3. Cluster Autoscaler (CA)

Cluster Autoscaler는 클러스터 노드 수를 늘리거나 줄여서 클러스터 용량을 관리하는 역할을 합니다.

작동 원리

  • Pending 상태의 파드가 있을 때, 파드를 배치할 수 있는 노드가 없으면 노드를 추가하여 배치 가능하도록 합니다.
  • 노드가 사용되지 않아 자원이 낭비되는 경우, 노드를 제거하여 자원을 절약합니다.

지원 환경

  • AWS, GCP, Azure, OpenStack, DigitalOcean 등 다양한 클라우드 제공자를 지원합니다.

구성 방법 예시 (AWS)

클러스터 오토스케일러를 배포할 때 YAML 예시:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cluster-autoscaler
  namespace: kube-system
  labels:
    app: cluster-autoscaler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cluster-autoscaler
  template:
    metadata:
      labels:
        app: cluster-autoscaler
    spec:
      serviceAccountName: cluster-autoscaler
      containers:
      - image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.29.0
        name: cluster-autoscaler
        command:
        - ./cluster-autoscaler
        - --cloud-provider=aws
        - --nodes=2:10:my-nodegroup
        - --scale-down-enabled=true
  • --nodes 플래그를 통해 최소 및 최대 노드 수를 설정할 수 있습니다.

📝 오토스케일링 전략 및 활용법

각 오토스케일링 방식은 상호보완적으로 활용할 수 있습니다.

오토스케일러 적용 대상 주된 기준 용도 및 특징

HPA 파드 개수 CPU, 메모리, 커스텀 지표 일반적이고 가장 많이 사용
VPA 파드의 리소스 크기 실제 리소스 사용 패턴 파드 리소스 최적화
CA 클러스터 노드 수 파드 스케줄링 불가능 여부 클러스터 확장성 및 자원 효율화

일반적인 권장 전략:

  • 기본적으로 HPA를 사용하여 서비스의 로드를 처리합니다.
  • 서비스 사용량이 매우 불규칙하거나 리소스 예측이 어렵다면 VPA로 리소스를 최적화합니다.
  • 노드의 자원 한계를 초과하여 HPA로도 대응이 불가능해지면 CA로 노드를 확장하여 대응합니다.

🚩 오토스케일링 적용 시 주의사항

  • Metric Server 또는 외부 메트릭(Prometheus)이 정확히 작동하는지 확인합니다.
  • 최소/최대 복제본 수 및 리소스를 적절히 설정하여 과도한 스케일링을 방지합니다.
  • 클라우드 환경일 경우 비용 관리에 신경 쓰며, 불필요한 리소스 낭비를 방지합니다.

이처럼, 쿠버네티스 환경에서는 여러 오토스케일링 방법을 결합하여 서비스의 효율적이고 안정적인 운영을 지원할 수 있습니다. 서비스의 특성에 따라 적합한 방법을 선택하여 사용하는 것이 중요합니다.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함