본문 바로가기

Kubernetes

[AutoScaling] Kubernetes AutoScaling에 대해 알아보기!

728x90
반응형

Kubernetes AutoScaling은 Kubernetes 클러스터 내의 애플리케이션 리소스를 자동으로 확장하거나 축소하는 기능을 말합니다. 이를 통해 애플리케이션의 부하 변화에 따라 리소스를 효율적으로 관리할 수 있습니다. Kubernetes에서 제공하는 주요 AutoScaling 메커니즘에는 다음이 포함됩니다:

  1. Horizontal Pod Autoscaler (HPA): 애플리케이션의 부하에 따라 파드(Pod)의 수를 자동으로 조정합니다.
  2. Vertical Pod Autoscaler (VPA): 각 파드에 할당된 CPU와 메모리 리소스를 자동으로 조정합니다.
  3. Cluster Autoscaler (CA): 클러스터의 노드 수를 자동으로 조정하여 클러스터 내의 리소스를 최적화합니다.

주요 AutoScaling 메커니즘

구분 내용
Horizontal Pod Autoscaler (HPA)
  • 개념: CPU 사용률, 메모리 사용률, 사용자 정의 메트릭 등을 기반으로 파드의 수를 자동으로 늘리거나 줄입니다.
  • 장점: 애플리케이션 부하에 따라 파드를 동적으로 추가하거나 제거함으로써, 리소스의 효율적 사용과 애플리케이션의 가용성을 보장합니다.
Vertical Pod Autoscaler (VPA)
  • 개념: 파드가 필요로 하는 CPU 및 메모리 자원을 자동으로 조정합니다. 이를 통해 파드가 최적의 성능을 발휘할 수 있도록 합니다.
  • 장점: 개별 파드의 리소스 요구 사항에 맞게 CPU와 메모리를 조정하여, 리소스 낭비를 줄이고, 파드의 성능을 최적화합니다.
Cluster Autoscaler (CA)
  • 개념: 클러스터 내의 파드 배치를 위한 충분한 리소스가 없는 경우, 노드를 자동으로 추가하거나, 불필요한 경우 노드를 제거합니다.
  • 장점: 클러스터 전체의 리소스를 효율적으로 관리하여, 파드가 항상 필요한 리소스를 확보할 수 있도록 합니다.

Kubernetes AutoScaling의 장점

  1. 비용 효율성:
    • 필요할 때만 리소스를 사용하고, 사용하지 않을 때는 축소함으로써, 불필요한 리소스 사용을 줄여 비용을 절감할 수 있습니다.
  2. 고가용성 및 안정성:
    • 부하가 증가할 때 자동으로 파드나 노드를 추가하여 애플리케이션의 가용성과 안정성을 유지할 수 있습니다.
    • 리소스 부족으로 인한 애플리케이션 장애를 예방합니다.
  3. 리소스 최적화:
    • 리소스를 효율적으로 사용하여, 애플리케이션 성능을 최적화할 수 있습니다.
    • 자동으로 리소스를 조정하여 운영의 복잡성을 줄이고 관리 효율성을 높입니다.
  4. 사용자 정의 메트릭:
    • 사용자 정의 메트릭을 기반으로 AutoScaling을 설정하여, 애플리케이션의 특정 요구 사항에 맞춘 스케일링 정책을 적용할 수 있습니다.
  5. 유연성:
    • 다양한 AutoScaling 전략을 조합하여, 다양한 워크로드에 맞춘 유연한 리소스 관리가 가능합니다.
반응형

HPA( Horizontal Pod Autoscaler ) 설정 방법 알아보기

Kubernetes에서 Horizontal Pod Autoscaler (HPA)를 설정하는 방법을 간단한 예시와 함께 설명하겠습니다. HPA는 애플리케이션의 부하에 따라 파드의 수를 자동으로 조정하는 기능을 제공합니다.

예시 시나리오

이 예시에서는 간단한 Nginx 애플리케이션을 배포하고, CPU 사용률을 기준으로 HPA를 설정하여 파드의 수를 자동으로 조정해 보겠습니다.

1. Nginx 배포 설정

먼저, Nginx 애플리케이션을 배포하기 위한 Deployment를 생성합니다.

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        resources:
          requests:
            cpu: "100m"
          limits:
            cpu: "200m"
        ports:
        - containerPort: 80

HPA 설정

다음으로, Nginx 애플리케이션에 대한 HPA를 설정합니다. 이 HPA는 CPU 사용률이 50%를 넘을 경우 파드의 수를 증가시킵니다.

hpa.yaml

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

HPA에서 설정 가능한 Resources에 Type

Resource 타입은 파드의 CPU 및 메모리 사용량을 기준으로 HPA를 조정합니다.

  • cpu: CPU 사용률을 기준으로 확장합니다.
  • memory: 메모리 사용률을 기준으로 확장합니다.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 70

 

728x90
반응형