Overview
오늘은 Kubernetes에서 클러스터와 워크로드의 리소스를 효율적으로 조절해주는 오토스케일링(Autoscaling) 개념과, AWS 환경에 최적화된 노드 자동 확장 도구인 Karpenter에 대해 알아본다.
Kubernetes의 전통적인 오토스케일링 구성 요소인 HPA, VPA, CA 각각의 역할을 이해하고, 이를 대체하거나 보완하는 Karpenter의 장점과 차별점을 비교해본다.
이를 통해 동적인 트래픽 변화나 다양한 워크로드 조건에서 클러스터의 유연성과 비용 효율성을 어떻게 확보할 수 있는지 학습해보자.
Kubernetes Autoscaling이란?
Kubernetes Auto Scaling은 Kubernetes 클러스터가 워크로드에 따라 용량을 자동으로 조정하는 기능을 말한다.
파드(Pod)에 효율적으로 실행할 수 있는 충분한 리소스가 있는지 확인하는 동시에 낭비를 방지하기 위해 리소스 사용을 최적화하는 데 도움이 된다.
Kubernetes Autoscaler
일반적으로 stateless 서버는 HPA를 사용하는 것이 적합하다.
VPA는 리소스를 변경하는 과정에서 pod의 재시작이 불가피하고, 하나의 node가 가질 수 있는 리소스(CPU, 메모리)에는 한계가 있기 때문이다.
출처 : https://tech.scatterlab.co.kr/kubernetes-hpa-custom-metric/
HPA(Horizontal Pod Autoscaler)
CPU 사용률 또는 메트릭을 기반으로 Replication Controller, Deployment, Replication set, Statefulset의 Pod 수를 자동으로 조정한다. 메트릭을 주기적으로 확인하고 관찰된 메트릭 값이 설정된 목표에서 벗어나는 경우 Replica 수를 조정한다. Scale out 하는 오토스케일러 이다.
HPA 커스텀 메트릭 연동 예시
HPA는 기본적으로 CPU 사용률이나 메모리 같은 리소스 기반 메트릭으로 작동하지만,
실무에서는 이보다 더 다양한 기준으로 오토스케일링이 필요한 경우가 많다.
예를 들어 요청 수, 큐 길이, 비즈니스 KPI 등 사용자 정의 지표를 기반으로도 스케일링을 하고자 한다면,
Prometheus Adapter를 연동하여 Custom Metrics 기반의 HPA를 구성할 수 있다.
이 방식은 `queue_length, http_requests_total` 등 외부 메트릭을 기반으로 Pod 수를 조정할 수 있어, 서비스 특성에 맞춘 유연한 확장이 가능하다는 장점이 있다.
VPA(Vertical Pod Autoscaler)
Pod의 CPU 및 메모리 예약을 자동으로 조정하여 리소스 효율성을 보장한다. request 리소스 사용 기록을 기반으로 컨테이너의 값을 업데이트하여 각 포드가 효과적으로 실행하기에 충분한 리소스만 갖도록 한다. 변경 사항을 권장하거나 이러한 변경 사항을 자동으로 적용하도록 구성할 수 있다. Scale up 하는 오토스케일러 이다.
HPA와 VPA는 동시에 쓰면 안 되는 이유
주의할 점은 HPA와 VPA는 동시에 하나의 파드에 적용할 수 없다는 것이다.
그 이유는 HPA는 리플리카 수를 조절하고, VPA는 리소스 요청/제한 값을 조정하는데,
이 두 컨트롤러가 리소스를 동시에 관리하게 되면 충돌이 발생할 수 있기 때문이다.
실무에서는 HPA와 VPA 중 한 가지 방식만 선택하거나, 역할을 명확히 나눠서 사용하는 것이 권장된다.
CA(Cluster Autoscaler)
Kubernetes 클러스터 자체의 크기를 자동으로 조정한다. 리소스가 부족하여 실행에 실패한 클러스터에 포드가 있는 경우 더 많은 노드를 추가할 수 있다. 노드 사용률이 낮고 해당 포드가 다른 노드에서 예약될 수 있는 경우 이러한 노드를 제거할 수 있다.
Scale up vs Scale out
스케일 업과 스케일 아웃은 인프라 확장을 위해 더 많은 로드를 처리하기 위해 시스템 용량을 늘리는 방법을 설명하는 데 사용되는 용어이다. 이는 컴퓨팅, 특히 클라우드 서비스 및 인프라 맥락에서 일반적인 개념이다.
Karpenter란?
Karpenter는 AWS에서 구축한 Kubernetes 네이티브 오픈 소스 프로젝트이다.
Karpenter는 직접 EC2 Instance를 생성하여 node를 provisioning 하므로 새로운 node 생성 속도가 훨씬 빠르다.
다양한 인스턴스 유형 선택, 온디맨드 및 스팟 인스턴스 프로비저닝, 다중 테넌시, 전용 노드 사용 등과 같은 기능으로 보다 다양한 워크로드를 처리하도록 설계되었다.
Kubernetes의 Cluster Autoscaler에 비해 유연하고 노드 자동 확장에 더 중점을 둔다. Karpenter는 리소스 요구 사항, taint 및 기타 제약 조건을 고려하여 예약되지 않은 포드의 요구 사항을 기반으로 노드를 프로비저닝한다.
Karpenter의 동작 조건과 필수 구성요소
Karpenter는 설치만으로 바로 동작하는 도구는 아니다.
AWS 환경에서 Karpenter가 노드를 자동으로 생성 및 관리하려면 몇 가지 리소스를 함께 구성해야 한다.
예를 들어 Karpenter가 EC2 인스턴스를 직접 프로비저닝하려면 필요한 IAM 역할이 부여되어 있어야 하며,
어떤 Pod를 위한 노드를 어떤 조건으로 만들지를 정의하는 Provisioner CRD 리소스도 필요하다.
이외에도 사용자 정의가 필요한 경우 EC2 Launch Template을 구성해 원하는 형태의 노드 설정도 가능하다.
이처럼 Karpenter는 유연성과 성능 면에서 뛰어나지만, 초기 세팅은 신중하게 준비할 필요가 있다.
Karpenter vs Cluster Autoscaler
CA(Cluster Autoscaler)와 Karpenter는 모두 Kubernetes 클러스터 내의 노드 자동 확장을 위한 도구이다.
CA는 현재 워크로드를 기반으로 클러스터 크기를 확장하여 모든 팟(Pod)이 실행할 장소를 확보하고 불필요한 노드를 최소화하는 Kubernetes 네이티브 솔루션이다. 다양한 클라우드 공급자를 지원한다.
반면 AWS에서 개발한 오픈 소스 프로젝트인 Karpenter는 더 많은 유연성과 효율성을 제공한다. 다양한 워크로드와 다양한 인스턴스 유형을 관리하고 온디맨드 및 스팟 인스턴스를 처리하며 주로 AWS 환경에 최적화된 다중 테넌시 및 전용 노드 사용을 지원하도록 설계되었다.
Autoscaler 상태를 실시간으로 시각화하는 방법
실제 운영 환경에서는 오토스케일링이 잘 작동하고 있는지 실시간으로 관찰할 수 있는 시각화 도구도 중요하다.
HPA나 Karpenter가 어떤 기준으로 동작하고 있는지,
현재 Pod 수나 노드 수의 변화가 어떤 메트릭에 의해 발생했는지를
한눈에 파악하기 위해 Grafana + Metrics Server, KEDA Dashboard, Lens 같은 도구를 함께 활용하는 것도 추천한다.
마무리
Kubernetes Autoscaling은 단순히 리소스를 자동으로 늘리고 줄이는 기술을 넘어, 클라우드 기반 인프라를 운영함에 있어 비용 최적화와 안정성 확보에 핵심적인 역할을 한다.
HPA, VPA, CA는 각각 워크로드 레벨, 파드 리소스 수준, 클러스터 노드 수준에서의 자동화를 담당하며, 이를 기반으로 Karpenter와 같은 최신 솔루션은 속도, 유연성, 비용 효율성 측면에서 진화된 옵션을 제공한다.
특히 Karpenter는 AWS 환경에서의 생산성 향상과 운영 간소화에 매우 강력하며, 동적 워크로드에 잘 맞는다.
실제 환경에 도입할 때는 HPA와 Karpenter를 병행 사용하거나, CA에서 Karpenter로 점진적으로 전환하며 테스트하는 전략도 고려해볼 수 있다.
Reference
- Kubernetes 공식 문서 (https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/)
- [ScatterLab 기술블로그] HPA 커스텀 메트릭: https://tech.scatterlab.co.kr/kubernetes-hpa-custom-metric/
- [사람인] Kubernetes 오토스케일링 정리: https://saramin.github.io/2022-05-17-kubernetes-autoscaling/
- HPA 설명 블로그: https://medium.com/@arton.demaku/horizontal-auto-scaling-in-kubernetes-fc0809d6668
- AWS 공식 블로그 - Karpenter 소개: https://aws.amazon.com/ko/blogs/aws/introducing-karpenter-an-open-source-high-performance-kubernetes-cluster-autoscaler/
- Qovery - Karpenter vs Cluster Autoscaler: https://www.qovery.com/blog/kubernetes-cluster-autoscaler-vs-karpenter
- ScatterLab - Spot Karpenter 운영기: https://tech.scatterlab.co.kr/spot-karpenter/
- [TechCourse] 스케일 업 vs 스케일 아웃: https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/
'Container Orchestration > Kubernetes' 카테고리의 다른 글
1. Kustomize란? (0) | 2023.10.12 |
---|---|
CertManager로 Let's Encrypt 인증서 발급 (2) | 2023.10.03 |
Helm Chart 작성방법 (0) | 2023.05.18 |
Helm 이란? (Kubernetes Package manager) (2) | 2023.05.16 |
Kuberntes Service Account란? (0) | 2023.05.10 |