Kubernetes Tools/ArgoCD

[Ep.8] [Argo CD 운영 #3] Argo CD의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Application) κ°œλ…κ³Ό Kubernetes λ¦¬μ†ŒμŠ€ 관리

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

 

πŸ”Ή Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Application)μ΄λž€?

 

Argo CDμ—μ„œ **μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Application)**은 Kubernetes ν΄λŸ¬μŠ€ν„°μ—μ„œ κ΄€λ¦¬λ˜λŠ” λͺ¨λ“  λ¦¬μ†ŒμŠ€μ˜ 집합을 μ˜λ―Έν•©λ‹ˆλ‹€.

즉, Argo CDλŠ” Git μ €μž₯μ†Œμ— μ •μ˜λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 선언적 λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό 읽고,

이λ₯Ό Kubernetes ν΄λŸ¬μŠ€ν„°μ— λ°°ν¬ν•˜κ³  동기화(Sync)ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

 

βœ… Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ§•

βœ” GitOps 원칙 기반 → Git μ €μž₯μ†Œμ— μ •μ˜λœ μƒνƒœλ₯Ό Kubernetes에 μžλ™ 반영

βœ” 선언적(Declarative) 방식 → YAML νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜

βœ” μžλ™ν™”λœ 동기화 → Git μƒνƒœ λ³€κ²½ μ‹œ μžλ™ μ—…λ°μ΄νŠΈ κ°€λŠ₯

βœ” λ¦¬μ†ŒμŠ€ λͺ¨λ‹ˆν„°λ§ → Kubernetes λ¦¬μ†ŒμŠ€μ˜ μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ κ°μ‹œ

 


πŸ”Ή Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ£Όμš” κ°œλ…

 

βœ… 1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜(Application) CRD

 

Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Kubernetes의 **Custom Resource Definition(CRD)**둜 κ΄€λ¦¬λ©λ‹ˆλ‹€.

즉, Applicationμ΄λΌλŠ” Kubernetes λ¦¬μ†ŒμŠ€λ‘œ λ“±λ‘λ˜λ©°, 이λ₯Ό 톡해 Argo CDκ°€ λ¦¬μ†ŒμŠ€λ₯Ό κ°μ‹œν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.

 

βœ… 2. ν”„λ‘œμ νŠΈ(Project) 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 관리

 

Argo CDλŠ” μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ “ν”„λ‘œμ νŠΈ(Project)” λ‹¨μœ„λ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 톡해 **RBAC(Role-Based Access Control)**을 μ μš©ν•˜κ±°λ‚˜, νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ°°ν¬λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… 3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동기화(Sync) 및 μƒνƒœ λͺ¨λ‹ˆν„°λ§

 

Argo CDλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Git μƒνƒœμ™€ μΌμΉ˜ν•˜λŠ”μ§€ μ§€μ†μ μœΌλ‘œ κ°μ‹œν•˜λ©°,

OutOfSync μƒνƒœ λ°œμƒ μ‹œ μžλ™ λ˜λŠ” μˆ˜λ™μœΌλ‘œ 동기화 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 


πŸ”Ή Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈ(YAML) 예제

 

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

apiVersion: argoproj.io/v1alpha1  # Argo CD의 API 버전 지정
kind: Application  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ¦¬μ†ŒμŠ€
metadata:
  name: example-app  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이름
  namespace: argocd  # Argo CD λ„€μž„μŠ€νŽ˜μ΄μŠ€
spec:
  project: default  # Argo CDμ—μ„œ κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œμ νŠΈ 이름
  source:
    repoURL: https://github.com/example/repo.git  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ Git μ €μž₯μ†Œ URL
    targetRevision: HEAD  # μ΅œμ‹  버전을 μ‚¬μš©
    path: manifests  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈκ°€ μœ„μΉ˜ν•œ 디렉터리
  destination:
    server: https://kubernetes.default.svc  # Kubernetes API μ„œλ²„ μ£Όμ†Œ
    namespace: example-app  # 배포할 λ„€μž„μŠ€νŽ˜μ΄μŠ€
  syncPolicy:
    automated:
      prune: true  # Git μƒνƒœμ™€ λ‹€λ₯Ό 경우 λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€ μžλ™ μ‚­μ œ
      selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμ„ 경우 μ›λž˜ μƒνƒœλ‘œ μžλ™ 볡ꡬ

 

