App of Apps은 ArgoCD에서 제안하는 ArgoCD Application 관리 방식이다. 여러개의 클러스터를 가지고 있으며 클러스터에 많은 Application을 설치하려는 운영자를 대상으로 소개하는 패턴이다.
개념
ArgoCD Application은 Git에 있는 매니페스트를 주기적으로 확인하여 변경사항이 발생한다면 지정된 쿠버네티스 클러스터에 반영한다.
Git에 저장된 매니페스트는 쿠버네티스 리소스를 나타내는 yaml 파일이며, 여기에는 Deployment, Service, CronJob 등 클러스터에 지원하는 쿠버네티스 API는 모두 될 수 있다. 마찬가지로 ArgoCD Application도 커스텀 리소스이기 때문에 쿠버네티스 API 중에 하나이다.
이 특성을 잘 이해한다면 ArgoCD Application 매니페스트를 Git에 저장해둔 다음, Application이 저장된 레포지토리 경로를 주기적으로 확인하여 클러스터에 저장하는 ArgoCD Application을 만들면 모든 ArgoCD Application이 반영되어 자동으로 Git에 저장된 Application이 바라보고 있는 매니페스트들도 반영이 된다. 이렇게 Application을 관리하는 방식을 App-of-apps 라고 한다.
여기서 Application은 두 가지로 나뉜다.
- Root Application: 여러가지 ArgoCD Application을 동기화시키는 Application
- Child Applicatoin: 매니페스트를 동기화시키는 Application
구성
App-of-Apps를 구성하는 방법은 간단하다.
- 관리할 Application을 모두 Git에 올린다.
- Root Application을 생성한다.
1. 관리할 Application을 모두 Git에 올리기
아래 그림과 같이 ArgoCD Application을 모두 Git에 올린다. 특정 디렉터리 하위로 올리는 것이 좋다.
2. Root Application 생성하기
그 다음에는 ArgoCD 웹 화면에서 Root Application을 다음과 같이 생성하면 된다. 일단 현재 상태에서는 ArgoCD Application은 없다.
NEW APP을 클릭한 후 다음과 같이 Root Application을 생성한다.
또는 EDIT AS YAML 을 클릭하여 아래 yaml을 복사해도 된다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd-root-application
spec:
destination:
name: ''
namespace: ''
server: https://kubernetes.default.svc
source:
path: argocd/applications # Application이 저장된 경로
repoURL: https://github.com/beer-one/k8s-manifests # Application이 저장된 매니페스트 파일
targetRevision: HEAD
directory:
recurse: true
sources: []
project: ''
syncPolicy:
automated:
prune: false
selfHeal: true
생성하자마자 Child Application이 즉각 반영되어 배포가 진행된다.
App-Of-Apps 장점
실제로 App-Of-Apps 패턴을 사용해보면서 느낀 장점은 여러가지가 있다.
- 보다 완벽한 GitOps: Child Application을 무조건 Git에 올려서 사용해야하기 때문에 GitOps가 강제된다. 장점이라고 하기엔 뭐하지만 GitOps를 지향하는 입장에서 GitOps를 강제하게 관리하는 것은 좋은 것 같다.
- Application 추가/삭제 변경 추적 용이: Git으로 Application 관리를 강제하기 떄문에 ArgoCD를 통해서만 리소스 관리하도록 정책만 잘 잡는다면 쿠버네티스에 배포되는 모든 애플리케이션의 추가/삭제를 추적할 수 있다. (Git의 감사 기능을 활용, GitOps의 장점을 고스란히 가져갈 수 있다.)
- 클러스터 복제가 쉽다: 복제할 클러스터에 ArgoCD를 설치한 다음 Root Application 하나만 추가하면 기존 클러스터의 모든 리소스가 즉각 반영된다. 하지만 이렇게 할 경우에는 클러스터마다 ArgoCD가 내장되어 있어서 ArgoCD 관리에 불편함이 있다. 이러한 불편한 점은 하나의 ArgoCD 로 멀티 클러스터를 관리하는 방법과 ApplicationSet을 사용하면 해소된다.
'DevOps > CI.CD' 카테고리의 다른 글
Jenkins pipeline 소개 및 Java 애플리케이션 CI/CD pipeline 작성 (2) | 2024.02.04 |
---|---|
Jenkins 소개 및 Kubernetes에 설치 (0) | 2023.11.07 |
CI / CD란 무엇일까? (0) | 2023.11.04 |
ArgoCD 아키텍처 이해하기 및 여러가지 옵션 (3) | 2023.10.14 |
ArgoCD를 사용하여 Helm chart 배포하기 (1) | 2023.10.13 |
댓글