์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

๐ŸŒ€ Kubernetes ์‹ค์Šต: Blue/Green Deployment (with LoadBalancer Service)

AWS CLOUD SCHOOL 9๊ธฐ

by AI Engineer crystal 2025. 4. 15. 12:03

๋ณธ๋ฌธ

๐Ÿ“Œ ์‹ค์Šต ๋ชฉ์ 

  • Kubernetes์—์„œ Blue/Green Deployment ์ „๋žต์„ ์‹ค์Šตํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐœ์˜ Deployment(blue, green)๋ฅผ ๋งŒ๋“ค์–ด์„œ ์„œ๋น„์Šค ์ „ํ™˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ณ ,
  • ๊ฐ Pod์˜ ๋ฆฌ์†Œ์Šค ์ œํ•œ(requests/limits) ์„ค์ •์„ ํ†ตํ•ด ํšจ์œจ์ ์ธ ์ž์› ๊ด€๋ฆฌ๋ฅผ ์ ์šฉํ•ด ๋ด…๋‹ˆ๋‹ค.

๐Ÿง  ๋ฐฐ๊ฒฝ ์ง€์‹

๐Ÿ”ต Blue/Green Deployment

๋™์ผํ•œ ์„œ๋น„์Šค๋ฅผ ๋‘ ๊ฐœ์˜ ๋ฒ„์ „(Blue, Green)์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์–ด๋А ์ชฝ์— ๋ณด๋‚ผ์ง€ Service์˜ selector๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ์— Blue๊ฐ€ ์„œ๋น„์Šค๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด Service์˜ selector๋ฅผ Green์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฌด์ค‘๋‹จ ์ „ํ™˜์„ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กค๋ฐฑ์ด ํ•„์š”ํ•˜๋ฉด ๋‹ค์‹œ selector๋ฅผ Blue๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โš™๏ธ ๋ฆฌ์†Œ์Šค ์ œํ•œ (Resources)

  • requests: ์ตœ์†Œ๋กœ ๋ณด์žฅ๋ฐ›๋Š” ์ž์›
  • limits: ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž์›

๐Ÿ”จ ์‹ค์Šต ์‹œ๋‚˜๋ฆฌ์˜ค

  • blue/green Deployment ๊ฐ๊ฐ 3๊ฐœ์˜ Pod๋ฅผ ์ƒ์„ฑ
  • ๊ฐ Pod๋Š” ๋‹ค์Œ ๋ฆฌ์†Œ์Šค ์„ค์ •์„ ์ ์šฉ:
    • CPU: ์ตœ์†Œ 0.25๊ฐœ, ์ตœ๋Œ€ 0.5๊ฐœ
    • Memory: ์ตœ์†Œ 32Mi, ์ตœ๋Œ€ 64Mi
  • Service๋Š” ์ตœ์ดˆ blue ๋ฒ„์ „์„ ๋ฐ”๋ผ๋ณด๋‹ค๊ฐ€, selector ๋ณ€๊ฒฝ ์‹œ green์œผ๋กœ ์ „ํ™˜

๐Ÿ“ ์‹ค์Šต ํŒŒ์ผ ๊ตฌ์„ฑ

bluegreen-deploy-svc.yml

---
apiVersion: v1
kind: Service
metadata:
  name: aws9-service
spec:
  selector:
    color: blue   # ์ฒ˜์Œ์—๋Š” blue ๋ฐฐํฌ๋ฅผ ๋ฐ”๋ผ๋ด…๋‹ˆ๋‹ค.
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: aws9-deploy-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      color: blue
  template:
    metadata:
      labels:
        color: blue
    spec:
      containers:
        - name: aws9-ctn-blue
          image: brian24/aws9:blue
          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "64Mi"
              cpu: "500m"
            requests:
              memory: "32Mi"
              cpu: "250m"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: aws9-deploy-green
spec:
  replicas: 3
  selector:
    matchLabels:
      color: green
  template:
    metadata:
      labels:
        color: green
    spec:
      containers:
        - name: aws9-ctn-green
          image: brian24/aws9:green
          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "64Mi"
              cpu: "500m"
            requests:
              memory: "32Mi"
              cpu: "250m"

โœ… ์‹ค์Šต ํ™•์ธ ๋ฐฉ๋ฒ•

1. ๋ฐฐํฌ ๋ฐ ํ™•์ธ

kubectl apply -f bluegreen-deploy-svc.yml
kubectl get svc

2. ์™ธ๋ถ€ IP ํ™•์ธ ํ›„ curl ์š”์ฒญ

curl http://<EXTERNAL-IP>

์ฒ˜์Œ์—๋Š” blue ํŽ˜์ด์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

3. ์„œ๋น„์Šค ์ „ํ™˜

kubectl edit svc aws9-service
# selector:
#   color: green   ← ์ด ๋ถ€๋ถ„์œผ๋กœ ๋ณ€๊ฒฝ

๋ณ€๊ฒฝ ํ›„ ์ €์žฅ → ๋‹ค์‹œ curl ์š”์ฒญ ์‹œ green ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.


๐Ÿ“ ์ฃผ์˜์‚ฌํ•ญ

  • ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ๋ณ€๊ฒฝ์ด ์•ˆ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. curl ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • Service์˜ selector๋งŒ ๋ฐ”๊ฟ”๋„ ๋ฌด์ค‘๋‹จ ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์‹ค๋ฌด์—์„œ๋„ ๋ฐฐํฌ ์•ˆ์ •์„ฑ ํ™•๋ณด์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