AWS Summit Seoul 2024 - Karpenter로 쿠버네티스 클러스터 최적화: 비용 절감과 효율성 향상

Dongmin Lee·2024년 12월 2일
0

AWS

목록 보기
3/3

강연 소개

본 강연에서는 AWS에서 개발한 오픈소스 클러스터 오토스케일러, Karpenter의 핵심 기능과 쿠버네티스 클러스터의 효율성을 극대화하는 방법을 소개합니다. Karpenter가 제공하는 노드 확장 메커니즘을 비롯해 클러스터 운영 비용을 최적화하고, 자원 활용도를 높이는 다양한 기능들을 탐구합니다. 위대한 상상 “요기요”의 쿠버네티스 전환 여정에서 Karpenter를 활용하여 얻은 실질적인 비용 절감 사례를 공유하며, 참가자들에게 쿠버네티스 클러스터 관리의 새로운 패러다임을 제시합니다. 모든 개발자와 시스템 관리자에게 쿠버네티스 클러스터의 효율적 관리와 비용 최적화는 방법을 소개합니다.

Karpenter 소개

EKS에서 스케일링을 하는 방법은 크게 Cluster AutoscalerKarpenter 2가지가 있다.

공통점은 쿠버네티스 클러스터의 노드를 자동으로 스케일링하는 도구이다.

차이점은 아래와 같다.

  • Cluster Autoscaler (Link)
    • 쿠버네티스 클러스터에서 파드가 Pending 상태일 때 이를 감지하여 노드를 추가하거나, 사용되지 않는 노드를 제거하는 역할을 한다.
    • EC2 Auto Scaling Group 기반으로 동작하며, 각 노드 그룹에 대한 스케일링을 제어한다.
    • 스케일링 속도가 느리다.
  • Karpenter (Link)
    • 쿠버네티스 클러스터에서 파드의 리소스 요구를 분석하여 최적의 EC2 인스턴스 유형을 선택하고, 필요에 따라 인스턴스를 추가하거나 제거한다.
    • 기존의 노드 그룹 설정 없이 더 간단하게 설정할 수 있다.
    • 스케일링 속도가 빠르다.
    • 주로 Amazon EKS와 최적화되어 있어서 다른 클라우드에서는 사용이 제한적이다.

참고로 EC2에 있는 Auto Scaling Group은 파드의 상태를 직접적으로 모니터링 하지 않는다. 기본적으로 CPU 사용률, 네트워크 트래픽 등 특정 메트릭에 따라 인스턴스 수를 조정한다. 또는 Cluster Autoscaler의 요청을 받아 인스턴스를 조정한다.

Karpenter에서는 기본적으로 kind로 NodePool을 사용하는데 3가지 구성 전략이 있다.

Karpenter를 통한 비용 최적화와 운영 효율화

Karpenter 노드 생성 심층 분석

주어진 파드들을 최소한의 "빈"(즉, 컨테이너 또는 자원)에 효율적으로 배치하는 문제

  • 파드가 노드에 배치될 때 리소스를 최적화하여, 최대한 많은 파드를 적절하게 배치한다.
  • 노드의 자원과 파드의 요구 사항을 분석하여, 적합한 노드를 선택한다.
  • 비용을 고려하여 인스턴스 유형을 선택한다.
  • Daemon Set 파드가 사용하는 리소스를 고려하여 노드를 스케줄링한다.

결국 ‘얼마나 효율적으로 파드를 배치를 할 것인가’인 NP-Hard 문제이기 때문에 휴리스틱하게 전략을 짠다.

Drift 기능을 활용한 패치 및 업그레이드

Karpenter 노드 중단 심층 분석

Consolidation: 불필요한 노드를 제거하고, 제거할 수 없는 경우에는 그 크기를 줄여 클러스터의 비용을 절감

아래와 같이 순서대로 진행된다.

  • N(노드) → 0
    • 여러 노드(N nodes)를 하나도 없는 상태(0 nodes)로 줄이는 것
    • 실제로 사용되지 않는 불필요한 노드를 완전히 제거함으로써 비용을 절감한다.
    • 주어진 제약 조건에 따라 불필요한 노드를 최적화하여 중단한다.
  • N(노드) → 1
    • 여러 노드(N nodes)를 하나의 노드(1 node)로 통합(consolidate)하는 것
    • 제거할 수 없는 노드의 경우, 여러 노드를 하나의 노드로 통합하거나, 사용량이 적은 노드의 크기를 줄여서 효율성을 높인다.
    • 렌처 로직(rancher logic) 및 최적화 알고리즘을 활용하여 가장 적합한 노드를 선택하고, 다른 노드의 작업을 이 노드로 이동시킴으로써 통합한다.

위대한 상상의 Karpenter 도입기

NodePool 구성

조금 귀찮더라도 최초에 한번은 오른쪽 코드와 같이 구성하니 편하더라.

EC2NodeClass 구성

마무리

0개의 댓글

관련 채용 정보