본문 바로가기

Kubernetes

[Kubernetes] Karpenter 개념 알아보기!

728x90
반응형

Karpenter는 AWS에서 제공하는 오픈 소스 클러스터 오토스케일러로, Kubernetes 클러스터의 노드 자원을 자동으로 관리하고 최적화하는 도구입니다. Karpenter는 기존의 클러스터 오토스케일링 방식보다 더 유연하고 효율적인 방식으로 동작하며, 애플리케이션의 리소스 요구사항에 따라 자동으로 노드를 추가하거나 제거합니다.

Karpenter의 주요 개념

구분 내용
즉시성 (Immediacy) Karpenter는 빠르게 새로운 노드를 추가하여 클러스터의 리소스 부족 문제를 해결합니다. 이는 워크로드가 갑작스럽게 증가할 때 특히 유용합니다.
비용 효율성 (Cost Efficiency) Karpenter는 클라우드 자원을 효율적으로 사용하여 비용을 절감할 수 있도록 설계되었습니다. 필요하지 않은 노드는 자동으로 제거하여 불필요한 비용을 줄입니다.
유연성 (Flexibility) Karpenter는 다양한 인스턴스 유형과 크기를 지원하며, 클러스터의 특정 요구에 맞게 구성할 수 있습니다. 또한, 여러 AWS Availability Zone에 걸쳐 작동할 수 있습니다.
자동 최적화 (Automatic Optimization) Karpenter는 워크로드의 요구사항을 분석하여 최적의 인스턴스 타입을 선택합니다. 이를 통해 클러스터의 성능과 비용 효율성을 극대화합니다.

Karpenter의 우수 사례

  1. 동적 워크로드 관리:
    • Karpenter는 갑작스럽게 증가하는 트래픽에 대응하여 빠르게 노드를 추가할 수 있습니다. 예를 들어, e-commerce 사이트에서 블랙 프라이데이와 같은 이벤트 동안 트래픽이 급증할 때 유용합니다.
  2. 비용 최적화:
    • 워크로드가 감소하면 Karpenter는 자동으로 불필요한 노드를 제거하여 비용을 절감합니다. 이는 리소스 사용량이 일정하지 않은 배치 작업(batch job)이나 개발 및 테스트 환경에서 효과적입니다.
  3. 다양한 인스턴스 유형 사용:
    • Karpenter는 다양한 AWS 인스턴스 유형을 활용하여 비용 효율성을 높입니다. 예를 들어, 온디맨드 인스턴스와 스팟 인스턴스를 조합하여 사용함으로써 비용을 절감할 수 있습니다.
  4. 다중 지역 및 가용성 영역 지원:
    • Karpenter는 여러 AWS Availability Zone을 지원하여 고가용성과 내결함성을 제공할 수 있습니다. 이를 통해 장애 발생 시에도 서비스 연속성을 유지할 수 있습니다.

 

간단 실습

Karpenter 설치

kubectl apply -f https://github.com/aws/karpenter/releases/download/v0.5.0/karpenter.yaml

Provisioner 설정

apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: default
spec:
  requirements:
    - key: "node.kubernetes.io/instance-type"
      operator: In
      values: ["m5.large", "m5.xlarge"]
  provider:
    subnetSelector:
      karpenter.sh/discovery: "my-cluster"
    securityGroupSelector:
      karpenter.sh/discovery: "my-cluster"
  ttlSecondsAfterEmpty: 30

Deployment 생성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 10
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-app-image
          resources:
            requests:
              cpu: "500m"
              memory: "128Mi"

위의 예제에서 Karpenter는 m5.largem5.xlarge 인스턴스 타입을 사용하여 클러스터를 자동으로 스케일링합니다. 필요에 따라 노드를 추가하거나 제거하여 워크로드 요구사항을 충족시킵니다.

Karpenter와 비교할 수 있는 Kubernetes 오토스케일링 솔루션 알아보기!!

  1. Cluster Autoscaler (CA)
  2. KEDA (Kubernetes Event-driven Autoscaling)
  3. Virtual Kubelet
특징 Karpenter Cluster Autoscaler KEDA Vitual Kubelet
주요기능 동적 노드 프로비저닝, 비용 최적화, 자동 최적화 노드 그룹 기반 오토스케일링 이벤트 기반 오토스케일링 서버리스 컴퓨팅 지원, 가상 노드
설치 및 설정 간편한 설치 및 설정, AWS에 최적화 상대적으로 복잡한 설정 필요 설정이 비교적 간편, 다양한 이벤트 소스 지원 설정 복잡도 높음, 특정 서버리스 플랫폼 의존
사용 사례 다양한 인스턴스 타입 사용, 비용 효율적 클러스터 운영 전통적 클러스터 스케일링, 노드 그룹 관리 이벤트 드리븐 워크로드, 비동기 작업 서버리스 컴퓨팅 환경, 클러스터 리소스 확장
지원클라우드 AWS에 최적화, 다른 클라우드도 가능 모든 주요 클라우드 제공자 모든 주요 클라우드 제공자 특정 서버리스 플랫폼 (예: Azure, AWS Fargate)
비용효율성 높은 비용 최적화 중간 수준 비용 최적화 비용 최적화는 이벤트 소스에 따라 다름 비용 최적화는 서버리스 요금제에 의존
유연성 높은 유연성, 다양한 인스턴스 유형 지원 노드 그룹에 종 이벤트 소스에 따라 유연성 제공 서버리스 플랫폼에 종속
스케일링 속도 빠름 비교적 느림 빠름 매우 빠름
복잡도 중간 높음 중간 높음
가용성 고가용성 지원 고가용성 지원 고가용성 지원 고가용성 지원

 

각 솔루션의 상세 비교

1. Cluster Autoscaler (CA)

  • 주요 기능: 노드 그룹을 기반으로 클러스터의 자원 부족 시 노드를 추가하고, 자원이 여유로울 때 노드를 제거합니다.
  • 설치 및 설정: 설정이 다소 복잡하며, 노드 그룹의 크기 및 속성 등을 설정해야 합니다.
  • 사용 사례: 전통적인 클러스터 스케일링에 적합하며, 노드 그룹의 자원 관리를 주로 합니다.

2. KEDA

  • 주요 기능: Kubernetes 애플리케이션을 이벤트 기반으로 스케일링합니다. Prometheus, Kafka, RabbitMQ 등 다양한 이벤트 소스를 지원합니다.
  • 설치 및 설정: 설정이 비교적 간편하며, 이벤트 소스를 정의하여 스케일링 정책을 설정합니다.
  • 사용 사례: 비동기 작업, 이벤트 드리븐 워크로드에 적합합니다.

3. Virtual Kubelet

  • 주요 기능: 가상 노드를 사용하여 서버리스 컴퓨팅 환경을 제공합니다. AWS Fargate, Azure Container Instances와 같은 플랫폼과 연동됩니다.
  • 설치 및 설정: 설정이 비교적 복잡하며, 특정 서버리스 플랫폼에 의존합니다.
  • 사용 사례: 서버리스 컴퓨팅 환경을 Kubernetes 클러스터와 통합하고자 할 때 유용합니다.
728x90
반응형