Kubernetes Tools/ArgoCD

[Ep.17] [Argo CD ๋ฐฐํฌ & ์ž๋™ํ™” #2] Argo CD์™€ Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ

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

๐Ÿ”น ๋ฐฐํฌ ์ „๋žต(Deployment Strategy)์ด ์ค‘์š”ํ•œ ์ด์œ 

Kubernetes ํ™˜๊ฒฝ์—์„œ๋Š” ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ๋ฐฐํฌํ•  ๋•Œ, ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ „ํ†ต์ ์ธ ๋ฐฐํฌ ๋ฐฉ์‹(์ฆ‰์‹œ ๋ฐฐํฌ)์€ ํŠธ๋ž˜ํ”ฝ์„ ํ•œ ๋ฒˆ์— ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์„œ๋น„์Šค ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

 

โœ… ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฐํฌ ์ „๋žต:

 

โœ” ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ(Blue-Green Deployment) → ๋‘ ๊ฐœ์˜ ํ™˜๊ฒฝ(Blue์™€ Green) ์ค‘ ํ•˜๋‚˜๋งŒ ํ™œ์„ฑํ™”
โœ” ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ(Canary Deployment) → ํŠธ๋ž˜ํ”ฝ์˜ ์ผ๋ถ€๋งŒ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ ์ง„์  ์ „ํ™˜

 

Argo Rollouts๋Š” ์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ๋ฐฐํฌ ์ „๋žต์„ ์ง€์›ํ•˜๋Š” Kubernetes ์ปจํŠธ๋กค๋Ÿฌ๋กœ,
Argo CD์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด GitOps ๊ธฐ๋ฐ˜์˜ ์ง€์†์ ์ธ ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ž€?

โœ… ๊ฐœ๋…:

๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ํ˜„์žฌ ์šด์˜ ์ค‘์ธ ๋ฒ„์ „(Blue)๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green)์„ ๋™์‹œ์— ์œ ์ง€ํ•˜๋ฉด์„œ, ํŠน์ • ์‹œ์ ์— ํŠธ๋ž˜ํ”ฝ์„ Green์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ Blue๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

โœ… ๋™์ž‘ ๋ฐฉ์‹:

1๏ธโƒฃ ๊ธฐ์กด ๋ฒ„์ „(Blue)์„ ์œ ์ง€ํ•œ ์ฑ„, ์ƒˆ ๋ฒ„์ „(Green)์„ ๋ฐฐํฌ
2๏ธโƒฃ Green ๋ฒ„์ „์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
3๏ธโƒฃ ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ Green์œผ๋กœ ์ „ํ™˜
4๏ธโƒฃ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ Blue๋กœ ๋˜๋Œ๋ฆผ
5๏ธโƒฃ ์•ˆ์ •์„ฑ์ด ํ™•์ธ๋˜๋ฉด Blue ํ™˜๊ฒฝ์„ ์ œ๊ฑฐ

 

โœ… ์žฅ์ :

โœ” ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์ƒˆ๋กœ์šด ๋ฒ„์ „ ๋ฐฐํฌ ๊ฐ€๋Šฅ
โœ” ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜์„ ํ†ตํ•ด ๋ฐฐํฌ ์•ˆ์ •์„ฑ ๋ณด์žฅ
โœ” ๋กค๋ฐฑ์ด ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•จ

 

โœ… ๋‹จ์ :

โŒ ๋‘ ๊ฐœ์˜ ํ™˜๊ฒฝ(Blue, Green)์„ ๋™์‹œ์— ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ๋งŽ์Œ


๐Ÿ”น ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋ž€?

โœ… ๊ฐœ๋…:
์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž(์˜ˆ: 10%)๋งŒ ์ƒˆ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์ ์ง„์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์ ์ง„์ ์ธ ํŠธ๋ž˜ํ”ฝ ์ด๋™์„ ํ†ตํ•ด ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… ๋™์ž‘ ๋ฐฉ์‹:

1๏ธโƒฃ ๊ธฐ์กด ๋ฒ„์ „(A)๊ณผ ์ƒˆ ๋ฒ„์ „(B)์„ ๋™์‹œ์— ์šด์˜
2๏ธโƒฃ ์ผ๋ถ€ ํŠธ๋ž˜ํ”ฝ(์˜ˆ: 10%)์„ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „์†ก
3๏ธโƒฃ ์•ˆ์ •์„ฑ์ด ํ™•์ธ๋˜๋ฉด ์ ์ง„์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋Š˜๋ฆผ (์˜ˆ: 10% → 30% → 60% → 100%)
4๏ธโƒฃ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ

 

