Argo CD 애플리케이션 관리
1️⃣ Application 객체 생성 및 설정
Argo CD에서 애플리케이션은 Kubernetes 클러스터에 배포할 애플리케이션을 나타내는 기본적인 단위입니다. Application
객체는 Git 저장소에서 Kubernetes 리소스를 가져와 자동으로 배포합니다.
1. Application 객체란?
Application 객체는 GitOps에서 애플리케이션을 정의하고, Git 리포지토리와 클러스터 간의 동기화를 관리하는 데 사용됩니다. 이를 통해 Argo CD는 애플리케이션의 상태를 Git과 동기화합니다.
2. Application 객체 생성 예시
Application 객체를 생성하기 위해서는 먼저 Git 리포지토리와 Kubernetes 클러스터를 정의해야 합니다. 아래는 application.yaml
을 사용한 예시입니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-app.git
targetRevision: HEAD
path: manifests
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이 YAML 파일은 GitHub 리포지토리의 manifests
폴더에서 Kubernetes 리소스를 가져와 default
네임스페이스에 배포합니다. syncPolicy
는 자동 동기화 및 자원 정리를 활성화합니다.
2️⃣ ApplicationSet을 활용한 대규모 애플리케이션 배포
ApplicationSet
은 여러 개의 애플리케이션을 관리할 수 있는 기능을 제공합니다. 이를 사용하면 대규모 애플리케이션 환경에서 여러 개의 Application
객체를 동적으로 생성하고 관리할 수 있습니다.
1. ApplicationSet 개요
ApplicationSet은 여러 Git 리포지토리 또는 클러스터에 걸쳐 동일한 애플리케이션을 배포하는 데 유용합니다. 예를 들어, 여러 환경(개발, 스테이징, 프로덕션)에서 동일한 애플리케이션을 자동으로 배포할 수 있습니다.
2. ApplicationSet 예시
아래는 ApplicationSet
을 사용하여 여러 애플리케이션을 배포하는 예시입니다. git
소스를 기반으로 애플리케이션을 배포합니다.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-app-set
spec:
generators:
- git:
repoURL: https://github.com/my-org/my-app.git
revision: HEAD
directories:
- path: apps/*
template:
metadata:
name: "{{path.basename}}"
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-app.git
targetRevision: HEAD
path: "{{path}}"
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이 예시에서는 git
저장소의 여러 디렉토리 내 애플리케이션들을 동적으로 관리합니다.
3️⃣ Helm Chart 기반 애플리케이션 배포
Helm Chart는 Kubernetes 애플리케이션의 패키징 방식으로, Argo CD는 Helm Chart를 사용하여 애플리케이션을 배포할 수 있습니다. Helm Chart는 애플리케이션의 리소스를 템플릿화하여 쉽게 배포하고 관리할 수 있게 도와줍니다.
1. Helm Chart로 애플리케이션 배포
Helm Chart를 사용하여 Argo CD에서 애플리케이션을 배포하려면, 먼저 Helm Chart를 Git 리포지토리 또는 Helm 레지스트리에 저장해야 합니다.
2. Helm Chart 배포 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-helm-app
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-helm-chart.git
targetRevision: HEAD
chart: my-chart
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이 예시는 Git 저장소에서 my-helm-chart
Helm Chart를 가져와 default
네임스페이스에 배포합니다.
4️⃣ Kustomize를 이용한 배포 관리
Kustomize는 Kubernetes 리소스의 오버레이 및 패치 관리 도구로, Argo CD는 Kustomize를 지원하여 다양한 환경에 맞는 배포를 관리할 수 있습니다.
1. Kustomize란?
Kustomize는 기본 리소스를 변형하여 다른 환경에 맞게 설정할 수 있는 도구입니다. 예를 들어, 개발, 테스트, 프로덕션 환경에서 동일한 애플리케이션을 배포할 수 있습니다.
2. Kustomize 배포 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-kustomize-app
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-kustomize-app.git
targetRevision: HEAD
path: overlays/prod
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이 예시는 Git 저장소에서 prod
오버레이를 사용하여 프로덕션 환경에 맞게 배포합니다.
5️⃣ Manifest 파일(YAML) 직접 적용하기
Argo CD는 Helm, Kustomize 외에도 Kubernetes 리소스를 직접 YAML 파일로 관리할 수 있습니다. 이 방법을 사용하면 애플리케이션을 더 세밀하게 제어할 수 있습니다.
1. Manifest 파일 직접 적용 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-manifest-app
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-manifest-app.git
targetRevision: HEAD
path: manifests
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이 예시는 Git 저장소에서 Kubernetes 리소스가 정의된 manifests
폴더를 직접 가져와 배포합니다.
6️⃣ Argo CD를 통한 마이크로서비스 배포 및 관리
Argo CD는 마이크로서비스 아키텍처를 관리하는 데 매우 유용한 도구입니다. 여러 개의 마이크로서비스를 각기 다른 Git 리포지토리 또는 Helm Chart로 관리하며, 각 서비스의 배포를 Argo CD로 자동화할 수 있습니다.
1. 마이크로서비스 배포 예시
마이크로서비스 애플리케이션을 여러 개의 Application
객체로 관리하며, 각각 다른 Git 리포지토리에서 소스를 가져올 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: service1
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/service1.git
targetRevision: HEAD
path: manifests
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
이와 같은 방식으로 각 마이크로서비스를 별도로 관리할 수 있습니다. Argo CD는 여러 서비스의 배포 및 상태를 한눈에 관리할 수 있는 기능을 제공합니다.