Kubernetes는 컨테이너 오케스트레이션 플랫폼으로, 대규모 애플리케이션을 효율적으로 관리할 수 있는 강력한 도구입니다. 그러나 클라우드 환경에서 운영비용이 급증할 수 있기 때문에, 비용 최적화는 매우 중요한 과제가 됩니다. 특히, 오토스케일링은 필요한 리소스를 자동으로 조절하여 비용을 절감하는 데 효과적인 전략입니다. 이 글에서는 Kubernetes에서 비용 최적화를 위한 효율적인 오토스케일링 전략에 대해 살펴보겠습니다.

Horizontal Pod Autoscaler (HPA)

HPA는 Kubernetes에서 가장 기본적인 오토스케일링 메커니즘으로, CPU 사용률이나 메모리 사용량 같은 메트릭을 기반으로 파드를 스케일링합니다. HPA를 사용하면, 애플리케이션의 트래픽이 증가할 때 자동으로 파드를 추가하고, 트래픽이 감소할 때 파드를 줄일 수 있습니다.

HPA 설정 예시

HPA를 설정하기 위해서는 먼저 클러스터에서 Metrics Server가 설치되어 있어야 합니다. Metrics Server는 클러스터 내 파드의 메트릭 정보를 수집합니다. Metrics Server 설치 후, 다음과 같은 YAML 파일을 통해 HPA를 설정할 수 있습니다.

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

이 설정에서는 CPU 사용률이 50%를 초과하면 파드를 추가하고, 최소 1개에서 최대 10개까지 파드를 유지합니다.

Vertical Pod Autoscaler (VPA)

VPA는 파드의 리소스 요청량을 자동으로 조절하는 기능입니다. HPA가 수평적으로 스케일링하는 반면, VPA는 수직적으로 리소스를 조정합니다. 이를 통해 애플리케이션의 성능을 최적화하고, 리소스 낭비를 줄일 수 있습니다.

VPA 설정 예시

VPA를 사용하려면, VPA 컨트롤러가 설치되어 있어야 합니다. 아래는 VPA를 설정하는 예시입니다.

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

위 예시에서는 애플리케이션에 필요한 리소스를 자동으로 조정하게 됩니다.

Cluster Autoscaler

Cluster Autoscaler는 클러스터 전체의 노드 수를 조절하는 기능입니다. 클러스터의 파드가 리소스를 필요로 할 때 노드를 추가하고, 필요하지 않을 때 노드를 제거합니다. 이를 통해 클러스터의 리소스를 효율적으로 사용할 수 있습니다.

Cluster Autoscaler 설정 예시

Cluster Autoscaler 설정은 클라우드 제공업체에 따라 다를 수 있지만, 아래는 Google Kubernetes Engine(GKE)에서 사용하는 예시입니다.

gcloud container clusters update my-cluster \
  --enable-autoscaling \
  --min-nodes 1 \
  --max-nodes 10 \
  --zone us-central1-a

이 명령어는 GKE 클러스터의 노드 수를 최소 1개에서 최대 10개로 조정합니다.

리소스 요청 및 제한 설정

비용 최적화를 위해 파드의 리소스 요청과 제한을 정확히 설정하는 것이 중요합니다. 이를 통해 Kubernetes는 각 파드에 대해 필요한 만큼의 리소스를 할당할 수 있습니다.

리소스 요청 및 제한 설정 예시

아래는 Deployment에서 리소스 요청 및 제한을 설정하는 예시입니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: my-app
        image: my-app-image
        resources:
          requests:
            cpu: "500m"
            memory: "128Mi"
          limits:
            cpu: "1"
            memory: "256Mi"

위 설정은 CPU 사용량이 500m로 요청되고, 최대 1로 제한되며, 메모리 또한 유사하게 요청 및 제한이 설정됩니다.

마무리

Kubernetes에서의 오토스케일링은 비용 최적화를 위한 중요한 전략입니다. HPA, VPA, Cluster Autoscaler와 같은 다양한 스케일링 기능을 통해 리소스를 효율적으로 관리하고, 비용을 절감할 수 있습니다. 이러한 기능들을 적절히 조합하여 사용하면, 클라우드 환경에서 운영비용을 최소화하면서도 애플리케이션의 성능을 극대화할 수 있습니다. Kubernetes의 강력한 오토스케일링 기능을 활용하여 스마트한 리소스 관리를 시작해 보세요.