โœ… ์žฅ์ :
โœ” ์„œ๋น„์Šค ์•ˆ์ •์„ฑ์ด ๋†’์Œ (์ ์ง„์  ๋ฐฐํฌ)
โœ” ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ€๋Šฅ

 

โœ… ๋‹จ์ :
โŒ ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
โŒ ํŠธ๋ž˜ํ”ฝ์„ ์ ์ง„์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ๋กœ์ง ํ•„์š”


๐Ÿ”น Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ

Argo Rollouts๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Kubernetes Deployment ๋Œ€์‹  Rollout ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Argo Rollouts ์„ค์น˜ํ•˜๊ธฐ

๋จผ์ € Argo Rollouts ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml

 

โœ… ์„ค์น˜ ํ™•์ธ:

kubectl get pods -n argo-rollouts
NAME                                      READY   STATUS    RESTARTS   AGE
argo-rollouts-5d6f8b5c79-xyzabc           1/1     Running   0          1m

โœ… Argo Rollouts ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ์˜ˆ์ œ

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: example-app  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
  namespace: example-namespace  # ๋„ค์ž„์ŠคํŽ˜์ด์Šค
spec:
  replicas: 3  # ์‹คํ–‰ํ•  ํŒŒ๋“œ ๊ฐœ์ˆ˜
  strategy:
    blueGreen:
      activeService: example-app-service  # ๊ธฐ์กด ๋ฒ„์ „(Blue)์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค
      previewService: example-app-preview  # ์ƒˆ ๋ฒ„์ „(Green)์— ์—ฐ๊ฒฐ๋  ์„œ๋น„์Šค
      autoPromotionEnabled: false  # ์ž๋™ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜ ๋น„ํ™œ์„ฑํ™” (์ˆ˜๋™ ์Šน์ธ ํ•„์š”)
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
        - name: app
          image: ghcr.io/example/app:v2  # ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€
          ports:
            - containerPort: 80

 

โœ… ์„ค๋ช…:

  • strategy.blueGreen.activeService → ํ˜„์žฌ ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค (Blue)
  • strategy.blueGreen.previewService → ํ…Œ์ŠคํŠธ ์ค‘์ธ ์ƒˆ ๋ฒ„์ „ (Green)
  • autoPromotionEnabled: false → ์ž๋™ ์Šน๊ฒฉ ๋น„ํ™œ์„ฑํ™” (๊ด€๋ฆฌ์ž๊ฐ€ ์Šน์ธํ•ด์•ผ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜)

โœ… ๋ฐฐํฌ ํ›„ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜:

kubectl argo rollouts promote example-app

 

โœ… ๋กค๋ฐฑ ์‹œ ๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜:

kubectl argo rollouts abort example-app

๐Ÿ”น Argo Rollouts๋ฅผ ํ™œ์šฉํ•œ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: example-app
  namespace: example-namespace
spec:
  replicas: 3
  strategy:
    canary:
      steps:
        - setWeight: 10  # 10% ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜
        - pause: {duration: 30s}  # 30์ดˆ ๋Œ€๊ธฐ
        - setWeight: 50  # 50% ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜
        - pause: {}  # ๊ด€๋ฆฌ์ž๊ฐ€ ์Šน์ธํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
  selector:
    matchLabels:
      app: example-app
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
        - name: app
          image: ghcr.io/example/app:v2
          ports:
            - containerPort: 80

 

โœ… ์„ค๋ช…:

  • setWeight: 10 → ์ดˆ๊ธฐ 10% ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜
  • pause: {duration: 30s} → 30์ดˆ ๋™์•ˆ ์•ˆ์ •์„ฑ ํ™•์ธ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰
  • setWeight: 50 → 50% ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜
  • pause: {} → ๊ด€๋ฆฌ์ž๊ฐ€ ์Šน์ธํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

โœ… ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ์ง„ํ–‰ ์ƒํ™ฉ ํ™•์ธ:

kubectl argo rollouts get rollout example-app

 

โœ… ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ์Šน์ธ:

kubectl argo rollouts promote example-app

 

โœ… ๋กค๋ฐฑ ์‹œ ๊ธฐ์กด ๋ฒ„์ „ ์œ ์ง€:

kubectl argo rollouts abort example-app

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

๐ŸŸข ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋Š” ๋‘ ๊ฐœ์˜ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋น ๋ฅด๊ฒŒ ๋กค๋ฐฑ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์Œ
๐ŸŸข ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋Š” ์ ์ง„์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์•ˆ์ „์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
๐ŸŸข Argo Rollouts๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ  GitOps ๊ธฐ๋ฐ˜์œผ๋กœ ์šด์˜ ๊ฐ€๋Šฅ

728x90