Kubernetes Tools/ArgoCD

[Ep.9] [Argo CD 운영 #4] Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ •μ˜ν•˜λŠ” YAML ꡬ쑰 뢄석

ygtoken 2025. 3. 17. 13:05
728x90

πŸ”Ή Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ •μ˜ν•˜λŠ” 방법

Argo CDλŠ” **Application CRD(Custom Resource Definition)**λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„ μ–Έμ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
즉, YAML λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό μž‘μ„±ν•˜μ—¬ Git μ €μž₯μ†Œμ™€ Kubernetes ν΄λŸ¬μŠ€ν„° κ°„μ˜ 동기화λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이번 κΈ€μ—μ„œλŠ” Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ •μ˜ν•˜λŠ” YAML의 μ£Όμš” ꡬ쑰와 μ„€μ • μ˜΅μ…˜μ„ λΆ„μ„ν•˜κ³ ,
각 ν•­λͺ©μ΄ μ–΄λ–€ 역할을 μˆ˜ν–‰ν•˜λŠ”μ§€ μƒμ„Ένžˆ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.


πŸ”Ή Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜ YAML의 μ£Όμš” ꡬ성 μš”μ†Œ

Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ •μ˜ν•˜λŠ” YAML은 λ‹€μŒκ³Ό 같은 μ£Όμš” μ„Ήμ…˜μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

1️⃣ 메타데이터(metadata) β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이름 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ„€μ •
2️⃣ 사양(spec) β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 원격 μ €μž₯μ†Œ, λŒ€μƒ ν΄λŸ¬μŠ€ν„°, 동기화 μ •μ±… 등을 μ„€μ •
3️⃣ μ†ŒμŠ€(source) β†’ Git μ €μž₯μ†Œ, Helm 차트, Kustomize λ“±μ˜ 배포 방식 μ •μ˜
4️⃣ λŒ€μƒ(destination) β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 Kubernetes ν΄λŸ¬μŠ€ν„° 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 지정
5️⃣ 동기화 μ •μ±…(syncPolicy) β†’ μžλ™ 동기화 μ—¬λΆ€ 및 λ¦¬μ†ŒμŠ€ 정리 μ •μ±… μ„€μ •


πŸ”Ή Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜ YAML 예제 뢄석

μ•„λž˜λŠ” Helm 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” YAML μ˜ˆμ œμž…λ‹ˆλ‹€.

apiVersion: argoproj.io/v1alpha1  # Argo CD의 API 버전 지정
kind: Application  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ¦¬μ†ŒμŠ€ μ„ μ–Έ
metadata:
  name: example-app  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름
  namespace: argocd  # Argo CDκ°€ κ΄€λ¦¬ν•˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€
spec:
  project: default  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œμ νŠΈ 지정

  source:  # μ†ŒμŠ€(Git μ €μž₯μ†Œ λ˜λŠ” Helm 차트) μ„€μ •
    repoURL: https://github.com/example/repo.git  # Git μ €μž₯μ†Œ URL
    targetRevision: main  # μ‚¬μš©ν•  브랜치 λ˜λŠ” νƒœκ·Έ
    path: charts/example  # Helm 차트 λ˜λŠ” λ§€λ‹ˆνŽ˜μŠ€νŠΈκ°€ μœ„μΉ˜ν•œ 디렉터리
    helm:
      valueFiles:  # Helm 차트의 values 파일 지정
        - values.yaml
        - values-production.yaml

  destination:  # Kubernetes ν΄λŸ¬μŠ€ν„° 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€ 지정
    server: https://kubernetes.default.svc  # κΈ°λ³Έ ν΄λŸ¬μŠ€ν„°(Kubernetes API μ„œλ²„)
    namespace: example-namespace  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 λ„€μž„μŠ€νŽ˜μ΄μŠ€

  syncPolicy:  # 동기화 μ •μ±… μ •μ˜
    automated:
      prune: true  # Gitμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό Kubernetesμ—μ„œλ„ μ‚­μ œ
      selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμ„ 경우 μ›λž˜ μƒνƒœλ‘œ μžλ™ 볡ꡬ
    syncOptions:
      - CreateNamespace=true  # λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μ—†μœΌλ©΄ μžλ™ 생성
      - PrunePropagationPolicy=foreground  # Prune λ™μž‘ 방식 μ„€μ •
      - PruneLast=true  # μ‚­μ œ μž‘μ—…μ„ λ§ˆμ§€λ§‰μ— μ‹€ν–‰

πŸ”Ή YAML μ£Όμš” ν•­λͺ© 상세 뢄석

βœ… 1. metadata: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λ³Έ 정보
metadata:
  name: example-app  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름
  namespace: argocd  # Argo CD λ„€μž„μŠ€νŽ˜μ΄μŠ€
  • name β†’ Argo CDμ—μ„œ 관리할 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이름
  • namespace β†’ Argo CDκ°€ μ‹€ν–‰λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€ (κΈ°λ³Έκ°’: argocd)

βœ… 2. spec.project: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ†ν•œ ν”„λ‘œμ νŠΈ
spec:
  project: default  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œμ νŠΈ 이름
  • Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ·Έλ£Ήν™”ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈ
  • 기본적으둜 default ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, ν•„μš”μ— 따라 λ‹€λ₯Έ ν”„λ‘œμ νŠΈλ₯Ό 생성할 μˆ˜λ„ 있음

βœ… 3. source: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ†ŒμŠ€ μ½”λ“œ μ €μž₯μ†Œ
source:
  repoURL: https://github.com/example/repo.git  # Git μ €μž₯μ†Œ URL
  targetRevision: main  # μ‚¬μš©ν•  브랜치 λ˜λŠ” νƒœκ·Έ
  path: charts/example  # Helm 차트 λ˜λŠ” λ§€λ‹ˆνŽ˜μŠ€νŠΈκ°€ μœ„μΉ˜ν•œ 디렉터리
  • repoURL β†’ Git μ €μž₯μ†Œμ˜ URL
  • targetRevision β†’ μ‚¬μš©ν•  Git 브랜치(main, develop) λ˜λŠ” νŠΉμ • νƒœκ·Έ
  • path β†’ Git μ €μž₯μ†Œ λ‚΄μ—μ„œ λ§€λ‹ˆνŽ˜μŠ€νŠΈ 파일이 μœ„μΉ˜ν•œ 디렉터리

πŸš€ Helm을 μ‚¬μš©ν•˜λŠ” 경우
Helm 차트λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, helm μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ values νŒŒμΌμ„ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

helm:
  valueFiles:
    - values.yaml
    - values-production.yaml

βœ… 4. destination: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 Kubernetes ν΄λŸ¬μŠ€ν„°
destination:
  server: https://kubernetes.default.svc  # κΈ°λ³Έ ν΄λŸ¬μŠ€ν„°(Kubernetes API μ„œλ²„)
  namespace: example-namespace  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 λ„€μž„μŠ€νŽ˜μ΄μŠ€
  • server β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 Kubernetes ν΄λŸ¬μŠ€ν„° μ£Όμ†Œ
    • https://kubernetes.default.svc: κΈ°λ³Έ ν΄λŸ¬μŠ€ν„° (Argo CD와 λ™μΌν•œ ν΄λŸ¬μŠ€ν„°)
    • λ‹€λ₯Έ ν΄λŸ¬μŠ€ν„°λ₯Ό μ‚¬μš©ν•  경우, ν•΄λ‹Ή ν΄λŸ¬μŠ€ν„°μ˜ API μ„œλ²„ μ£Όμ†Œ μž…λ ₯
  • namespace β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 λ„€μž„μŠ€νŽ˜μ΄μŠ€

βœ… 5. syncPolicy: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동기화 μ •μ±… μ„€μ •

syncPolicy:
  automated:
    prune: true  # Gitμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό Kubernetesμ—μ„œλ„ μ‚­μ œ
    selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμ„ 경우 μ›λž˜ μƒνƒœλ‘œ μžλ™ 볡ꡬ
  syncOptions:
    - CreateNamespace=true  # λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μ—†μœΌλ©΄ μžλ™ 생성
    - PrunePropagationPolicy=foreground  # Prune λ™μž‘ 방식 μ„€μ •
    - PruneLast=true  # μ‚­μ œ μž‘μ—…μ„ λ§ˆμ§€λ§‰μ— μ‹€ν–‰
  • μžλ™ 동기화 μ˜΅μ…˜
    • prune: true β†’ Gitμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό Kubernetesμ—μ„œλ„ μ‚­μ œ
    • selfHeal: true β†’ μˆ˜λ™ λ³€κ²½λœ λ¦¬μ†ŒμŠ€λ₯Ό Git μƒνƒœλ‘œ μžλ™ 볡ꡬ
  • μΆ”κ°€ 동기화 μ˜΅μ…˜
    • CreateNamespace=true β†’ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μ—†μœΌλ©΄ μžλ™ 생성
    • PrunePropagationPolicy=foreground β†’ λ¦¬μ†ŒμŠ€ μ‚­μ œ μˆœμ„œ 지정
    • PruneLast=true β†’ μ‚­μ œ μž‘μ—…μ„ λ§ˆμ§€λ§‰μ— μ‹€ν–‰

πŸ”Ή Argo CD CLIλ₯Ό ν™œμš©ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 생성

YAML 없이 CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 생성할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

argocd app create example-app \
  --repo https://github.com/example/repo.git \
  --path charts/example \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace example-namespace \
  --sync-policy automated

이 λͺ…λ Ήμ–΄λŠ” μœ„μ—μ„œ μ„€λͺ…ν•œ YAMLκ³Ό λ™μΌν•œ 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

πŸ”Ή ν”„λ‘œμ νŠΈκ°€ 없을 경우 μžλ™ μƒμ„±ν•˜λŠ” Application & AppProject YAML

# πŸ“Œ Argo CDμ—μ„œ ν”„λ‘œμ νŠΈ(AppProject)와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Application)을 λ™μ‹œμ— μƒμ„±ν•˜λŠ” λ§€λ‹ˆνŽ˜μŠ€νŠΈ
#    - 'database' ν”„λ‘œμ νŠΈκ°€ μ—†μœΌλ©΄ μžλ™μœΌλ‘œ 생성
#    - 'chromadb' μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포
#    - ν”„λ‘œμ νŠΈκ°€ 이미 μ‘΄μž¬ν•˜λ©΄ κΈ°μ‘΄ 섀정을 μœ μ§€ν•œ 채 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포

---
apiVersion: argoproj.io/v1alpha1  # Argo CD의 API 버전 지정
kind: AppProject  # Argo CD ν”„λ‘œμ νŠΈ λ¦¬μ†ŒμŠ€ μ •μ˜
metadata:
  name: database  # ν”„λ‘œμ νŠΈ 이름 (이름이 'database'인 ν”„λ‘œμ νŠΈ 생성)
  namespace: argocd  # Argo CDκ°€ λ°°ν¬λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€ (기본적으둜 'argocd' μ‚¬μš©)
spec:
  description: "Project for managing database applications"  # ν”„λ‘œμ νŠΈ μ„€λͺ…
  sourceRepos:
    - "*"  # 이 ν”„λ‘œμ νŠΈμ—μ„œ 관리할 수 μžˆλŠ” Git μ €μž₯μ†Œ (λͺ¨λ“  μ €μž₯μ†Œ ν—ˆμš©)
  destinations:
    - namespace: database  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 λ„€μž„μŠ€νŽ˜μ΄μŠ€ ('database' λ„€μž„μŠ€νŽ˜μ΄μŠ€)
      server: https://kubernetes.default.svc  # 배포 λŒ€μƒ Kubernetes ν΄λŸ¬μŠ€ν„° (κΈ°λ³Έ ν΄λŸ¬μŠ€ν„°)
  clusterResourceWhitelist:
    - group: "*"  # λͺ¨λ“  API 그룹의 λ¦¬μ†ŒμŠ€λ₯Ό ν—ˆμš©
      kind: "*"  # λͺ¨λ“  μ’…λ₯˜μ˜ λ¦¬μ†ŒμŠ€λ₯Ό ν—ˆμš© (예: Deployments, Services λ“±)
  namespaceResourceWhitelist:
    - group: "*"  # λͺ¨λ“  λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ¦¬μ†ŒμŠ€ ν—ˆμš©
      kind: "*"  # λͺ¨λ“  μ’…λ₯˜μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ¦¬μ†ŒμŠ€ ν—ˆμš©
  roles:
    - name: admin  # 'database' ν”„λ‘œμ νŠΈμ— λŒ€ν•œ 관리(Admin) μ—­ν•  생성
      description: "Admin access to the database project"  # μ—­ν•  μ„€λͺ…
      policies:
        - "p, proj:database:admin, applications, *, database/*, allow"  
          # 이 ν”„λ‘œμ νŠΈ λ‚΄μ˜ λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 관리할 수 μžˆλ„λ‘ κΆŒν•œ λΆ€μ—¬

---

apiVersion: argoproj.io/v1alpha1  # Argo CD의 API 버전 지정
kind: Application  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ¦¬μ†ŒμŠ€ μ •μ˜
metadata:
  name: chromadb  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름 (Argo CD UI 및 CLIμ—μ„œ ν‘œμ‹œλ¨)
  namespace: argocd  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 생성될 λ„€μž„μŠ€νŽ˜μ΄μŠ€ (Argo CDκ°€ 관리)
spec:
  project: database  # μœ„μ—μ„œ μƒμ„±ν•œ 'database' ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©

  source:
    repoURL: https://github.com/ch0992/gitops.git  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 Git μ €μž₯μ†Œ
    targetRevision: HEAD  # Git μ €μž₯μ†Œμ—μ„œ μ‚¬μš©ν•  브랜치 λ˜λŠ” νƒœκ·Έ (HEADλŠ” μ΅œμ‹  μƒνƒœλ₯Ό 의미)
    path: argocd/chromadb/helm  # Git μ €μž₯μ†Œ λ‚΄μ—μ„œ λ§€λ‹ˆνŽ˜μŠ€νŠΈ λ˜λŠ” Helm μ°¨νŠΈκ°€ μœ„μΉ˜ν•œ 디렉터리

  destination:
    server: https://kubernetes.default.svc  # Kubernetes API μ„œλ²„ (κΈ°λ³Έ ν΄λŸ¬μŠ€ν„°)
    namespace: database  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 λ„€μž„μŠ€νŽ˜μ΄μŠ€

  syncPolicy:  # Argo CD의 동기화 μ •μ±… μ •μ˜
    automated:
      prune: true  # Git μ €μž₯μ†Œμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό Kubernetesμ—μ„œλ„ μ‚­μ œ
      selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμ„ 경우 Git μƒνƒœλ‘œ μžλ™ 볡ꡬ
    syncOptions:
      - CreateNamespace=true  # λ„€μž„μŠ€νŽ˜μ΄μŠ€(database)κ°€ μ—†μœΌλ©΄ μžλ™μœΌλ‘œ 생성

βœ… μ£Όμš” μ„€λͺ…

πŸ”Ή 1️⃣ ν”„λ‘œμ νŠΈ 생성 (AppProject)

β€’ AppProject λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ database ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

β€’ 이 ν”„λ‘œμ νŠΈλ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ·Έλ£Ήν™”ν•˜κ³  μ ‘κ·Ό μ œμ–΄λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β€’ sourceRepos: ["*"] β†’ λͺ¨λ“  Git μ €μž₯μ†Œμ—μ„œ μ†ŒμŠ€λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.

β€’ destinations: ["database"] β†’ database λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— 배포λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.

β€’ roles: β†’ ν”„λ‘œμ νŠΈ μˆ˜μ€€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 관리 κΆŒν•œμ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ”Ή 2️⃣ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ •μ˜ (Application)

β€’ chromadb μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ database ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ κ΄€λ¦¬ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

β€’ repoURL β†’ GitOps 방식을 μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

β€’ path β†’ Helm 차트 λ˜λŠ” Kubernetes λ§€λ‹ˆνŽ˜μŠ€νŠΈκ°€ μœ„μΉ˜ν•œ Git μ €μž₯μ†Œ 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

β€’ destination β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 Kubernetes ν΄λŸ¬μŠ€ν„°μ™€ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

β€’ syncPolicy β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μžλ™ 동기화 정책을 μ„€μ •ν•˜μ—¬ GitOpsλ₯Ό κ°•ν™”ν•©λ‹ˆλ‹€.


πŸš€ 적용 방법

μœ„ YAML을 μ μš©ν•˜λ €λ©΄ kubectl apply -f λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

kubectl apply -f application.yaml

πŸ’‘ μ˜ˆμƒ 좜λ ₯ κ°’

appproject.argoproj.io/database created
application.argoproj.io/chromadb created

πŸ”Ή κ²°λ‘ : 이번 κΈ€μ—μ„œ 배운 핡심 λ‚΄μš© 정리

🟒 Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Application CRDλ₯Ό 톡해 μ •μ˜λ˜λ©°, GitOps 원칙에 따라 λ™μž‘
🟒 YAML λ§€λ‹ˆνŽ˜μŠ€νŠΈμ—μ„œ metadata, source, destination, syncPolicyλ₯Ό μ„€μ •ν•˜μ—¬ 배포λ₯Ό μžλ™ν™” κ°€λŠ₯
🟒 Helm, Kustomize λ“±μ˜ λ‹€μ–‘ν•œ 배포 방식을 μ§€μ›ν•˜λ©°, CLIλ₯Ό μ‚¬μš©ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 생성할 μˆ˜λ„ 있음
🟒 μžλ™ 동기화(Automated Sync) 및 Prune μ˜΅μ…˜μ„ ν™œμš©ν•˜μ—¬ Kubernetes λ¦¬μ†ŒμŠ€μ˜ μƒνƒœλ₯Ό μœ μ§€ κ°€λŠ₯

728x90