Kubernetes 클러스터의 비용 최적화를 위한 리소스 자동 스케일링 전략

Kubernetes는 컨테이너 오케스트레이션 플랫폼으로, 마이크로서비스 아키텍처를 효과적으로 관리할 수 있는 강력한 도구입니다. 하지만 클라우드 환경에서 실행될 때, 리소스 관리 및 비용 최적화가 중요한 과제로 떠오릅니다. 이 글에서는 Kubernetes 클러스터의 비용을 최적화하기 위한 리소스 자동 스케일링 전략에 대해 알아보겠습니다.

Horizontal Pod Autoscaler (HPA)

HPA는 Kubernetes의 핵심 기능 중 하나로, 애플리케이션의 리소스 사용량을 모니터링하고 자동으로 파드를 스케일링하는 기능을 제공합니다. HPA는 CPU 사용률, 메모리 사용량 등의 메트릭을 기반으로 작동합니다.

HPA를 설정하기 위해서는 먼저 메트릭 서버를 클러스터에 설치해야 합니다. 메트릭 서버는 클러스터에서 각 노드와 파드의 리소스 사용량을 수집하는 역할을 합니다.

메트릭 서버 설치

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

HPA 설정 예제

다음은 HPA를 설정하는 YAML 예제입니다. 이 예제에서는 my-app이라는 Deployment의 CPU 사용량을 기준으로 파드를 자동으로 스케일링합니다.

apiVersion: autoscaling/v2beta2
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

위의 예제에서 minReplicas는 최소 파드 수, maxReplicas는 최대 파드 수를 설정합니다. averageUtilization 값은 CPU 사용량의 목표 비율입니다.

Vertical Pod Autoscaler (VPA)

VPA는 HPA와는 달리 각 파드의 리소스 요청과 제한을 조정하여 비용을 최적화합니다. VPA는 주로 CPU 및 메모리 리소스를 조정하여 파드가 실제 사용량에 맞게 리소스를 확보하도록 합니다.

VPA 설치

VPA를 사용하기 위해 다음의 명령어로 VPA를 설치할 수 있습니다.

kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vpa-<version>.yaml

VPA 설정 예제

아래는 VPA를 설정하는 YAML 예제입니다.

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

이렇게 설정하면 VPA가 파드의 리소스를 자동으로 조정하여 비용을 절감할 수 있습니다.

Cluster Autoscaler

Cluster Autoscaler는 Kubernetes 클러스터의 노드를 자동으로 추가하거나 제거하는 기능을 제공합니다. 이는 클러스터의 리소스 요구가 증가하거나 감소할 때 유용합니다. 예를 들어, HPA에 의해 파드 수가 증가하면 Cluster Autoscaler는 자동으로 노드를 추가하여 리소스를 확장할 수 있습니다.

Cluster Autoscaler 설치

Cluster Autoscaler는 클라우드 제공업체에 따라 설치 방법이 다릅니다. 예를 들어, AWS에서는 다음과 같이 설치할 수 있습니다.

kubectl apply -f https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/examples/deployment.yaml

Cluster Autoscaler 설정 예제

Cluster Autoscaler의 설정 파일 예제는 다음과 같습니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-autoscaler-status
  namespace: kube-system
data:
  cluster-name: my-cluster

이 설정은 Cluster Autoscaler가 관리할 클러스터의 이름을 지정합니다.

비용 최적화 전략

  1. 모니터링 및 분석: 리소스 사용량을 지속적으로 모니터링하고, 어떤 파드가 비효율적으로 리소스를 사용하는지 분석합니다. Prometheus와 Grafana를 사용하여 시각화하면 유용합니다.
  2. 리소스 요청 및 한계 설정: 각 파드에 대해 적절한 리소스 요청 및 제한을 설정하여 과도한 리소스 사용을 방지합니다.
  3. 자동 스케일링 조합 사용: HPA, VPA, Cluster Autoscaler를 조합하여 다양한 스케일링 전략을 활용함으로써 더 효과적인 비용 최적화를 이룰 수 있습니다.
  4. 비용 예측 도구 사용: 클라우드 제공업체의 비용 예측 도구를 사용하여 미래의 비용을 예측하고, 필요한 경우 미리 조치를 취합니다.

마무리

Kubernetes 클러스터의 비용 최적화는 단순히 리소스를 줄이는 것이 아니라, 적절한 리소스 관리를 통해 최적의 성능을 유지하는 것을 의미합니다. HPA, VPA, Cluster Autoscaler와 같은 자동 스케일링 기능을 활용하면 비용 효율성을 높이고, 클라우드 리소스 사용을 최적화할 수 있습니다. 이러한 전략들을 통해 조직은 더 나은 비즈니스 성과를 이끌어낼 수 있습니다.