Kubernetes Tools/ArgoCD

[Ep.16] [Argo CD ๋ฐฐํฌ & ์ž๋™ํ™” #1] Argo CD์™€ GitOps๋ฅผ ํ™œ์šฉํ•œ ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ ๊ตฌ์ถ•

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

๐Ÿ”น ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ๋ž€?

์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ(Full Automated Deployment)๋Š” GitOps ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Argo CD๋ฅผ ํ™œ์šฉํ•˜๋ฉด Git ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•˜์—ฌ ๋ฐฐํฌ ๊ณผ์ •์„ ์™„์ „ํžˆ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ์˜ ์ฃผ์š” ํŠน์ง•
โœ” Git ์ €์žฅ์†Œ๋ฅผ ๋‹จ์ผ ์‹ ๋ขฐ ์›์ฒœ(Source of Truth)์œผ๋กœ ์‚ฌ์šฉ
โœ” ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๊ฐ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋จ
โœ” ์ˆ˜๋™ ๊ฐœ์ž… ์—†์ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ ๋ฐ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
โœ” CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ GitOps ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ• ๊ฐ€๋Šฅ


๐Ÿ”น GitOps ๊ธฐ๋ฐ˜์˜ ์ž๋™ํ™” ๋ฐฐํฌ ๊ตฌ์„ฑ ์š”์†Œ

GitOps ๋ฐฉ์‹์œผ๋กœ ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Git ์ €์žฅ์†Œ (Git Repository) Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋˜๋Š” Helm ์ฐจํŠธ ๊ด€๋ฆฌ
Argo CD Git ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๊ณ  Kubernetes์— ์ž๋™ ๋ฐฐํฌ
CI/CD ์‹œ์Šคํ…œ (GitHub Actions, Jenkins, Argo Workflows) ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  Git ์ €์žฅ์†Œ์— ์—…๋ฐ์ดํŠธ
์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ (Docker Hub, ECR, GCR) ๋นŒ๋“œ๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅ
Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋  ํ™˜๊ฒฝ

 

โœ… ์ž๋™ํ™” ํ๋ฆ„:
1๏ธโƒฃ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ Git ์ €์žฅ์†Œ์— Push
2๏ธโƒฃ CI/CD ์‹œ์Šคํ…œ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— Push
3๏ธโƒฃ GitOps ๋ฐฉ์‹์œผ๋กœ Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋จ
4๏ธโƒฃ Argo CD๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ž๋™ ๋™๊ธฐํ™”


๐Ÿ”น Argo CD๋ฅผ ํ™œ์šฉํ•œ ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ ๊ตฌ์ถ•

โœ… 1. ์ž๋™ ๋™๊ธฐํ™”(Automated Sync) ํ™œ์„ฑํ™”

Argo CD์—์„œ Git ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ Kubernetes์— ๋ฐ˜์˜๋˜๋„๋ก ์ž๋™ ๋™๊ธฐํ™”(Automated Sync) ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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: main  # ์‚ฌ์šฉํ•  Git ๋ธŒ๋žœ์น˜ (์˜ˆ: main, develop)
    path: manifests  # Git ์ €์žฅ์†Œ ๋‚ด์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ

  destination:
    server: https://kubernetes.default.svc  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ API ์„œ๋ฒ„
    namespace: example-namespace  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋  ๋„ค์ž„์ŠคํŽ˜์ด์Šค

  syncPolicy:
    automated:
      prune: true  # Git์—์„œ ์‚ญ์ œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ Kubernetes์—์„œ๋„ ์ž๋™ ์‚ญ์ œ
      selfHeal: true  # Kubernetes ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ Git ์ƒํƒœ๋กœ ์ž๋™ ๋ณต๊ตฌ
    syncOptions:
      - CreateNamespace=true  # ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ์ž๋™ ์ƒ์„ฑ

โœ… 2. GitHub Actions๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

name: Deploy to Kubernetes with Argo CD  # GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฆ„

on:
  push:
    branches:
      - main  # main ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ push๋  ๋•Œ ์‹คํ–‰

jobs:
  build:
    runs-on: ubuntu-latest  # GitHub Actions ์‹คํ–‰ ํ™˜๊ฒฝ
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2  # Git ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ

      - name: Build Docker image
        run: |
          docker build -t ghcr.io/example/app:${{ github.sha }} .  # ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
          docker push ghcr.io/example/app:${{ github.sha }}  # ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ GitHub Container Registry์— Push

      - name: Update Kubernetes manifests
        run: |
          sed -i "s|image: ghcr.io/example/app:.*|image: ghcr.io/example/app:${{ github.sha }}|g" k8s/deployment.yaml  # ์ด๋ฏธ์ง€ ํƒœ๊ทธ ๋ณ€๊ฒฝ
          git config user.name "GitHub Actions"  # Git ์„ค์ •
          git config user.email "actions@github.com"
          git add k8s/deployment.yaml  # ๋ณ€๊ฒฝ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ Git์— ์ถ”๊ฐ€
          git commit -m "Update deployment image to ${{ github.sha }}"  # ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹
          git push origin main  # ๋ณ€๊ฒฝ ์‚ฌํ•ญ GitHub ์ €์žฅ์†Œ์— Push

๐Ÿ”น Argo CD ์ž๋™ํ™” ๋ฐฐํฌ ์‹œ ๊ณ ๋ คํ•  ์ 

โœ… 1. ๋ณด์•ˆ ๋ฐ ์ธ์ฆ ๊ด€๋ฆฌ

  • Argo CD์™€ CI/CD ์‹œ์Šคํ…œ ๊ฐ„์˜ ์ธ์ฆ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ
  • GitHub Actions์—์„œ secrets์„ ํ™œ์šฉํ•˜์—ฌ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ณดํ˜ธ

โœ… 2. ๋ฐฐํฌ ์Šน์ธ(Manual Approval) ๋‹จ๊ณ„ ์ถ”๊ฐ€

  • ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž๋™ ๋ฐฐํฌ ์ „์— ๊ฒ€ํ†  ๋ฐ ์Šน์ธ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • Argo CD์—์„œ Webhook์„ ํ™œ์šฉํ•œ Slack ์•Œ๋ฆผ ๋ฐ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ๊ตฌ์ถ• ๊ฐ€๋Šฅ

โœ… 3. ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Prometheus & Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ Argo CD ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํ›„ Kubernetes ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™”

๐Ÿ”น Argo CD ์ž๋™ํ™” ๋ฐฐํฌ CLI ๋ช…๋ น์–ด ์ •๋ฆฌ

 

๋ช…๋ น์–ด  ์„ค๋ช…
argocd app list ๋“ฑ๋ก๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชฉ๋ก ์กฐํšŒ
argocd app sync <APP> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ์‹คํ–‰
argocd app get <APP> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ
argocd app rollback <APP> <VERSION> ํŠน์ • ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ
argocd app delete <APP> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ญ์ œ

 

โœ… ์ž๋™ ๋™๊ธฐํ™” ์ƒํƒœ ํ™•์ธ:

argocd app get example-app

 

โœ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™๊ธฐํ™” ์‹คํ–‰:

argocd app sync example-app

 

โœ… GitOps ๋ฐฉ์‹์œผ๋กœ Kubernetes ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ:

kubectl get deployments -n example-namespace

๐Ÿ”น ๊ฒฐ๋ก : ์ด๋ฒˆ ๊ธ€์—์„œ ๋ฐฐ์šด ํ•ต์‹ฌ ๋‚ด์šฉ ์ •๋ฆฌ

๐ŸŸข GitOps ๊ธฐ๋ฐ˜์˜ ์™„์ „ ์ž๋™ํ™” ๋ฐฐํฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์šด์˜ ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ณ  ๋ฐฐํฌ ์†๋„๋ฅผ ํ–ฅ์ƒ ๊ฐ€๋Šฅ
๐ŸŸข Argo CD์˜ ์ž๋™ ๋™๊ธฐํ™”(Automated Sync) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ Kubernetes ์ƒํƒœ๋ฅผ Git๊ณผ ํ•ญ์ƒ ์ผ์น˜ํ•˜๋„๋ก ์œ ์ง€ ๊ฐ€๋Šฅ
๐ŸŸข GitHub Actions์™€ Argo CD๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ

728x90