Kubernetes Tools/ArgoCD

[Ep.34] [Argo CD ์šด์˜ ์ตœ์ ํ™” #4] Argo CD์™€ Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ „๋žต

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

๐Ÿ”น Argo Rollouts๋ž€?

Argo Rollouts๋Š” Kubernetes์—์„œ Blue-Green, Canary ๋ฐฐํฌ์™€ ๊ฐ™์€ ์ ์ง„์  ๋ฐฐํฌ ์ „๋žต์„ ์ง€์›ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.
Argo CD์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด GitOps ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ ์ „๋žต์„ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

โœ… Argo Rollouts๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

 

โœ” ์„œ๋น„์Šค ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ฐ€๋Šฅ
โœ” Canary ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ์‹ ๊ทœ ๋ฒ„์ „์˜ ์•ˆ์ •์„ฑ ๊ฒ€์ฆ ๊ฐ€๋Šฅ
โœ” ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
โœ” Argo CD์™€ ์—ฐ๊ณ„ํ•˜์—ฌ GitOps ๋ฐฉ์‹์œผ๋กœ ๋ฐฐํฌ ์ž๋™ํ™” ๊ฐ€๋Šฅ

 

 

โœ… Argo Rollouts๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฐฐํฌ ์ „๋žต

๋ฐฐํฌ ์ „๋žต ์„ค๋ช…
Blue-Green ๋ฐฐํฌ ๊ธฐ์กด ๋ฒ„์ „(Blue)๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green)์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๊ณ , ํŠธ๋ž˜ํ”ฝ์„ Green์œผ๋กœ ์ „ํ™˜
Canary ๋ฐฐํฌ ์‹ ๊ทœ ๋ฒ„์ „์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ›„ ์ „์ฒด ์ „ํ™˜
Progressive Delivery Canary ๋ฐฐํฌ๋ฅผ ๋” ์„ธ๋ถ„ํ™”ํ•˜์—ฌ A/B ํ…Œ์ŠคํŠธ ๋ฐ ์‹คํ—˜์ ์ธ ๋ฐฐํฌ ๊ฐ€๋Šฅ

๐Ÿ”น 1. Argo CD์—์„œ Argo Rollouts ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•

Argo Rollouts๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Argo CD์—์„œ Rollout ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์›ํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… Argo Rollouts ์ปจํŠธ๋กค๋Ÿฌ ์„ค์น˜ (Helm Chart ์‚ฌ์šฉ)

helm install argo-rollouts argo/argo-rollouts -n argo-rollouts --create-namespace

 

โœ… ์„ค๋ช…:
โœ” argo-rollouts → Argo Rollouts ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ Kubernetes์— ์„ค์น˜
โœ” --create-namespace → argo-rollouts ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ

 

โœ… ์„ค์น˜๋œ Rollouts ์ปจํŠธ๋กค๋Ÿฌ ํ™•์ธ

kubectl get pods -n argo-rollouts

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME                                 READY   STATUS    RESTARTS   AGE
argo-rollouts-7f69c98b74-xyz         1/1     Running   0          2m

๐Ÿ”น 2. Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ Blue-Green ๋ฐฐํฌ ์˜ˆ์ œ

โœ… Blue-Green ๋ฐฐํฌ ์ „๋žต์„ ์ ์šฉํ•œ Rollout ๋ฆฌ์†Œ์Šค

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: example-blue-green
  namespace: example
spec:
  replicas: 3  # ์‹คํ–‰ํ•  ํŒŒ๋“œ ์ˆ˜
  strategy:
    blueGreen:
      activeService: example-service  # ํ˜„์žฌ ์„œ๋น„์Šค(Blue)
      previewService: example-preview  # ์‹ ๊ทœ ๋ฒ„์ „ ์„œ๋น„์Šค(Green)
      autoPromotionEnabled: false  # ์ž๋™ ์Šน๊ฒฉ ๋น„ํ™œ์„ฑํ™” (์ˆ˜๋™ ์ „ํ™˜)

  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: example
          image: ghcr.io/example/app:v2  # ์ƒˆ๋กœ์šด ๋ฒ„์ „
          ports:
            - containerPort: 80

 

โœ… ์„ค๋ช…:
โœ” blueGreen.activeService: example-service → ํ˜„์žฌ ๋ฒ„์ „(Blue) ์„œ๋น„์Šค
โœ” blueGreen.previewService: example-preview → ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green) ์„œ๋น„์Šค
โœ” autoPromotionEnabled: false → ์ž๋™ ์Šน๊ฒฉ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅ

 

โœ… ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค ์ •์˜

apiVersion: v1
kind: Service
metadata:
  name: example-service
  namespace: example
spec:
  selector:
    app: example
  ports:
    - port: 80

 

โœ… ๋ฐฐํฌ ํ›„ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green) ํ™•์ธ

