Kubernetes에서 데이터베이스 운영하는 거, 솔직히 쉽지 않죠. 저도 처음에는 stateful 애플리케이션을 K8s에서 돌린다는 게 좀 부담스러웠습니다. 그런데 CloudNativePG(CNPG)를 쓰면서 생각이 많이 바뀌었어요.
CNPG가 뭔가요?
CNPG는 Kubernetes용 PostgreSQL 오퍼레이터입니다. CNCF Sandbox 프로젝트고요. 그냥 PostgreSQL을 컨테이너에 넣은 게 아니라, Kubernetes 방식으로 데이터베이스를 관리할 수 있게 만들어졌습니다.
제가 좋아하는 부분은 정말 많은데요, 페일오버가 보통 5초 안에 끝나고, YAML로 선언만 하면 알아서 HA 클러스터가 뜨고, GitOps로 관리할 수 있다는 점입니다. Barman으로 백업하고 PITR도 되고, PgBouncer 붙이는 것도 간단합니다. Prometheus 메트릭은 기본으로 나오고요.
무엇보다 롤링 업데이트로 PostgreSQL 버전 올리는 게 정말 편합니다. 예전엔 이거 하나 하려고 얼마나 긴장했는지…
EDB 이야기를 좀 해야겠네요
CNPG는 원래 EDB(EnterpriseDB)에서 만들었습니다. 2022년에 CNCF에 기증했고요. 저는 이런 케이스가 오픈소스의 좋은 예시라고 생각해요.
EDB는 지금도 핵심 컨트리뷰터로 활동하면서 프로젝트를 계속 밀어주고 있습니다. 동시에 엔터프라이즈 고객들한테는 상용 지원을 제공하고 있고요. PostgreSQL 커뮤니티에서도 주요 기여자인 EDB가 CNPG를 통해 클라우드 네이티브 쪽으로 PostgreSQL 생태계를 확장하고 있는 거죠.
기업이 만든 걸 커뮤니티에 내놓고, 커뮤니티는 성장하고, 기업은 엔터프라이즈 지원으로 비즈니스 하고. 이런 게 진짜 win-win 아닐까요?
왜 CNPG를 쓰게 됐냐면
다른 솔루션들도 써봤는데, CNPG는 진짜 Kubernetes를 위해 만들어진 느낌입니다. Patroni나 별도 etcd 없이 Kubernetes API를 그냥 쓰거든요.
배포는 정말 간단합니다. YAML 몇 줄이면 3노드 HA 클러스터가 뜹니다. 인스턴스 개수랑 스토리지 크기만 정해주면 끝이에요.
실제로 프로덕션에서 쓰는 곳도 많고, CNCF 프로젝트니까 커뮤니티 지원도 활발합니다. 페일오버, 백업, 스토리지 관리, 모니터링 전부 자동이라 운영 부담이 확 줄어요.
어디서 쓸까요?
금융권에서는 거래 시스템에 많이 씁니다. HA가 필수니까요. SaaS 회사들은 테넌트별로 DB 클러스터 분리해서 운영하고, 이커머스는 트래픽 피크 대응용으로 쓰고, DevOps 팀은 GitOps로 DB 관리하는 데 쓰고 있습니다.
시작해보세요
오퍼레이터 설치하고 클러스터 YAML 하나 올리면 됩니다. cloudnative-pg.io 가면 문서 다 있고, GitHub에 가면 예제도 많습니다.
K8s에서 PostgreSQL 쓰시는 분들, 한번 써보시면 생각 바뀔 겁니다. 저처럼요.