안녕하세요, Bro 여러분.
댓글만 몇번 작성해보다가 제가 개발중인 K8s Operator 가 있어 소개드리기 위해 처음 글을 작성해봅니다.
개발 동기
제가 10년 넘게 재직중인 오래된 스타트업(?)이 있는데, 이곳에서 Multi-tenancy 를 K8s 와 Terraform으로 관리하고 있었습니다.
물론 Tenant 30~50개까지는 별 생각 없이 확장을 했고 큰 불편함이나 문제가 없었습니다.
그러나 위와 같이 관리하며 더 많은 수(100+)의 테넌트를 배포하고 관리하다 보니 여러가지 고충이 있었는데 그중 가장 해결하기 어려운 부분이 필요할 때 즉각적인 프로비저닝이 불가능하다는 것 이었습니다.
주된 이유는 Terraform State 를 업데이트하고 apply 하는데만 상당한 시간이 소요되는것 이었고, Terraform 으로 작성해둔 Tenant Module을 수정하거나 문제가 생겨 롤백을 해야 할 때에도 적지 않은 지연시간이 발생했습니다.
개발 과정
이런 문제를 해결하기 위해 초기버전인 “tenant-operator” 를 회사 내부적으로 개발하여 약 2년간 시범 운용했습니다.
기본적인 요구사항을 모두 회사에 필요한 부분에 맞춰 개발하여 다른곳에서 쓰기에 적절하지는 않았지만 실제로 즉각적인 프로비저닝과, 손쉬운 테넌트 별 상태 관리가 가능했고 내부적으로 운영하며 필요하다고 느낀 다양한 요구사항을 취합하여 범용적인 인터페이스로 다시 설계한것이 **지금 소개드리는 Lynq 라는 Database-driven K8s Operator입니다.
(**참고: 이름에 대한 스토리는 About 페이지에 적어두었습니다.)
소개
이 오퍼레이터는 Database 에 저장된 데이터를 기반으로 K8s 리소스로 프로비저닝하기 위한 오퍼레이터입니다.
아직 데이터 소스는 MySQL만 지원하고 있지만 다양한 데이터 소스를 지원할 예정이며, 비교적 쉽게 추가가 가능하도록 Adapter pattern 으로 구현하고 누구나 추가할 수 있도록 기여를 위한 문서도 추가해두었습니다.
또한 처음 접하는 개념의 운영 방식일 수 있다고 판단하고, 잘못된 이해로 사고를 방지하기 위해 다양한 시각화로 설명을 신경썼습니다.
- 어떻게 동작하는가: How Lynq Works | Lynq
- 의존 그래프 시각화 도구: Dependency Graph Visualizer | Lynq
- 다양한 Policy 기능의 인터랙티브 시각화 도구: Policies Guide | Lynq
- ignoreFields 기능의 이해를 돕는 애니메이션 삽입: Field-Level Ignore Control | Lynq
이용 시 장/단점
장점
- Slack이나 Atlassian 에서 조직을 생성하면 곧바로 사용 가능한 도메인 및 전용 환경이 생성되는것 처럼 구현이 쉽게 가능합니다.
- 개발팀은 배포 환경 제어를 위한 데이터만 잘 관리하고, 인프라팀은 배포 환경에 대한 구성만을 신경쓸 수 있게 됩니다.
- 이 외에도 반복 가능한 구성으로 인프라를 관리해야 하는 대부분의 상황에 알맞으며, 필요한 정보(반복된 구성에 대한 템플릿)만 형상관리하면 됩니다.
- CR 또한 생성할 수 있고, 외부 인프라까지 통합해야 하는 경우 Crossplane 과 같은 프로젝트를 함께 사용해 더욱 강력하게 구성이 가능합니다.
단점
- 반복되는 구성이 거의 없는 경우 필요 없습니다.
- 모든 반복되는 구성까지 상태/형상 관리를 해야 하는 경우 필요 없습니다.
- 아직 오픈소스로 개발을 시작한지 1개월이 채 되지 않아 신뢰도가 낮습니다. (문제를 발견하시면 Issue 또는 PR로 기여해주시면 감사하겠습니다..)
기타 특징
- Helm 지원
- Prometheus, Grafana Dashboard 제공
- 1.28 이후 대부분 K8s 버전 지원 (1.28 이하만 테스트 되었지만 스펙상 1.22 이상이면 동작 가능합니다.)
마치며
이 외에도 프로덕션 레벨에서 안심하고 운용할 수 있도록 E2E 를 충분히 작성하고, 다양한 기능을 구현해두었으니 관심 있으신 분들께서는 한번씩 GitHub Repo와 웹사이트에 방문하셔서 훑어봐주시면 감사하겠습니다.
- GitHub: GitHub - k8s-lynq/lynq: Kubernetes-Native Database-Driven Automation
- Website: https://lynq.sh/
이 프로젝트는 Apache 라이센스를 따르며 상업적인 목적이 전혀 없음을 알려드리며, Star 로 응원을 해주신다면 매우 감사드리겠습니다 ![]()
개인적인 소망일 뿐이지만 차후 CNCF Sandbox에 지원하여 최종적으로 졸업까지 가자는 목표를 갖고 있습니다.