kubectl get rollout example-blue-green -n example

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME                   STRATEGY     STATUS        ACTIVE SERVICE    PREVIEW SERVICE
example-blue-green     BlueGreen    Progressing   example-service   example-preview

 

โœ… ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์Šน๊ฒฉ(ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜)

kubectl argo rollouts promote example-blue-green -n example

 

โœ… ๋กค๋ฐฑ(๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ๋ณต๊ตฌ)

kubectl argo rollouts undo example-blue-green -n example

๐Ÿ”น 3. Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ Canary ๋ฐฐํฌ ์˜ˆ์ œ

โœ… Canary ๋ฐฐํฌ ์ „๋žต์„ ์ ์šฉํ•œ Rollout ๋ฆฌ์†Œ์Šค

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: example-canary
  namespace: example
spec:
  replicas: 3  # ์‹คํ–‰ํ•  ํŒŒ๋“œ ์ˆ˜
  strategy:
    canary:
      steps:
        - setWeight: 20  # 20% ํŠธ๋ž˜ํ”ฝ์„ ์‹ ๊ทœ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜
        - pause: {duration: 60s}  # 60์ดˆ ๋Œ€๊ธฐ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰
        - setWeight: 50  # 50% ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜
        - pause: {}  # ์ˆ˜๋™ ์Šน๊ฒฉ ๋Œ€๊ธฐ

  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - name: example
          image: ghcr.io/example/app:v2  # ์‹ ๊ทœ ๋ฒ„์ „
          ports:
            - containerPort: 80

 

โœ… ์„ค๋ช…:
โœ” steps.setWeight: 20 → ์ดˆ๊ธฐ ํŠธ๋ž˜ํ”ฝ 20%๋ฅผ ์‹ ๊ทœ ๋ฒ„์ „์— ํ• ๋‹น
โœ” pause: {duration: 60s} → 60์ดˆ ๋™์•ˆ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰
โœ” setWeight: 50 → 50% ํŠธ๋ž˜ํ”ฝ์„ ์‹ ๊ทœ ๋ฒ„์ „์— ํ• ๋‹น
โœ” pause: {} → ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์Šน๊ฒฉํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

 

โœ… ํ˜„์žฌ ๋ฐฐํฌ ์ง„ํ–‰ ์ƒํƒœ ํ™•์ธ

kubectl argo rollouts get rollout example-canary -n example

 

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ:

NAME             STRATEGY   STATUS        STEP
example-canary   Canary     Progressing   2/4

 

โœ… ์ˆ˜๋™ ์Šน๊ฒฉ(100% ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜)

kubectl argo rollouts promote example-canary -n example

 

โœ… ๋กค๋ฐฑ(๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ๋ณต๊ตฌ)

kubectl argo rollouts undo example-canary -n example

๐Ÿ”น 4. Argo CD์™€ Argo Rollouts ์—ฐ๋™

Argo CD์—์„œ Canary ๋ฐฐํฌ ๋˜๋Š” Blue-Green ๋ฐฐํฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด,
๋‹ค์Œ๊ณผ ๊ฐ™์ด Argo CD Application์— Rollout ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… Argo CD Application์—์„œ Argo Rollouts ๋ฐฐํฌ

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-rollout-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/repo.git
    targetRevision: main
    path: rollouts  # Rollout ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ฒฝ๋กœ

  destination:
    server: https://kubernetes.default.svc
    namespace: example

  syncPolicy:
    automated:
      prune: true
      selfHeal: true

 

โœ… ์„ค๋ช…:
โœ” source.path: rollouts → Rollout ๋ฆฌ์†Œ์Šค๊ฐ€ ์ €์žฅ๋œ Git ๊ฒฝ๋กœ
โœ” syncPolicy.automated → ์ž๋™ ๋™๊ธฐํ™” ํ™œ์„ฑํ™”

 

โœ… Argo CD์—์„œ ๋ฐฐํฌ ๋™๊ธฐํ™” ์‹คํ–‰

argocd app sync example-rollout-app

 

โœ… ๋ฐฐํฌ๋œ Argo Rollouts ์ƒํƒœ ํ™•์ธ

kubectl get rollouts -n example

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

๐ŸŸข Argo Rollouts๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Canary, Blue-Green ๋ฐฐํฌ ์ „๋žต์„ GitOps ๋ฐฉ์‹์œผ๋กœ ์ž๋™ํ™” ๊ฐ€๋Šฅ
๐ŸŸข Argo CD์™€ Argo Rollouts๋ฅผ ์—ฐ๋™ํ•˜๋ฉด Kubernetes ๋ฐฐํฌ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅ
๐ŸŸข ๋ฐฐํฌ ์‹คํŒจ ์‹œ Rollback ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์šด์˜ ๊ฐ€๋Šฅ
๐ŸŸข GitOps ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐํฌ ์ „๋žต์„ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

728x90