Kubernetes CI CD devtron, GitOps
Kubernetes를 편리하게, Devtron
Devtron
Devtron은 Kubernetes를 위한 오픈소스 딜리버리 워크플로우 툴입니다. 쿠버네티스에서 CI/CD 뿐 아니라 GitOps와도 연동이 되어 굉장히 편리하게 Kubernetes를 관리할 수 있습니다. 이런 비슷한 툴로 Rancher를 많이 사용하곤 합니다. 저희 팀에서도 Rancher를 이용해 쿠버네티스를 살펴보고 있습니다. Rancher의 좋은 점은 쿠버네티스 관리를 눈으로 보면서 할 수 있다는 것인데, 일일이 kubectl
을 사용하지 않더라도, 마우스 클릭으로 Pod나 Service 등등의 상태를 확인할 수 있고 조정할 수 있어서 참 편합니다.
Devtron은 이러한 Rancher의 장점에 GitOps까지 추가된 툴이라고 보면 되겠습니다. ArgoCD를 사용해보신 분이 있다면, 마치 Rancher + ArgoCD의 느낌입니다. 기본적인 쿠버네티스의 리소스 확인이나 관리는 Rancher의 기능을 거의 다 갖고 있고, 여기에 Git을 연결하면, ArgoCD처럼 GitOps도 가능합니다. 즉, 배포 관리를 한 번에 처리할 수 있다는 것입니다.
Devtron 1. 차트관리
Rancher에서도 마찬가지지만 레포지토리에 차트 주소만 넣어주면, 해당 주소에서 helm chart를 가져올 수 있습니다. 차트를 등록하는 방법은 Global Configurations에서 Chart Repository로 들어가면 됩니다.
이름과 차트의 URL, 인증방식을 넣어주고 Save를 해주면 끝입니다! Rancher와 거의 비슷한 방식입니다. 다만, 랜쳐는 Chart페이지에서 등록과 차트확인을 같이 할 수 있지만, Devtron은 차트 등록은 Configuration에서 하고, 차트 관리는 Chart Store에서 하네요.
차트 스토어에 들어가면 아까 등록한 차트들을 볼 수 있습니다. 정말 간단하게 원하는 차트를 누르고 Deploy하면 됩니다. Deploy를 누르게 되면 앱의 이름과 프로젝트, 환경 등을 선택할 수 있습니다. 차트 버전과 values.yaml도 선택가능하며, 하단에는 values.yaml이 나와서 수정을 할 수 있습니다.
이제 배포를 하면 끝!
Devtron 2. App 배포
Devtron에서 App을 배포하는 방법 역시 간단합니다. 아까 봤었던 왼쪽 바에서 application을 눌러 들어가서 custom app을 만들건지 helm chart기반으로 만들건지 선택하면 됩니다. custom app으로 들어가면 다음과 같은 화면이 등장합니다.
기본적으로 UI가 너무 깔끔합니다. Rancher는 정말 편하긴 하지만, old한 느낌을 지울 수 없는데 참 깔끔하고 산뜻하네요. 아무튼 화면으로 와서 Git Material을 등록해줍니다.
여기서 뭔가 의아해 하실 분도 있을겁니다. ‘Git을 꼭 등록해야하는건가?’
네 git을 등록해야 사용할 수 있습니다. 이 부분이 조금 별로라고 생각할 수도 있겠지만, 기본적으로 GitOps까지의 연결을 제공하려는 툴이다보니, 전 그러려니 했습니다. 여기서 Git 계정을 등록하고 나면 어디서 이미지를 갖고 올 건지를 선택합니다. DockerHub를 사용할 수도 있겠지만, 사내에서 사용하고, AWS를 사용한다면 ECR도 등록가능합니다. 그 다음 Dockerfile의 위치를 골라주고 Configuration을 저장해주면 됩니다. 그 다음은 Docker Build Config, Secret 등 세부 설정입니다.
Rancher에서는 Deployment를 하나 짜주고 배포하면 끝입니다. 물론 이게 훨씬 간단해보인다고 생각하시는 분들도 있겠지만, Git으로 관리해준다는 점이 인상적입니다. 사실 로컬에 배포하고 테스트하는 경우가 참 많아서 이미지 어디에 있는지 물어보는 경우도 많거든요. 이렇게 Git으로 꼭 등록을 해줘야 한다면, 이미지를 잃어버리지 않고 관리할 수 있어서 좋을 것 같습니다.
Devtron 3. Workflow
위에서 설정을 다 했다면 이제 워크플로우 단계입니다. Pipeline을 만들 수 있는 것인데요, Devtron 의 핵심 기능이라고 봐야 할 것 같습니다. 파이프라인은 세 종류로 나뉩니다. 이 글에서는 Continuous Intergration만 살펴보겠습니다. 저는 이것만 사용하거든요!
Continuous Integration
- Github에서 하나의 레포에 연결할 수 있습니다. 어떤 브랜치에 연결할 것인지를 고르고 넘어가면 기본적인 파이프라인이 생성됩니다.
- 자동으로 빌드할 것인지 일일이 마우스 클릭으로 빌드할 것인지를 선택할 수 있고, 파라미터를 넣을 수 있으며, 빌드 전 스테이지, 빌드 후 스테이지에 작업을 추가할 수 있습니다.
Continuous Deployment
위의 사진에서 Build파이프라인 옆에 +가 보이실 겁니다. 이 버튼을 눌러주면 Deployment를 어떻게 할 것인지 선택할 수 있습니다.
어떤 환경에 배포할지, 네임스페이스는 어디인지를 설정할 수 있고, 배포 전략도 고를 수 있습니다. 저는 test환경으로 환경을 4-devtron으로 해놨는데, dev - stage - prod 로 나눠서 안전하게 배포를 할 수도 있습니다.
production은 예민한 사항이다 보니, 유닛 테스트와 기능적인 테스트들을 추가적으로 설정해줘야겠지만, 가능합니다. 그래서 stage와 prod로 나눠서 관리를 하고 싶다 하면 다음과 같이 설정해서 운영할 수 있습니다. 운영 쪽은 확인을 한 번 해주고 수동으로 승인을 해서 배포하는게 나을 것 같습니다.
자 이렇게 설정되면 끝입니다. 그래서 뭐가 좋은거냐구요? ArgoCD처럼 변경사항을 반영해서 자동으로 배포를 할 수 있습니다. 작업을 하는 git 레포 디렉토리에서 변경사항을 만들고 git add - commit - push를 타겟 브랜치로 보내면, 이를 감지하고 자동으로 devtron이 동작하기 시작합니다. 마치 github action을 활용해서 배포를 하는 것처럼 말이죠.
위에서 등록한 파이프라인대로 쭉 돌아가기 시작하는데, 이 상황은 아래 그림처럼 확인할 수 있습니다. 성공을 했는지 실패를 했는지, 디테일도 볼 수 있고, 배포 된 이후의 상태체크 까지 가능하며 롤백도 가능합니다. 한 큐에 배포까지 자동으로 되는 게 참 편리하지 않나요?!
이외에도…
Devtron은 Log Analyzer가 내장되어 있어 pod의 logging을 rancher보다 조금 더 편하게 확인 가능하다는 장점이 있습니다. Rancher는 쌩 로그가 나와서 알아보기 참 어려운 점이 있지만, Devtron은 좀 나을 것 같습니다. 또 vault, external secret을 연결해서 사용을 할 수 있습니다. Rancher는 Vault를 따로 관리하는 느낌인데, Devtron은 쉽게 vault와도 연동이 가능합니다.
참 다양한 기능이 있어서 Rancher를 아예 떼버리고 Devtron으로 이사갈까?? 싶었지만, Rancher는 또 Rancher만의 장점이 있습니다. 아쉽게도 Devtron에서는 쉘을 따로 열 수 없습니다. Rancher에서는 답답하면 kubectl 쉘을 열어서 필요한 명령어들을 직접 내릴 수 있었지만, Devtron에서는 따로 쉘을 주지 않습니다. Bulk Edit을 할 수 있는 창은 있지만, Rancher에서 주는 쉘과는 다릅니다.
따라서 저희 팀은 같이 써보기로 했습니다. k8s에서 파드에 직접 접근해서 수정하거나, 노드를 늘리거나 줄인다거나, 좀 더 로우 레벨에서 작업할 일이 있으면 Rancher를 사용하고 그 외에 CI/CD 쪽은 Devtron을 사용하면 편하게 작업할 수 있을 것 같습니다. 현재는 POC 중이라 큰 문제는 없는 것 같습니다. GitOps가 된다는 점이 아주 매력적으로 다가오네요. 물론 내부적으로 DevOps팀과 Git Token 사용에 대해서 논의는 필요합니다. Github에서 토큰 발행이 너무 무분별하게 이루어진다면, 관리가 어렵게 되거든요. 잘못해서 유출된 토큰이 있게되면 참 곤란해집니다. 권한을 최소한으로 해서 Token을 발행할 수 있도록 하던지, 관리 주체를 한정해서 최소한으로 토큰을 발행할 수 있게 하던지 등등 내부적인 논의가 꼭 필요할 것 같습니다.
Reference
Kubernetes CI CD devtron, GitOps