GitOps란 DevOps의 적용하는 실천 방법 중 하나로 클라우드 네이티브 애플리케이션을 대상으로 한 지속적인 배포에 초점을 맞추고 있습니다. 이름에서 나타나듯이 배포와 운영에 관련된 모든 요소를 Git으로 관리하는 것에 초점이 맞춰져 있습니다.
GitOps는 배포와 관련된 모든 것을 선언형 기술 형태로 작성하여 이러한 파일들을 레포지토리 형태로 관리합니다. 그리고 선언형 기술서와 운영 환경 간 상태 차이가 없도록 유지시켜주는 자동화 시스템을 구성합니다.
DevOps는 개발과 운영의 합성어로 소프트웨어 개발과 IT 운영 팀 간의 협업을 강화하여 지속적인 통합과 배포를 가능하게 하는 문화 및 철학을 의미합니다.
앞서 GitOps는 DevOps의 문화 중 클라우드 네이티브 환경에 가장 적합한 방법론이라고 보시면 됩니다.
DevOps의 주요 원칙은 아래와 같습니다.
프로젝트와 함께 설명할때는 지속적인 통합과 지속적인 배포를 중심으로 설명하겠습니다.
GitOps는 클라우드 네이티브 환경 특히 쿠버네티스에 적합한 방법론입니다.
클라우드 네이티브 애플리케이션이 아니어도 깃옵스를 적용할 수 있으나 아래에서 설명드릴 선언형 모델(Declarative Model)을 지원하는 최근 도구들이 클라우드 네이티브에 중점을 두기 때문에 어려움을 겪을 수 있습니다. 위브웍스는 아예 쿠버네티스 대상이라고 못박고 있습니다.
출처 — 데브옵스의 확장 모델 — 깃옵스(GitOps) 이해하기 | 인사이트리포트 | 삼성SDS
저는 현재 쿠버네티스 환경에서 시스템을 운영하고 있습니다. 그러므로 쿠버네티스 환경에 가장 적합한 자동화 통합과 배포를 수행하고 싶어 선택하게 되었습니다.
프로젝트에 적용하기 전에 필요한 항목은 아래와 같습니다.
1. 프로젝트 GitHub
2. 컨테이너 이미지를 만드는 CI 파이프라인
3. 컨테이너 이미지 저장소
4. 쿠버네티스 매니페스트(Manifest) 저장소
5. Manifest를 클러스터에 동기화하고 변화를 감지하는 GitOps 엔진
Manifest 저장소
프로젝트에서 3개의 레포지토리를 관리하고 있습니다.
그러나 Manifest 저장소는 하나로 관리하는 것이 편리하다고 판단하여 프로젝트명으로 폴더를 분리하여 Kustomize 코드를 저장했습니다.
CI/CD 도구
CI/CD 도구는 쿠버네티스 클러스터 내부에서 동작해야 한다는 기준을 가지고 선정했습니다. 컨테이너 레지스트리(Harbor), 배포할 대상 모두 쿠버네티스 내부에서 동작하기 때문입니다. 이러한 기준점을 가지고 클라우드 네이티브 CI/CD 도구인 Tekton, ArgoCD를 선택하게 되었습니다.
Tekton이 GitHub Webhook을 통해 main 브랜치의 변경 이벤트에 맞춰 자동으로 이미지 빌드를 수행합니다. 생성한 이미지의 해시값을 Manifest 저장소에 업데이트를 수행합니다.
ArgoCD가 Manifest 저장소의 주기적으로 변경사항을 감지합니다. 변경 사항이 감지되면 Manifest 저장소에 맞춰 동기화를 수행합니다.
Slack Notifications
더 나아가 지속적인 통합(CI)과 배포의 실행 상태(CD)를 파악하기 위해 슬랙 채널에 메세지를 보낼 수 있도록 설계했습니다. 이를 통해 프로젝트 팀원이 CI/CD 실행 현황을 파악할 수 있도록 설정합니다.
다음 글에서는 Tekton을 활용하여 어떻게 CI를 구성했는지 설명합니다.
<hr><p>GitOps 전환기 - Part 3. GitOps 파이프라인 계획 세우기 was originally published in S0okJu Technology Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>