GitOps와 Argo CD를 활용한 선언적 인프라 관리 가이드
GitOps의 핵심 개념과 Argo CD를 사용하여 Kubernetes 환경에서 선언적 인프라를 관리하는 방법을 학습합니다. CI/CD 파이프라인, 배포 자동화, 롤백 전략을 포함합니다.
GitOps와 Argo CD를 활용한 선언적 인프라 관리
1. GitOps란 무엇인가?
GitOps는 Git 저장소를 **단일 진실 공급원(Single Source of Truth)**으로 사용하여 선언적 인프라와 애플리케이션을 관리하는 운영 방식입니다. 모든 인프라 및 애플리케이션 상태는 Git에 정의되며, Git에서 원하는 상태로 변경하면 자동화된 프로세스를 통해 실제 환경에 반영됩니다.
주요 원칙:
- 선언적: 시스템의 최종 상태를 선언적으로 정의합니다.
- 버전 관리: Git을 사용하여 모든 구성을 버전 관리하고 추적합니다.
- 자동화: Git 리포지토리 변경 시 자동으로 적용합니다.
- 지속적인 동기화: 에이전트가 실제 환경과 Git의 원하는 상태를 지속적으로 동기화합니다.
2. 왜 GitOps인가?
- 일관성 및 예측 가능성: 모든 변경 사항이 Git을 통해 관리되어 일관성과 예측 가능성을 높입니다.
- 빠른 롤백: 문제가 발생했을 때 Git의 이전 커밋으로 쉽게 롤백할 수 있습니다.
- 향상된 보안: Git의 접근 제어 및 감사 기능을 활용하여 보안을 강화합니다.
- 개발자 경험 향상: 개발자가 익숙한 Git 워크플로우를 사용하여 인프라를 관리할 수 있습니다.
3. Argo CD란?
Argo CD는 Kubernetes 네이티브 지속적 배포(CD) 도구로, GitOps 원칙을 구현하는 데 널리 사용됩니다. Git 리포지토리에 정의된 애플리케이션 상태를 Kubernetes 클러스터의 실제 상태와 자동으로 동기화합니다.
주요 기능:
- Git 기반 배포: Helm, Kustomize, Jsonnet 등 다양한 매니페스트 형식을 지원합니다.
- 자동 동기화: Git 변경 시 자동으로 클러스터에 배포합니다.
- 시각적 비교: Git의 원하는 상태와 클러스터의 실제 상태를 시각적으로 비교하여 차이점을 명확히 보여줍니다.
- 롤백 기능: 이전 버전으로 쉽게 롤백할 수 있습니다.
- Helm 및 Kustomize 통합: 복잡한 애플리케이션 구성을 쉽게 관리할 수 있습니다.
4. Argo CD 설치 및 기본 사용법
4.1. Argo CD 설치 (Kubernetes 클러스터 필요)
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
4.2. Argo CD 초기 비밀번호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
4.3. Argo CD UI 접근 (포트 포워딩)
kubectl port-forward svc/argocd-server -n argocd 8080:443
웹 브라우저에서 https://localhost:8080으로 접속하여 초기 관리자 계정(admin)과 위에서 확인한 비밀번호로 로그인합니다.
4.4. 애플리케이션 생성 (Git 리포지토리와 연동)
- Argo CD UI 또는 CLI를 사용하여 새 애플리케이션을 생성합니다.
- Application Name: 애플리케이션의 고유 이름
- Project: 애플리케이션이 속할 Argo CD 프로젝트
- Sync Policy: 자동 동기화 여부 (Manual 또는 Automatic)
- Source: Git 리포지토리 URL, 브랜치, 경로 (Kubernetes 매니페스트 파일이 있는 위치)
- Destination: 배포할 Kubernetes 클러스터 URL 및 네임스페이스
UI에서 "+ New App" 버튼을 클릭하고 필요한 정보를 입력합니다. 예를 들어, Git 리포지토리에 k8s/deployment.yaml 파일이 있고 default 네임스페이스에 배포하려면 해당 정보를 설정합니다.
4.5. 동기화 및 상태 확인
애플리케이션이 생성되면 Argo CD는 Git 리포지토리와 클러스터 상태를 비교합니다. "Sync" 버튼을 클릭하거나 자동 동기화 설정 시 Git 변경 사항이 감지되면 자동으로 동기화가 진행됩니다. UI에서 동기화 상태, 배포된 리소스, 로그 등을 확인할 수 있습니다.
5. 배포, 롤백, 헬스체크
- 배포: Git 리포지토리에 Kubernetes 매니페스트를 업데이트하고 커밋하면, Argo CD가 이를 감지하여 자동으로 클러스터에 배포합니다 (자동 동기화 설정 시).
- 롤백: Argo CD UI의 "History" 탭에서 이전 동기화 기록을 선택하고 "Rollback"을 클릭하여 특정 버전으로 쉽게 롤백할 수 있습니다.
- 헬스체크: Argo CD는 Kubernetes의 Health 상태 프로브(livenessProbe, readinessProbe)를 기반으로 각 리소스의 상태를 모니터링합니다. UI에서 헬스 상태를 시각적으로 확인할 수 있으며, 비정상 상태 감지 시 알림을 설정할 수 있습니다.
6. 고급 활용 및 주의사항
- Git 브랜치 전략: 개발, 스테이징, 운영 환경별로 Git 브랜치를 분리하여 관리하는 것이 일반적입니다.
- Kustomize 및 Helm: 복잡한 애플리케이션 구성 관리를 위해 Kustomize나 Helm 차트를 Git 리포지토리에 포함하여 사용하는 것이 좋습니다.
- 보안: Git 리포지토리 접근 권한을 엄격하게 관리하고, Argo CD와 Kubernetes 클러스터 간의 통신은 안전하게 설정합니다.
- 알림: Slack, Email 등 알림 통합을 설정하여 배포 성공/실패 및 상태 변경을 즉시 인지합니다.
- IaC 도구 연동: Terraform과 같은 IaC 도구로 초기 클러스터 인프라를 프로비저닝한 후, Argo CD로 애플리케이션을 배포하는 방식으로 통합할 수 있습니다.
GitOps와 Argo CD를 통해 인프라 관리의 자동화, 일관성, 신뢰성을 크게 향상시킬 수 있습니다.