[reinvent 2024] Karpenter 와 EC2 스팟 인스턴스를 사용한 EKS에서의 효율적인 워크로드 실행
Summary
이 세션에서는 Karpenter가 어떻게 Kubernetes 클러스터의 복잡성을 줄이고 효율성을 개선하는 데 도움을 줄 수 있는지에 대해 설명합니다. Amazon EC2 스팟 인스턴스를 활용하는 방법을 살펴보고, 지속 가능성을 개선하면서 워크로드를 더욱 최적화하는 데 Graviton 인스턴스가 어떻게 도움이 되는지에 대해서도 설명합니다. 영국의 온라인 뱅킹 기업인 Monzo의 사례를 통해 Karpenter와 스팟 인스턴스를 적극적으로 도입함으로써 어떤 가치를 얻을 수 있었는지에 대해서도 설명합니다.
리인벤트 2024 테크 블로그의 더 많은 글이 보고 싶다면?
Overview
들어가며
AWS의 EC2 인스턴스
AWS에서는 800개가 넘는 인스턴스 타입을 제공하고 있습니다. EC2 인스턴스는 일반, 메모리 집약형, 컴퓨팅 집약형 등 여러 카테고리로 나뉘며, 각각의 인스턴스를 CPU 종류와 네트워킹 요구사항 등을 종합적으로 고려하여 선택할 수 있습니다. 또한 세 가지의 구매 옵션을 제공하여, 다양한 구매 옵션을 제공하여 더욱 합리적인 가격으로 컴퓨팅 자원을 사용할 수 있도록 합니다. 이번 세션에서는 AWS에서 자신들의 유휴 자원을 매우 낮은 가격에 판매하는 스팟 인스턴스에 대해 중점적으로 얘기합니다.
컨테이너는 스팟 인스턴스와 궁합이 매우 좋습니다. 스팟 인스턴스는 할인율이 높은 대신에, 언제든지 종료될 수 있다는 단점이 있습니다. 컨테이너는 언제든지 생성되고, 제거될 수 있는 것을 전제로 하기 때문에 언제든지 종료될 수 있는 스팟 인스턴스와 잘 맞는다고 할 수 있습니다. 컨테이너 환경에서 스팟 인스턴스를 활용하면 일반적으로 65%~68%의 비용 절감 효과를 기대할 수 있다고 합니다.
Graviton인스턴스는 AWS에서 개발한 ARM64 아키텍처 CPU를 사용하는 인스턴스입니다. 기존 x86 기반 아티켁처에 비해 최대 40% 까지 비용 대비 성능이 우수합니다.
카펜터를 이용하면 스팟 인스턴스를 사용함으로써 발생하는 예상치 못한 중단에 대한 처리를 잘 할 수 있으며, Graviton 인스턴스를 프로비저닝 할 수도 있습니다.
쿠버네티스에서 Scaling 과 Karpenter
쿠버네티스에서 어플리케이션은 다양한 조건에 의하여 수평 혹은 수직 확장이 일어납니다. 이렇게 어플리케이션이 확장되면, 어플리케이션을 수행할 데이터 플레인으로 확장이 되어야 합니다. 이를 구현하는 방법은 Cluster Autoscaler와 Karpenter 두 가지가 있습니다.
Cluster Autoscaler와 카펜터는 서로 다른 방식으로 동작합니다. Karpenter만이 가지는 장점들을 아래와 같습니다.
- 어플리케이션의 요구 사항에 맞춰서 인스턴스를 프로비저닝 할 수 있습니다(워크로드에 맞춰 인스턴스 타입을 여러가지 설정 가능)
- 온디맨드와 스팟을 두 개 모두 설정이 가능하고, 스팟 인스턴스의 종료를 잘 처리합니다.
- 노드들이 그룹 지어지지 않기 때문에 타입이나 사이즈를 다양하게 이용하기 용이합니다.
- 계속하여 최적화를 수행합니다.
Monzo의 사례
Monzo는 초기에 매우 적은 수의 엔지니어들이 쿠버네티스를 직접 운영하고 있었습니다. 이 때는 한 개의 ASG를 이용하여 같은 사양의 인스턴스를 수백개 사용했습니다. 자동으로 인프라 규모를 확장/축소되도록 설정한게 아니라 수동으로 규모를 조절하며 운영하고 있었습니다. 비즈니스가 크게 성장하기 이전에는 이런 방식은 나쁘지 않았다고 합니다.
하지만 비즈니스가 급격하게 성장함에 따라 이 방식은 많은 작업 부하를 가져왔고, 이를 해결하기 위해 Cluster Autoscaler를 적용했다고 합니다. Cluster Autoscaler와 HPA를 이용하여 어플리케이션 사이즈를 동적으로 조절할 수 있게 하고, 비용을 절감하기 위해 Savings Plan도 적용했다고 합니다.
비즈니스 규모가 커짐에 따라 클러스터를 관리하는 작업들이 부담이 되게 되었고, 이를 해결하기 위해 EKS로 마이그레이션 했다고 합니다. 또한 Karpenter를 도입하여 다양한 인스턴스 타입을 동시에 사용하면서도 운영 오버헤드를 줄일 수 있었다고 합니다.
Monzo는 많은 마이크로서비스를 Stateless한Go 어플리케이션으로 개발했기 때문에 스팟 인스턴스를 적용한 비용 절감에 도전했다고 합니다. 중요도가 낮은 시스템부터 적용했으며 현재는 99%를 Savings Plan 아니면 스팟 인스턴스로 사용하고 있다고 합니다. 스팟 인스턴스의 사용률은 약 50% 수준에 육박합니다. 이를 통해 Savings Plan을 이용하며 얻은 할인율에 더해 추가로 15%의 비용을 절감할 수 있었다고 합니다.