Kubernetes 환경에서 배포된 어플리케이션이 빈번하게 형상 업데이트가 일어나는 소스 기반이라면 이를 동기화하는 방법이 필요합니다.
수동으로 소스 변경사항이 있을때마다 수동으로 배포를 진행할수도 있고 인스턴스단에서 소스를 불러 오는 방식 등 다양한 방법이 있습니다. 이 중 대표적인 방법으로 GitSync와 ArgoCD 를 활용한 방식을 비교해보겠습니다.
1. GitSync
GitSync는 Kubernetes 내에서 특정 소스의 변경 사항을 주기적으로 동기화하는 방식입니다.
1) Pod에서 주기적으로 소스 저장소의 변경사항을 감지합니다 (1m, 3m..설정된 간격)
2) 변경 사항이 감지되면 이를 애플리케이션에 적용합니다.
3) 필요한 Pod에 GitSync 사이드카 컨테이너를 추가하여 동기화할 수 있습니다.
가벼운 방식 워커 파드에서 이를 동기화 필요한 파드에만 붙이면 된다?
use Case
워커 파드에서 단순히 Git 기반 형상 관리를 적용하고 싶은 경우
별도 배포 전략이 필요하지 않고 Git 저장소 상태를 클러스터에 자동 반영하는 것이 목표인 경우
Cons
1. GitSync가 최신 소스코드를 정상적으로 반영하지 않는 경우
코드 변경 후 작업을 수행했을 때 워커 파드에서 예상한대로 처리하지 않은 상황이 있었습니다. 파드 내부의 최신 소스코드 까지 조회했을때 제대로 반영되지 않았다는 것으로 확인했습니다. 소스를 연동할 파드 내부에 gitsync를 명시하고 배포하더라도 이처럼 제대로 반영되었는지 따로 접근하여 확인해야하는 불편이 있습니다.
2. 배포 자동화 별도 구현 필요
GitSync는 단순히 Git의 변경 사항을 감지하고 파드 내부 디렉토리에 연동하는 역할을 압니다. (git fetch와 같이..)
하지만 애플리케이션 배포까지 자동화해주지는 않기 때문에 별도 배포 자동화 툴(git-action, jenkins emd..)추가해야합니다.
2. ArgoCD
ArgoCD는 Git 저장소와 Kubernetes 클러스터 간의 상태를 자동으로 동기화하는 CD 툴입니다.
1) Git 저장소를 애플리케이션 소스로 설정
2) 배포까지 지원
3) 웹 UI 대시보드를 통해 모니터링 및 롤백 간편화
3) 고급 배포 전략 지원 - Canary, Blue-Green 배포 지원
use Case
운영중인 애플리케이션을 실시간으로 모니터링하고 관리하고 싶은 경우
여러 팀이 Kubernetes 환경을 공유하는 경우
Cons
1. 별도의 ArgoCD 인스턴스 운영 필요
별도의 ArgoCD 서버, 컨트롤러를 배포해둬야합니다. 따라서 gitSync 방식보다 클러스터에 추가적인 리소스가 필요할 수 있습니다.
2. 초기 학습비용
+) ArgoCD 실습
https://wlsdn3004.tistory.com/37 내용으로 실습한 예시입니다.
1. ArgoCD 초기 설정 - kubernetes 환경에서 ArgoCD 배포
2. 포트 포워드 후 ArgoCD를 통해 배포할 레포 연결 및 앱 배포
3. 파일 변경사항 반영 확인
참고: https://argo-cd.readthedocs.io/en/stable/https://argo-cd.readthedocs.io/en/stable/getting_started/
3. GitSync vs ArgoCD 비교
4. 결론
- GitSync는 단순한 형상 관리에 적합하지만 배포 자동화 및 환경 변수 변경 관리에는 한계가 있습니다
- ArgoCD는 강력한 배포 및 관리 기능을 제공하지만 별도의 인프라 운영이 필요합니다.
GitSync와 ArgoCD는 Kubernetes 환경에서 GitOps 방식의 배포 및 형상관리를 자동화하는 도구입니다. 그러나 기능적인 차이가 있기 때문에 운영 방식과 배포 전략에 따라 적절한 방식을 선택해야합니다.