인프라 비용 절감에 대해 찾아보다가 KEDA에 대해 공부하게되었다.실제 라이브 배포망이 아닌 다른 배포 환경의 경우 제한적인 리소스를 가지고 있고, 이를 절감하기 위해 서버리스를 도입할 수 있다. 물론 서버리스가 동작하는데 지연 시간이 있는 것은 분명하지만, 거의 사용하지 않는 마이크로서비스들에 대한 비용을 절감할 수 있다.(CPU 코어 수, Memory 등 ... ) 따라서 KEDA에 대해 간단하게 학습하고 정리하였다.
그리고 Java CRaC이 연구 중이며, 이 기술을 쓰면 자바 애플리케이션도 실행 시간을 짧게 할 수 있다고한다. 언젠가 이런 실행 시간을 스냅샷 기반으로 줄이는 상용 기술이 등장할 수도 있을 것 같다.
KEDA란?
KEDA란 Kubernetes Event-driven Autoscaling이다.
Kubernetes환경에서 이벤틑 기반 워크로드를 자동으로 스케일링하기 위한 오픈소스 프로젝트이다.
또한, Keda는 클라우드 네이티브 환경에서 발생하는 다양한 이벤트에 기반하여 애플리케이션을 자동으로 확장하고 축소할 수 있도록 도와준다.
KEDA의 장점
하지만, Kubernetes에도 스케일링 기능을 제공하고 있는데 Keda를 도입해야하는 이유가 무엇일까?
- 우선, 현재 서버리스 상에 서비스를 배포해야한다는 목표가 존재하며, Keda는 서버리스 아키텍처에 더 적합한 control, flexiblity를 제공한다.
- Kubernetes HPA(Horizontal Pod Autoscaler)는 주로 CPU, Memory와 같은 리소스 사용량을 기반으로 동작한다. 그러나, 이벤트 기반 워크로드에서는 특정 이벤트에 따라 스케일링이 필요할 수 있다.
- Keda를 사용하면 스케일링 규칙을 통해 이벤트, 조건에 따라 어떻게 스케일링을 수행할 지 더 정확하게 설정할 수 있다. (메시지큐 기반 스케일링, HTTP 트래픽 감지 스케일링, 스케줄링을 통한 스케일링 등)
KEDA VS KNative
Keda는 이벤트 기반으로 Kubernetes 환경에서 운영중인 컨테이너를 자동 스케일링하는 Kubernetes 컴포넌트이다.
HTTP 트래픽, 메시지큐에서 온 이벤트, 데이터베이스 쿼리 결과 등 다양한 이벤트를 수신받아 이를 기반으로 컨테이너를 스케일링할 수 있게 해준다.
또한, 기존에 Kubernetes 환경에 배포한 Service나 Deployment를 수정하지 않고 KEDA로 확장하여 사용할 수 있어, 운영 중인 Kubernetes 클러스터에 어렵지 않게 도입하여 사용할 수 있다.
Keda와 유사한 프로젝트인, KNative는 Kubernetes 환경에 서버리스를 쉽게 구현할 수 있도록 다양한 도구와 컴포넌트를 제공하는 점에서 KEDA와 차이점이 존재한다.
하지만 KNative가 제공하는 강력한 기능을 사용하려면, 기존 Service나 Deployment를 KNative에서 제공하는 KNative 서비스로 변환해서 사용해야 한다.
즉, 기존 Service를 두고 추가적으로 확장하여 사용하고 싶은 경우에는 적합하지 않을 수 있다.
기존 클라우드 서비스들을 마이그레이션함에 있어, Keda가 매력적인 이유로는 기존 Service, Deployment를 수정하지 않고 사용할 수 있다는 점이 아닐까한다.
또한, Knative가 서버리스에 집중된 프로젝트긴 하나, Keda 또한 서버리스를 구축할 수 있다.
특히, Keda HTTP Add On을 활용할 수 있다.Keda에는 다양한 유형의 이벤트를 받아서 Service나 Deployment를 스케일할 수 있는 Scaler가 있는데, 그 중 Keda HTTP Add On은 HTTP 트래픽을 기반으로 스케일되는 서비스를 Keda HTTP Add On이 제공하는 HTTPScaledObject로 구현할 수 있다.
이를 통해 HTTP 트래픽이 있으면 1개 이상의 Pod을 배포하도록 하고, 트래픽이 많아지면 다수의 Pod를, 그리고 HTTP 트래픽이 없으면 0으로 스케일하여 Pod를 모두 종료하도록 할 수도 있다.
결론
KEDA는 Kubernetes에 서버리스를 적용하기에 고려할만한 도구인 것 같다. 특히 이벤트 기반 스케일링을 통해 사용하지 않는 시간에는 pod을 줄이거나 동작시키지 않고, 특정 업무 시간에만 pod을 늘리는 등의 기능을 지원한다는 점이 매력적인 것 같다.
대표적인 장점으로는 서버리스를 통해 개발망의 리소스를 절약하면 라이브에 할당할 수 있는 비용이 커지게 된다는 장점이 있다.또한, Knative에 비해 기존 yaml 파일을 쉽게 이전할 수 있다는 것도 큰 장점인 것 같다.
그리고, Keda Http Add On이라는 부가 기능도 존재하기 때문에 http 요청 시 동작하게 하거나 http 요청 부하에 따라 pod를 조절할 수 있는 유연성이 효율적인 인프라 운영에 적합한 기술이라고 생각된다.
'Infra' 카테고리의 다른 글
Docker / Kubernetes (0) | 2022.05.24 |
---|---|
Jenkins VS Travis VS Github action (0) | 2022.03.21 |
Jenkins (0) | 2022.02.04 |
클라우드, 인프라 (0) | 2021.11.01 |