ApplicationSets

지원 버전: ArgoCD v2.9+ 마지막 업데이트: 2026년 2월 22일

목차

ApplicationSet 개요

ApplicationSet은 템플릿을 사용하여 여러 ArgoCD Application을 자동으로 생성하는 컨트롤러입니다. 대규모 배포, 멀티 클러스터 환경, 동적 환경 관리에 유용합니다.

spinner

기본 구조

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: my-applicationset
  namespace: argocd
spec:
  # 생성기: Application 생성에 사용할 데이터 소스
  generators:
    - list:
        elements:
          - name: dev
            namespace: dev
          - name: staging
            namespace: staging

  # 템플릿: 생성될 Application의 템플릿
  template:
    metadata:
      name: 'myapp-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/myorg/myapp.git
        targetRevision: main
        path: 'environments/{{name}}'
      destination:
        server: https://kubernetes.default.svc
        namespace: '{{namespace}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

  # 동기화 정책
  syncPolicy:
    preserveResourcesOnDeletion: false  # ApplicationSet 삭제 시 Application도 삭제

  # 전략
  strategy:
    type: RollingSync
    rollingSync:
      steps:
        - matchExpressions:
            - key: env
              operator: In
              values:
                - dev
        - matchExpressions:
            - key: env
              operator: In
              values:
                - staging

생성기 (Generators)

ApplicationSet은 9가지 생성기를 지원합니다.

1. List Generator

정적 목록에서 Application을 생성합니다:

2. Cluster Generator

ArgoCD에 등록된 클러스터에서 Application을 생성합니다:

클러스터 Secret에 레이블 추가:

3. Git Generator - Directory

Git 저장소의 디렉토리 구조에서 Application을 생성합니다:

저장소 구조:

4. Git Generator - File

Git 저장소의 JSON/YAML 파일에서 Application을 생성합니다:

config.json 파일 예시:

5. Matrix Generator

두 생성기의 조합을 생성합니다 (카테시안 곱):

결과 예시 (3 클러스터 × 3 앱 = 9 Application):

  • prod-ap-northeast-2-frontend

  • prod-ap-northeast-2-backend

  • prod-ap-northeast-2-api-gateway

  • prod-us-west-2-frontend

  • prod-us-west-2-backend

  • prod-us-west-2-api-gateway

  • ...

6. Merge Generator

여러 생성기의 출력을 병합합니다:

7. SCM Provider Generator

GitHub, GitLab 등의 조직/그룹을 스캔하여 Application을 생성합니다:

8. Pull Request Generator

Pull Request를 기반으로 Preview 환경을 생성합니다:

PR이 병합/닫히면 Application이 자동 삭제됩니다.

9. Cluster Decision Resource Generator

외부 리소스(예: Placement)를 기반으로 클러스터를 선택합니다:

10. Plugin Generator

외부 서비스를 호출하여 Application을 생성합니다:

Plugin ConfigMap:

Go 템플릿

ApplicationSet은 Go 템플릿을 지원합니다:

Go 템플릿 함수

Progressive Syncs

Progressive Syncs를 사용하면 Application을 단계적으로 롤아웃할 수 있습니다:

Progressive Sync 흐름

spinner

멀티 클러스터 배포 패턴

패턴 1: 환경별 배포

패턴 2: 리전별 배포

패턴 3: 테넌트별 배포

템플릿 오버라이드

생성기별 템플릿 오버라이드

템플릿 병합 동작

spinner

다음 단계

  1. 트래픽 관리: Argo Rollouts를 통한 블루/그린, 카나리 배포를 구현하세요.

  2. 프로젝트와 RBAC: ApplicationSet과 함께 프로젝트를 사용하여 접근을 제어하세요.

  3. 모범 사례: ApplicationSet 사용 시 권장 패턴을 학습하세요.

참고 자료

퀴즈

이 장에서 배운 내용을 테스트하려면 ApplicationSets 퀴즈를 풀어보세요.

마지막 업데이트