ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] 워크로드 리소스 - HPA, VPA
    공부/데이터 2025. 1. 31. 22:36

    Kubernetes에서 자동 크기 조정은 워크로드의 크기를 자동으로 조절하여 클러스터가 리소스 수요 변화에 탄력적이고 효율적으로 대응하도록 하는 기능입니다. 자동 크기 조정은 크게 두 가지 방식으로 나눌 수 있습니다.

    HorizontalPodAutoscaler (HPA) - 스케일아웃

    워크로드에서 관리하는 복제본의 수를 늘리거나 줄이는 방식입니다. 리소스 수요가 증가하면 replicas 수를 늘려 처리량을 늘리고 수요가 감소하면 replicas 수를 줄여 리소스 낭비를 방지합니다. 예를 들어, 웹 애플리케이션의 트래픽이 증가하면 웹 서버 복제본 수를 늘려 트래픽을 분산 처리하고, 트래픽이 감소하면 복제본 수를 줄여 불필요한 서버를 종료하는 방식입니다. CPU 사용량, 메모리 사용량, 또는 사용자 정의 지표를 기반으로 replicas 수를 자동으로 조절합니다. 연습 튜토리얼은 https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/에서 확인할 수 있습니다.

    예시

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app-deployment
    spec:
      replicas: 2 # 초기 복제본 수
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-app-container
            image: nginx # 예시 이미지
            ports:
            - containerPort: 80
            resources:
              requests:
                cpu: 100m # CPU 요청
                memory: 256Mi # 메모리 요청
              limits:
                cpu: 500m # CPU 제한
                memory: 512Mi # 메모리 제한

    deployment 예시

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: my-app-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: my-app-deployment # 스케일링 대상 Deployment 지정
      minReplicas: 2 # 최소 파드 수
      maxReplicas: 10 # 최대 파드 수
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50 # 평균 CPU 사용률 50% 목표

    hpa 예시

    HPA 작동 방식은 다음과 같습니다.

    • HPA는 메트릭 서버를 통해 파드의 CPU 사용량을 지속적으로 모니터링합니다.
    • 평균 CPU 사용률이 50%를 초과하면 HPA는 Deployment의 복제본 수를 늘립니다.
    • 평균 CPU 사용률이 50% 미만으로 떨어지면 HPA는 Deployment의 복제본 수를 줄입니다.
    • 파드 수는 minReplicasmaxReplicas 사이에서 자동으로 조절됩니다.

    deployment에 replicas없이 hpa의 minReplicas만 있어도 동작은 하지만 예상치 못한 장애가 발생할 수 있습니다. Deployment에 replicas 필드가 없다면 Deployment를 생성할 때 기본적으로 0개의 파드를 생성합니다. HPA는 Deployment의 파드 수를 조절하지만 초기 파드 수가 0이므로 HPA가 스케일링을 시작하더라도 파드가 즉시 생성되지 않을 수 있습니다. HPA는 메트릭을 기반으로 스케일링을 결정하므로 파드가 없으면 메트릭을 수집할 수 없어 스케일링을 시작할 수 없을 수 있습니다.

    VerticalPodAutoscaler (VPA) - 스케일업

    replicas에 할당된 리소스 (CPU, 메모리 등)를 즉시 조정하는 방식입니다. 애플리케이션의 특성에 따라 CPU나 메모리 사용량이 급격하게 변동하는 경우에 유용합니다. 예를 들어, 특정 시간대에 CPU 사용량이 급증하는 애플리케이션의 경우, 해당 시간대에 CPU 리소스를 늘려 성능 저하를 방지하는 방식입니다. 컨테이너의 CPU 및 메모리 요청/제한 값을 분석하여 적절한 값을 권장하고, 자동으로 업데이트할 수 있습니다.

    기본적으로 쿠버네티스와 함께 제공되진 않지만 https://github.com/kubernetes/autoscaler/tree/9f87b78df0f1d6e142234bb32e8acbd71295585a/vertical-pod-autoscaler 에서 찾을 수 있습니다.

    현재 VPA는 4가지 모드로 작동할 수 있습니다.

    Mode 설명
    Auto 현재는 Recreate 방식이 향후에는 in-place updates로 변경될 수 있습니다.
    Recreate VPA(Vertical Pod Autoscaler)는 파드 생성 시 리소스 요청을 할당하고 요청된 리소스가 새로운 권장 사항과 크게 다를 경우 기존 파드를 퇴거(정상적으로 종료)시켜 기존 파드를 업데이트합니다.
    Initial VPA(Vertical Pod Autoscaler)는 파드 생성 시에만 리소스 요청을 할당하며, 이후에는 절대 변경하지 않습니다.
    Off VPA(Vertical Pod Autoscaler)는 Pod의 리소스 요구 사항을 자동으로 변경하지 않습니다. 권장 사항은 계산되어 VPA 객체에서 확인할 수 있습니다.

    VPA는 기존 파드를 유지한 채, 리소스를 추가하는 것이 아니라 기존 파드를 정상적으로 종료시키고 조정된 리소스에 기반한 파드를 새로 생성하는 메커니즘을 갖고 있습니다.

    in-place resizing 요구사항

    파드나 컨테이너를 재시작하지 않고 워크로드의 크기를 즉시 조정하려면 Kubernetes 버전 1.27 이상이 필요합니다. 또한 InPlaceVerticalScaling 기능 게이트를 활성화해야 합니다. 기본값은 false입니다.

    InPlacePodVerticalScaling 는 제자리 파드 수직 스케일링을 활성화합니다.

    레퍼런스

    https://kubernetes.io/docs/concepts/workloads/autoscaling/

    댓글