현대 Kubernetes 환경에서는 Application 배포를 자동화하는 것뿐만 아니라 Infrastructure 상태 자체를 코드처럼 관리하는 방식이 중요해지고 있습니다.
기존 CI/CD 방식에서는 Pipeline이 Kubernetes Cluster에 직접 명령을 실행하는 구조가 일반적이었습니다.
기존 방식:
Developer
↓
Git Push
↓
CI Pipeline 실행
↓
kubectl apply
↓
Kubernetes 배포
하지만 대규모 환경에서는 여러 Cluster와 Application을 관리해야 하므로 새로운 운영 방식이 필요합니다.
이를 해결하기 위해 등장한 방식이 GitOps입니다.
GitOps는 Git Repository를 Kubernetes 운영 상태의 기준(Source of Truth)으로 사용하고, Cluster가 자동으로 원하는 상태를 유지하도록 만드는 운영 방식입니다.
대표적인 GitOps 도구가 Argo CD입니다.
| 구성 요소 | 역할 |
|---|---|
| Git Repository | 운영 상태 저장 |
| Argo CD | 자동 Sync 관리 |
| Kubernetes | 실행 환경 |
| Manifest | 배포 정의 |
| Controller | 상태 비교 및 조정 |
GitOps 구조를 이해하면 Kubernetes 환경에서 안정적인 자동 배포와 Infrastructure 운영 자동화를 구축할 수 있습니다.
Kubernetes GitOps란?
GitOps는 Git을 중심으로 Kubernetes Infrastructure와 Application 배포 상태를 관리하는 방식입니다.
핵심 원칙:
- Git이 Source of Truth
- 선언적 설정 관리
- 자동 동기화
- 변경 이력 추적
예:
원하는 상태:
Application Replica 5개
↓
Git Repository 저장
↓
Argo CD 확인
↓
Kubernetes Cluster 반영
운영자가 직접 명령하지 않아도 Cluster 상태가 유지됩니다.
Kubernetes GitOps가 필요한 이유
대규모 Kubernetes 환경에서는 다음 문제가 발생합니다.
수동 배포 문제
kubectl 명령 직접 실행
↓
누가 변경했는지 추적 어려움
↓
환경 차이 발생
GitOps는 모든 변경 사항을 Git 기록으로 관리합니다.
여러 Cluster 관리
Production
Staging
Development
여러 환경을 운영하면 동일한 설정 관리가 필요합니다.
GitOps는 환경별 Manifest를 체계적으로 관리할 수 있습니다.
Kubernetes GitOps Architecture
전체 구조:
Developer
↓
Git Repository
↓
Argo CD
↓
Kubernetes API Server
↓
Cluster Resource
Argo CD가 Git 상태와 Kubernetes 상태를 비교합니다.
Argo CD란?
Argo CD는 Kubernetes 전용 GitOps Continuous Delivery 도구입니다.
주요 기능:
- Git 기반 배포
- 자동 Sync
- 상태 비교
- Rollback
- Multi Cluster 관리
Kubernetes 환경에서 가장 많이 사용하는 GitOps 도구 중 하나입니다.
Argo CD 동작 구조
구조:
Git Repository
↓
Argo CD Controller
↓
Compare Desired State
↓
Sync
↓
Kubernetes Resource
Git에 정의된 상태와 실제 Cluster 상태를 지속적으로 비교합니다.
Kubernetes Declarative Configuration
GitOps의 핵심은 선언적 관리입니다.
명령형 방식:
“Pod를 생성해라”
↓
kubectl 실행
선언적 방식:
“이 상태가 되어야 한다”
↓
Controller가 상태 유지
Kubernetes 자체가 선언적 시스템이기 때문에 GitOps와 잘 맞습니다.
Argo CD Application 구조
Argo CD에서는 Application이라는 Resource를 사용합니다.
관리:
- Repository 위치
- Deployment 경로
- Target Cluster
- Namespace
예:
Application 정의
↓
Git 연결
↓
자동 배포
Application 단위로 관리합니다.
Argo CD Sync 방식
Sync 방식:
Manual Sync
운영자가 확인 후 배포
장점:
- 안전한 Production 배포
Automatic Sync
Git 변경 감지
↓
자동 배포
빠른 Release 환경에 적합합니다.
Kubernetes GitOps와 Helm 연동
GitOps 환경에서는 Helm Chart도 많이 사용합니다.
구조:
Git Repository
↓
Helm Chart
↓
Argo CD
↓
Kubernetes Deploy
Application Package와 배포 자동화를 결합합니다.
Kubernetes GitOps와 Kustomize
Kustomize는 Kubernetes YAML Overlay 관리 도구입니다.
예:
Base 설정
↓
Development Overlay
↓
Production Overlay
환경별 차이를 관리할 수 있습니다.
Argo CD Rollback
GitOps에서는 Git Commit 자체가 Version History입니다.
문제 발생:
잘못된 Commit
↓
이전 Commit Revert
↓
Argo CD Sync
↓
이전 상태 복구
배포 이력 관리가 쉽습니다.
Kubernetes GitOps Security
보안 관리:
- Repository 접근 제어
- Secret 관리
- RBAC 적용
- Image 검증
- Audit Log
GitOps 환경에서도 보안 설정이 중요합니다.
Kubernetes GitOps 장애 분석
Argo CD 문제 발생 시 확인합니다.
Argo CD 상태:
kubectl get pods -n argocd
Application 확인:
argocd app list
Sync 상태:
argocd app get app-name
확인:
- Repository 연결
- Manifest 오류
- 권한 문제
- Sync 실패
Kubernetes GitOps 운영 전략
Production 환경:
Git Repository 구성
↓
Branch 전략 설정
↓
Argo CD 연결
↓
자동 Sync 정책 설정
↓
Monitoring 연결
↓
Rollback 테스트
안정적인 운영 Pipeline을 구축합니다.
Kubernetes GitOps 장점
| 장점 | 설명 |
|---|---|
| 변경 추적 | Git History 관리 |
| 자동 배포 | Sync 자동화 |
| 복구 용이 | 이전 상태 복원 |
| 운영 표준화 | 환경 관리 개선 |
GitOps는 Kubernetes 운영 자동화의 핵심 방식입니다.
자주 묻는 질문
GitOps와 CI/CD는 같은 개념인가요?
아닙니다.
CI/CD는 전체 배포 자동화 과정이고 GitOps는 Git 중심으로 운영 상태를 관리하는 방식입니다.
Argo CD는 CI 도구인가요?
아닙니다.
Argo CD는 Continuous Delivery와 Deployment Sync를 담당합니다.
GitOps는 Kubernetes에서만 사용하나요?
Kubernetes 환경에서 가장 많이 사용되지만 선언적 Infrastructure 관리 방식으로 다른 환경에서도 활용됩니다.
마무리
Kubernetes GitOps는 Git Repository를 기준으로 Application과 Infrastructure 상태를 관리하고 Argo CD를 통해 자동으로 Cluster 상태를 유지하는 현대적인 운영 방식입니다.
| 구성 요소 | 역할 |
|---|---|
| Git | Source of Truth |
| Argo CD | 자동 Sync |
| Manifest | 배포 정의 |
| Kubernetes | 실행 환경 |
| Controller | 상태 조정 |
GitOps 구조를 이해하면 Kubernetes 환경에서 안정적인 자동 배포, 변경 추적, Multi Cluster 운영 체계를 구축할 수 있습니다.