Skip to content

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
  • 하위 앱 예시 (app1.yaml):
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 변경사항 자동 동기화 및 배포.
  • 확장성: 새로운 앱 추가 시 하위 앱 정의만 추가하면 됨.
  • 자율 복구: selfHealprune 옵션으로 상태 자동 복구.

Helm 및 Terraform과의 통합

  • 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 환경에서 애플리케이션과 인프라를 선언적으로 효율 관리하는 강력한 방법임.
  • 실제 적용 시 팀 환경과 보안 정책에 맞춰 적절한 방식을 선택하는 것이 중요함.