argo-cd
TL;DR
- ArgoCD의 App of Apps 패턴은 여러 애플리케이션을 계층적으로 선언적 관리하는 방법임.
- 상위 애플리케이션이 하위 애플리케이션들을 참조해 대규모 환경에서 효율적 관리 가능함.
- Helm, Terraform과 통합해 인프라와 애플리케이션을 함께 관리할 수 있음.
App of Apps 패턴 개요
- 여러 Kubernetes 애플리케이션을 하나의 상위 애플리케이션으로 묶어 관리함.
- 상위 애플리케이션(root-app)이 하위 애플리케이션(app1, app2 등)을 선언적으로 참조함.
- GitOps 방식으로 변경사항을 자동 동기화하고 자율 복구 기능을 제공함.
- 대규모 클러스터 환경에서 관리 복잡도를 크게 줄임.
App of Apps 패턴 구성과 예시
- 디렉토리 구조: 상위 앱과 하위 앱 정의 파일을 분리하여 관리함.
repo-root/
├── argocd/
│ ├── root-app.yaml # 상위 App (App of Apps)
│ ├── app1.yaml # 하위 애플리케이션 1
│ ├── app2.yaml # 하위 애플리케이션 2
│ └── app3.yaml # 하위 애플리케이션 3
├── charts/ # Helm Charts
│ ├── app1/
│ ├── app2/
│ └── app3/
├── manifests/ # Kubernetes manifests
│ ├── app1/
│ ├── app2/
│ └── app3/
└── terraform/ # Terraform 코드
├── environments/
├── modules/
└── backend.tf
- Root App 예시 (
root-app.yaml
):
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-repo/repo-name.git
path: argocd/
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
sourceDirectory:
recurse: true
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app1
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-repo/repo-name.git
path: charts/app1/
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: app1-namespace
syncPolicy:
automated:
prune: true
selfHeal: true
- 하위 앱은 Helm Chart 또는 Kubernetes 매니페스트를 배포하도록 설정 가능.
App of Apps 패턴 장점
- 계층적 관리: 상위 앱에서 전체 앱을 통합 관리하고, 하위 앱은 독립적 설정 유지.
- GitOps 기반: Git 변경사항 자동 동기화 및 배포.
- 확장성: 새로운 앱 추가 시 하위 앱 정의만 추가하면 됨.
- 자율 복구:
selfHeal
과 prune
옵션으로 상태 자동 복구.
- Helm Chart 경로를 하위 앱
source.path
에 지정해 Helm 배포와 연동 가능. - Terraform으로 ArgoCD 설치 및 클러스터 리소스 프로비저닝 가능.
module "argocd" {
source = "terraform-helm/argocd"
version = "x.x.x"
namespace = "argocd"
create_namespace = true
}
마무리
- ArgoCD의 App of Apps 패턴은 복잡한 Kubernetes 환경에서 애플리케이션과 인프라를 선언적으로 효율 관리하는 강력한 방법임.
- 실제 적용 시 팀 환경과 보안 정책에 맞춰 적절한 방식을 선택하는 것이 중요함.