Part.1 Apache Druid란
Part.2 Druid Operator: 드루이드 오퍼레이터 도입으로 드루이드 설치부터 관리까지의 과정 개선
Part.3 Druid Tuning: 제한된 자원속에서 카프카 스트림으로부터 데이터 수집하는 기능(성능)의 최적화
Part.4 Druid Tiering: 데이터가 조회되는 빈도 기준으로 데이터를 구분
Part.5 Druid without Middle Manager (MM less): k8s 리소스(파드)를 사용한 드루이드 태스크 관리 개선
이번 글에서는 Apache Druid Middle Manager 없이 사용하는 법을 살펴보겠습니다.
- K8S환경에서 Middle manager 없이 드루이드 task 관리(mm less)
- MM Less의 특징
- MM Less 사용방법
K8S환경에서 Middle Manager 없이 드루이드 task 관리(MM Less)
드루이드에서 Middle Manager(이하 MM)는 데이터 수집, 압축 등을 수행하는 작업을 관리하는 서비스입고, K8S의 일부 기능인 Job과 Pod를 활용하여 이를 대체할 수 있습니다.
1. MM Less의 특징
기존 MM에서는 작업을 하나의 프로세스 형태로 실행했습니다. 이로 인해 서비스에 고정적인 자원을 할당하는 문제가 있었고, 필요에 따라 자원을 유동적으로 사용하는 것이 어려웠습니다. 또한, MM에 문제가 발생하거나 특정 작업에 문제가 생겨 MM에 영향을 미치면, 다른 작업에도 장애가 전파되는 문제가 있었습니다.
MM을 제거하고 K8S 환경을 사용함으로써 다음과 같은 특징을 얻을 수 있습니다.
- Worker node가 제공하는 범위 내에서 자원을 자유롭게 사용 가능
- MM 의존성 제거
- 장애 전파 최소화
- 작업 타입 별 자원 및 설정 관리 용이성 향상
2. MM Less 사용 방법
MM Less를 적용하는 방법은 아래와 같습니다.
- extension 추가
- task를 실행할 pod 스펙 작성
- overlord에 task pod spec 추가
1. extension 추가
K8S 연동해서 사용하기 위한 extension을 다음과 같이 추가합니다.
druid.extensions.loadList=[“druid.kubernetes.overlord.-extensions”]
2. pod spec 정의
task가 사용할 수 있는 pod spec을 정의할 수 있도록 합니다.
pod spec은 다음과 같이 구성했으며, 환경과 구성에 따라 값이 바뀔 수 있습니다.
3. overlord에 pod spec 추가
MM Less를 사용하게 될 경우 task의 메타성 정보 관리는 overlord로 이관하게 됩니다. 따라서 overlord에 pod spec 정보를 올린 뒤 사용할 수 있도록 합니다.
configmap을 이용하여 yaml파일을 configmap에 저장한 뒤 서비스가 올라올 때 마운트 하는 형식으로 구성했습니다.
구성 후

구성 후 kubectl get job 명령어로 job을 통해 task가 생성되고 삭제되고 있는 것을 볼 수 있습니다.
이처럼 node가 허용되는 자원 속에서 자유롭게 생성되고 삭제가 됨으로써 자원을 효율적으로 사용할 수 있고, 각 task가 하나의 job형태로 구분되어서 task에 문제가 발생하더라고 다른 task에 장애가 전파되지 않을 수 있습니다.
node가 허용하는 자원 범위 내에서 작업이 자유롭게 생성되고 삭제됨으로써 자원을 효율적으로 사용할 수 있습니다. 각 작업이 하나의 Job 형태로 구분되어, 한 작업에 문제가 발생해도 다른 작업에 장애가 전파되지 않는 구조가 됩니다.
마치며
MM Less를 통해 자원을 효율적으로 사용하게 됨으로써 서비스를 안정적으로 관리할 수 있습니다. 또한 불필요한 자원을 계속 잡을 필요가 없어 운영비용 면에서도 상당한 이점이 있습니다.
함께 보면 좋은 아티클
