쿠버네티스 CI/DI 를 위한 오픈소스 프로젝트 알아보기
최근 AWS ECS에서 쿠버네티스로 갈아타며 격동의 연초를 보내고 있는 것 같습니다. 굳이 또 공부를 해야 하나 싶었는데 막상 학습하다 보니 훨씬 더 유연하고 개발 친화적인 환경을 구축할 수 있는 것 같습니다. 이번 블로깅은 이런 쿠버네티스의 CI/CD를 도와줄 오픈소스들을 소개하려 합니다.
앤서블(Ansible)
앤서블은 Puppet, Chef와 같은 프로비저닝 자동화 툴입니다. 처음에는 사실 의아했던 게 쿠버 네티스 자체도 배포 자동화인데 거기서 또 자동화가 무슨 자동화가 필요하다는 거지?라는 생각이었지만 놓쳤던 부분이 있었습니다.
쿠버 네티스로 서비스를 돌려도 최소한 노드 컴퓨터에 최소한의 설정 하다못해 SSH 키나 docker sudo 설정이라도 해주어야 합니다. 규모가 작다면 문제가 되지 않겠지만 서비스의 규모가 늘어나면 늘어날수록 야근이 많아지게 됩니다.
앤서블은 이러한 기본적 프로비저닝과 설정 등을 자동화해줄 수 있으며 코드로서의 인프라(Infrastructure as Code)를 표방하기 때문에 playbook으로 명칭 되는 yaml형식의 문법으로 전체적인 인프라 프로비저닝을 관리할 수 있습니다. 게다가 JSON기반의 통신인 데다 SSH를 지원하기 때문에 다른 툴들에 비해 러닝 커브가 적습니다.
엔 서블 대해 이야기할 때 많이 나오는 용어가 멱등성(idempotence)입니다. 멱등성이란 동일한 작업을 계속해서 수행해도 항상 동일한 결과가 나오는 것을 뜻하는 용어로 이미 프로비저닝 된 머신에 여러 번 Ansible로 배포되어도 항상 동일한 결과를 얻을 수 있도록 디자인되었습니다.
Helm
Helm은 쿠버네티스를 위한 패키지 매니저입니다. 쿠버네티스 오브젝트 파일에 변수값을 쓸 수 있는 것만으로도 충분히 값진 플러그인입니다.
포트번호와 같은 운영환경과 다른 서비스 설정 등을 별도의 두 개의 파일이 아닌 하나의 파일로 관리하고 변화되는 변수들만 values파일로 간단히 관리할 수 있는데 별거 아닌 것 같았지만 생각보다 정말 유연한 배포 환경을 구축할 수 있도록 도와줍니다.
또한 개별 오브젝트 단위가 아닌 오브젝트들을 묶은 차트 단위로 쿠버 네티스 환경을 구축할 수 있습니다. 이러한 차트 단위로 관리하게 되면 개별 컨테이너가 아닌 오케스트레이션 단위로 버저닝을 할 수 있고 관리할 수 있으며 배포된 버전에 큰 문제가 생겨 이전 버전으로 긴급히 복구해야 할 때도 rollback 커맨드로 복구시킬 수 있습니다.
Kong
Kong 하면 오직 하나를 모르시는 그분만 생각이 나지만… Kong은 API Gateway를 위한 오픈소스 라이브러리입니다. 기존 Kong과는 별도로 쿠버 네티스의 네이티브 오브젝트로 동작하는 Kong-Ignesss-Controller라는 별도의 프로젝트가 존재합니다.
쿠버네티스 API를 운영함에 있어 Public/Private 채널을 아이피 별로 별도로 운영하거나 서브도메인별로 연결해줄 서비스를 다르게 해 주거나 시간당 요청수 등을 제한하는 등의 작업을 할 수 있으며 로드밸런서와 쿠버 네티스 사이의 미들웨어로써 동작하게 됩니다. 가장 큰 장점은 쿠버네티스 오브젝 트이기 때문에 helm을 이용하여 함께 패키징 관리를 해줄 수 있습니다.
Prometheus + Granfana
공식문서에서도 권장되는 프로메테우스입니다. 메트릭 단위의 데이터 수집 및 저장 그리고 Alert Manager를 통한 모니터링 시스템을 제공합니다. 자체 시계열 데이터를 이용해서 데이터를 관리됩니다. 시각화툴은 정말 많지만 가장 쉽게 연동시킬 수 있고 궁합이 가장 잘 맞는 시각화툴인 Granfana가 있습니다. 개인적으로는 조금 더 심미적인 UI를 제공하는 Netdata를 선호합니다.
다른대안
이외에 고려해볼만한 모니터링툴로는 Elastic Search가 있습니다.
마치며
최근 들어 쿠버네티스의 CI/CD를 도와주는 수많은 오픈소스 프로젝트들이 나오고 있고 퍼블릭 클라우드를 제공하는 서비스 업체끼리의 오픈소스 밀어주기도 점점 격렬해지는 것 같습니다. 자고 일어나면 배울게 또 생기는 요즘이라 한번 배워서 오래 유지보수할 수 있는 좋은 툴을 고르기는 참 어려운 것 같습니다.