Argo CD 고급 활용 사례
1️⃣ Multi-Tenant Argo CD 구성
Multi-Tenant Argo CD 구성은 여러 팀이나 부서가 하나의 Argo CD 인스턴스를 공유하여, 각자의 애플리케이션을 독립적으로 관리하는 환경을 제공합니다. 이를 통해 Argo CD를 효율적으로 분리하고, 각 팀의 애플리케이션을 논리적으로 격리할 수 있습니다.
1. Multi-Tenant 아키텍처의 필요성
Multi-Tenant 환경에서 Argo CD를 설정하면, 각 팀이나 프로젝트가 자신만의 리소스를 관리하면서도 중앙 집중식으로 상태를 추적할 수 있습니다. 이를 통해 리소스를 절약하고, 관리의 복잡도를 줄일 수 있습니다.
2. Argo CD의 Namespace 분리
각 팀을 위해 다른 네임스페이스를 사용하여 Argo CD 애플리케이션을 배포합니다. 이를 통해 각 팀의 애플리케이션 상태를 격리하고 관리할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: team-a
spec:
destination:
namespace: team-a-app
server: https://kubernetes.default.svc
source:
repoURL: https://github.com/my-org/my-repo
path: charts/my-app
project: default
3. Argo CD RBAC 설정
Argo CD의 RBAC(Role-Based Access Control)를 활용하여 각 팀이 자신의 애플리케이션만 관리할 수 있도록 권한을 설정합니다. 예를 들어, 특정 팀에만 접근을 허용하는 규칙을 만들 수 있습니다.
2️⃣ Multi-Cluster 배포 전략 (Argo CD + Cluster API)
Argo CD는 여러 클러스터에 걸쳐 애플리케이션을 배포하고 관리할 수 있습니다. 이때 Cluster API
를 사용하여 클러스터를 자동으로 생성하고 관리하는 방법을 적용할 수 있습니다.
1. Cluster API 소개
Cluster API는 Kubernetes 클러스터를 선언적으로 관리할 수 있는 API입니다. 이를 사용하여 새로운 클러스터를 생성하고, 기존 클러스터를 관리할 수 있습니다.
2. Argo CD와 Cluster API 통합
Argo CD를 사용하여 다수의 클러스터에 애플리케이션을 배포하려면, 먼저 Cluster API를 통해 관리되는 클러스터들을 Argo CD에 등록해야 합니다.
argocd cluster add <cluster-name>
3. Multi-Cluster 배포
Argo CD에서 Multi-Cluster 배포를 설정하면, 다양한 클러스터에 애플리케이션을 자동으로 배포하고 동기화할 수 있습니다.
spec:
destination:
server: https://cluster-api-cluster-1
namespace: default
3️⃣ Argo Rollouts와 함께 Canary & Blue-Green 배포
Argo Rollouts는 Canary 배포와 Blue-Green 배포와 같은 고급 배포 전략을 지원하는 Argo CD의 확장입니다. 이를 통해 롤링 업데이트를 좀 더 세밀하게 제어할 수 있습니다.
1. Argo Rollouts 소개
Argo Rollouts는 Argo CD의 확장으로, Canary와 Blue-Green 배포 전략을 쉽게 설정할 수 있습니다. 이는 점진적인 배포를 지원하여, 새로운 버전의 애플리케이션을 안전하게 배포하고 롤백할 수 있게 합니다.
2. Canary 배포 설정
Canary 배포는 새로운 버전을 소수의 사용자에게만 배포하여, 문제가 없는지 확인한 후 전체 시스템에 배포하는 방법입니다. 이를 위해 아래와 같은 Rollout 리소스를 정의합니다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 5
strategy:
canary:
steps:
- setWeight: 20
- pause: {}
- setWeight: 100
3. Blue-Green 배포 설정
Blue-Green 배포는 새로운 버전이 준비되면 트래픽을 완전히 새로운 버전으로 전환하여 배포하는 방법입니다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 5
strategy:
blueGreen:
activeService: my-app-active
previewService: my-app-preview
autoPromotionSeconds: 60
4️⃣ Argo CD + Service Mesh (Istio, Linkerd)
Argo CD와 Service Mesh(예: Istio, Linkerd)를 통합하면, 애플리케이션의 배포와 운영에 있어 보다 고급 기능을 사용할 수 있습니다. Service Mesh는 마이크로서비스 간의 통신을 관리하고, 보안을 강화하며, 트래픽을 제어하는 데 유용합니다.
1. Service Mesh 소개
Service Mesh는 애플리케이션의 서비스 간 통신을 관리하는 시스템입니다. Istio와 Linkerd는 Service Mesh의 대표적인 예입니다. Argo CD와 함께 사용하면 애플리케이션 배포 시 트래픽 제어나 보안 설정 등을 쉽게 할 수 있습니다.
2. Istio와 Argo CD 통합
Istio를 Argo CD와 통합하면, 배포 시 Istio의 트래픽 관리, 보안 정책 등을 함께 적용할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
destination:
server: https://kubernetes.default.svc
namespace: default
source:
repoURL: https://github.com/my-org/my-repo
path: charts/my-app
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
3. Linkerd와 Argo CD 통합
Linkerd와 Argo CD를 통합하면, 보다 경량화된 Service Mesh 환경에서 트래픽 관리, 보안, 모니터링을 설정할 수 있습니다.
5️⃣ Argo CD의 API 활용 및 자동화 (Webhooks, GitOps 자동화 스크립트)
Argo CD는 API를 통해 자동화된 작업을 수행하거나 외부 시스템과 연동할 수 있습니다. Webhooks를 활용하여 Git 이벤트나 외부 시스템의 변경을 트리거로 자동화 작업을 실행할 수 있습니다.
1. Webhooks를 활용한 자동화
Webhooks는 GitHub, GitLab 등에서 변경이 발생했을 때 Argo CD에 알림을 보내는 기능입니다. 이를 활용하여 GitOps 작업을 자동으로 트리거할 수 있습니다.
argocd app sync my-app
2. GitOps 자동화 스크립트 작성
Argo CD API를 사용하여 애플리케이션의 상태를 자동으로 동기화하거나 배포할 수 있는 스크립트를 작성할 수 있습니다.
#!/bin/bash
argocd app sync my-app
argocd app wait my-app --sync
3. 자동화된 파이프라인 설정
CI/CD 파이프라인에서 Argo CD API를 호출하여 배포를 자동화할 수 있습니다. 이를 통해 애플리케이션이 GitHub에서 변경될 때마다 자동으로 배포가 이루어지도록 할 수 있습니다.
name: Deploy to Kubernetes
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to Argo CD
run: |
argocd login my-argocd-server
argocd app sync my-app