βœ… μ„€λͺ…

repoURL → Git μ €μž₯μ†Œμ˜ URL

targetRevision → μ μš©ν•  Git 브랜치 λ˜λŠ” νƒœκ·Έ

path → Git μ €μž₯μ†Œ λ‚΄μ˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈ 파일이 μœ„μΉ˜ν•œ 디렉터리

destination → 배포될 Kubernetes ν΄λŸ¬μŠ€ν„° 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€

syncPolicy → μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™ λ™κΈ°ν™”ν•˜λŠ” μ„€μ •

 


πŸ”Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동기화(Sync) 및 배포 원리

 

Argo CDλŠ” GitOps 원칙에 따라 Git μ €μž₯μ†Œμ— μ €μž₯된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 선언적 μƒνƒœμ™€ Kubernetes ν΄λŸ¬μŠ€ν„°μ˜ μ‹€μ œ μƒνƒœλ₯Ό λΉ„κ΅ν•˜μ—¬ λ™κΈ°ν™”ν•©λ‹ˆλ‹€.

 

βœ… 1. 동기화 μƒνƒœ(Sync Status)

Sync μƒνƒœ μ„€λͺ…
Synced μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Git μƒνƒœμ™€ 동일
OutOfSync μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Git μƒνƒœμ™€ 뢈일치
Unknown μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό 확인할 수 μ—†μŒ

 

βœ… 2. μžλ™ 동기화(Automated Sync) μ„€μ •

 

Argo CDλŠ” syncPolicy 섀정을 톡해 μžλ™μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 동기화할 수 μžˆμŠ΅λ‹ˆλ‹€.

syncPolicy:
  automated:
    prune: true  # λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€ μžλ™ μ‚­μ œ
    selfHeal: true  # Kubernetes λ¦¬μ†ŒμŠ€κ°€ μˆ˜λ™ λ³€κ²½λ˜μ—ˆμ„ 경우 μžλ™ 볡ꡬ

βœ” prune: true → Gitμ—μ„œ μ‚­μ œλœ λ¦¬μ†ŒμŠ€λŠ” Kubernetesμ—μ„œλ„ μ‚­μ œλ¨

βœ” selfHeal: true → Kubernetes λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜λ©΄ Git μƒνƒœλ‘œ μžλ™ 볡ꡬ

 


πŸ”Ή Argo CD μ• ν”Œλ¦¬μΌ€μ΄μ…˜ CLI λͺ…λ Ήμ–΄

 

βœ… 1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λͺ©λ‘ 쑰회

argocd app list

 

βœ… 2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 상세 정보 확인

argocd app get example-app

 

βœ… 3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동기화(Sync)

argocd app sync example-app

 

βœ… 4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘€λ°±(Rollback)

argocd app rollback example-app 2

 


πŸ”Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘€λ°± μ‹œ 이전 버전 확인 방법

 

Argo CDμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ‘€λ°±ν•  λ•Œ **버전 번호(예: 2)**λŠ” ν•΄λ‹Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포 이λ ₯을 μ‘°νšŒν•˜μ—¬ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포 이λ ₯(Revision) 확인

argocd app history example-app

 

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

ID  DATE                      COMMIT         SYNC STATUS  HEALTH STATUS  PARAMETERS
1   2025-03-10 12:00:00 UTC   a1b2c3d        Synced       Healthy        replicas=3
2   2025-03-12 15:30:00 UTC   d4e5f6g        OutOfSync    Degraded       replicas=2
3   2025-03-15 10:45:00 UTC   h7i8j9k        Synced       Healthy        replicas=3

 

βœ… λ‘€λ°±ν•  버전 선택

 

μœ„μ˜ 배포 이λ ₯μ—μ„œ IDκ°€ 2인 경우, 이λ₯Ό λ‘€λ°±ν•˜λ €λ©΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

argocd app rollback example-app 2

 

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

Rolled back 'example-app' to revision 2.

 

βœ… 정리

배포 이λ ₯ 쑰회: argocd app history <APP_NAME>

λ‘€λ°±ν•  버전 확인: ID κ°’ 확인

νŠΉμ • λ²„μ „μœΌλ‘œ λ‘€λ°±: argocd app rollback <APP_NAME> <ID>

728x90