Featured image of post ArgoCD: App of Apps 패턴 사용하기

ArgoCD: App of Apps 패턴 사용하기

App of Apps 패턴을 통해 Application CRD들도 GitOps로 관리하자

🪆 App of Apps 패턴이란

ArgoCD에는 Application이라는 배포 단위를 가진다.
그러나, Application들 자체는 GitOps로 관리되지 못한다.
그래서, 이 문제에 대한 해결 방법으로, Application들을 감시하는 Root Application을 만들어서, 단일 배포 시작점으로 만든 뒤, 하위 Application들을 GitOps로 관리하는 App of Apps라는 패턴을 사용할 수 있다.

Apps without Root App Apps with Root App

이후에는 Root App을 제외하고는 모두 선언형으로 관리되어, Application CRD의 명령형 관리영역을 단일 지점으로 줄일 수 있다.

🍳 Root App 예시

아래의 디렉토리 구조를 가정한다:

1
2
3
4
5
6
7
8
9
.
├── apps              # 서비스할 애플리케이션들의 yaml
├── argocd
│   ├── apps          # apps/ 디렉토리의 Application들
│   ├── infra         # infra/ 디렉토리의 Application들
│   └── root-app.yaml # Root Application
└── infra             # Infra 레벨의 yaml
    ├── network
    └── storage

root-app.yaml에는 아래와 같이 작성해주면 된다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Root-App.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: root-app
  namespace: argocd
spec:
  project: default
  sources:
    # Apps를 위해서
    - repoURL: <your-git-repo>
	  targetRevision: HEAD
      path: argocd/apps
	    directory:
	      recurse: true
    # Infra를 위해서
    - repoURL: <your-git-repo>
	  targetRevision: HEAD
      path: argocd/infra
	    directory:
	      recurse: true
  destination:
    server: https://kubernetes.default.svc  # in-cluster.
    namespace: argocd
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

이제, 적용해준다.

1
kubectl apply -f argocd/root-app.yaml

이제, 클러스터를 옮겨도 Root App을 통해서 한 번에 여러 애플리케션들을 연쇄적으로 업데이트 할 수 있다.

ArgoCD Root App

Hugo로 만듦
JimmyStack 테마 사용 중