App of Apps 패턴은 사실 원래 있던 구조 였다. 레거시로 거슬러 올라가면 Parrent 모듈에 Sub모듈이 있는 프로젝트가 그랬듯이 요즘 대두되는 App of Apps 패턴도 종속관계를 이용한 배포구성이다. 다만 요즘에는 어플리케이션이 인프라 레벨까지 배포컨트롤이 가능한 컨테이너 Base로 구현되다 보니, 레거시 보다 확장된 범위의 자원을 App of Apps 패턴으로 관리하고 있다.
토스뱅크도 배포 대상의 환경이 Kubernetes로 되어 있어 App of Apps 패턴을 적용하여 관련 리소스를 일괄 배포한다고 한다. (아래 링크 참조)
https://armyost.tistory.com/240
토스뱅크의 쿠버네티스 기반 CI/CD 환경
관련링크 : https://www.youtube.com/watch?v=gF1wfTCDyI8 주요내용 개발 환경 : Testbed, Dev 환경으로 이루어져 있다. Testbed : 아무런 트래픽 없음(형상조합을 위한 환경인듯) Dev : 테스트 트래픽 발생 Live..
armyost.tistory.com
App of Apps 패턴은 특별한 것이 아니며, 이 종속관계를 이용하여 어플리케이션과 관련 어플리케이션 혹은 관련 리소스를 패키지로 배포하자는 개념이다.
사실 용어는 중요하지 않고, 많은 PaaS플랫폼에서 어떤식으로 이 패턴서비스를 제공하느냐 인데, ArgoCD사용자들이 App of Apps 패턴을 보편적으로 사용하고 있는 것으로 보인다.
ArgoCD의 해당 패턴 배포시 Parent App은 다음과 같이 정의한다.
Root App
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root-app
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: default
name: in-cluster
project: default
source:
path: apps
repoURL: https://github.com/argoproj/argocd-example-apps
targetRevision: HEAD
Line 14에서 path : apps를 보면 Application을 정의하고 있는 RootApp의 k8s manifest를 받기위한 Source Repository를 정의하고 있다.
Chile App
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: helm-guestbook
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: helm-guestbook
name: dev-cluster
project: default
source:
path: helm-guestbook
repoURL: https://github.com/argoproj/argocd-example-apps
targetRevision: HEAD
Line 14에서 path : helm-guestbook 을 통해 Chile App 배포에 필요한 패키지를 helm Chart를 통해 배포코자한다. 이 부분은 helm이 꼭아니더라도 kustomize나 k8s manifest를 그냥 나열하는 방식으로도 대체할 수 있다.
중요한점은 여기서부터 배포 대상환경이 나뉜다는 점이다. dev 클러스터가 Line11에 지명된것을 볼수 있다. 즉 Root App은 in-Cluster라는 ArgoCD가 설치된 클러스터에 설치되고 Chile는 DevOps 프로세스상에 필요한 환경에다가 붓는것이다.
숙련된 사용자들은 App of Apps 패턴 정의시 다음과 같은 기준을 권장한다.
1) Create a project for each app bundle
2) Create environment-specific app bundles and projects
3) Keep Application definitions in a separate repo
'PaaS > CI CD' 카테고리의 다른 글
Drone CI 란 (0) | 2022.06.21 |
---|---|
Jenkins 다른서버로 이관하기 (0) | 2022.06.07 |
(Gitlab) Gitlab yum install 방법, 관리자 비밀번호 초기화 (0) | 2022.03.29 |
(Kubernetes, Jenkins) Docker이미지를 kubernetes 밖에서 빌드할 것인가 kubernetes Jenkins Agent에서 빌드할 것인가 (0) | 2022.02.21 |
(Gitlab) Gitlab 도메인 설정 (0) | 2022.02.15 |