Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

๋ฉ”๋ชจ ๋ฒˆ์—ญ: Weaveworks์˜ ์ด ๊ฐœ์š”์—์„œ๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถœ์‹œ ์ „๋žต์„ ์†Œ๊ฐœํ•˜๊ณ  Kubernetes Flagger ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ง„๋ณด๋œ ์ „๋žต์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์ดˆ๋ณด ์—”์ง€๋‹ˆ์–ด๋ผ๋„ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)
๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฆฌ๋ทฐ ์ปจํ…Œ์ด๋„ˆ ์†”๋ฃจ์…˜์˜ ์ถœ์‹œ ์ „๋žต

์˜ค๋Š˜๋‚  ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ๊ณผ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐฐํฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ ์™„์ „ํžˆ ๋ชจ๋“ˆ์‹ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์„ค๊ณ„ํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ํŒ€์ด ๋™์‹œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์งง๊ณ  ๋” ์ž์ฃผ ๋ฐฐํฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ถœ์‹œ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์€ ๊ฐœ๋ฐœํŒ€์— ๋” ๋นจ๋ฆฌ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŒ€์ด ๋” ์‹ ์†ํ•˜๊ฒŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ๊ธฐ๊ฐ€ ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์‹œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—…์ด ๋” ์žฌ๋ฏธ์žˆ์–ด์ง‘๋‹ˆ๋‹ค.


๊ทธ๋Ÿฌ๋‚˜ ๋ฆด๋ฆฌ์Šค ๋นˆ๋„๊ฐ€ ๋†’์•„์งˆ์ˆ˜๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์ด๋‚˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฐ€๋Šฅ์„ฑ๋„ ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜ ๋ฐ DevOps ํŒ€์€ ์ œํ’ˆ๊ณผ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌ ์ „๋žต์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. (CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™”์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.)

์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๋กค๋ง ๋ฐฐํฌ์™€ ์นด๋‚˜๋ฆฌ์•„ ๋กค์•„์›ƒ ๋ฐ ๊ทธ ๋ณ€ํ˜•๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๋ฐฉ๋ฒ•์„ ํฌํ•จํ•˜์—ฌ Kubernetes์˜ ๋‹ค์–‘ํ•œ ๋ฐฐํฌ ์ „๋žต์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ „๋žต

๋ชฉํ‘œ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐํฌ ์ „๋žต์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ์‚ฌ์šฉ์ž/ํด๋ผ์ด์–ธํŠธ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์ „์— ์ œํ•œ๋œ ์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ์ ์œผ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•œ.

๋กค๋ง(์ ์ง„์ , "๋กค๋ง" ๋ฐฐํฌ)

์ด๋Š” Kubernetes์˜ ํ‘œ์ค€ ๋ฐฐํฌ ์ „๋žต์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์ด ์ ์ง„์ ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์ด์ „ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋Š” ํฌ๋“œ๋ฅผ ์ƒˆ ๋ฒ„์ „์˜ ํฌ๋“œ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

Kubernetes๋Š” ์ƒˆ ํฌ๋“œ๊ฐ€ ์ž‘๋™ํ•  ์ค€๋น„๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค(๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ). ์ค€๋น„ ํ…Œ์ŠคํŠธ), ์˜ค๋ž˜๋œ ๊ฒƒ์„ ๋กค์—…ํ•˜๊ธฐ ์ „์—. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค‘์ง€ํ•˜์ง€ ์•Š๊ณ  ์ด ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ์œ ํ˜•์„ ์„ค๋ช…ํ•˜๋Š” YAML ํŒŒ์ผ์—์„œ ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ์ด์ „ ์ด๋ฏธ์ง€๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: awesomeapp
    spec:
      containers:
        - name: awesomeapp
          image: imagerepo-user/awesomeapp:new
          ports:
            - containerPort: 8080

๋กค์˜ค๋ฒ„ ์—…๋ฐ์ดํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxSurge: 25%
       maxUnavailable: 25%  
  template:
  ...

์žฌ์ฐฝ์กฐ

์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฐํฌ ์œ ํ˜•์—์„œ๋Š” ์ด์ „ ํฌ๋“œ๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ์ข…๋ฃŒ๋˜๊ณ  ์ƒˆ ํฌ๋“œ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

ํ•ด๋‹น ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
  ...

๋ธ”๋ฃจ/๊ทธ๋ฆฐ(๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ)

๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ ์ „๋žต(๋•Œ๋•Œ๋กœ ๋ ˆ๋“œ/๋ธ”๋ž™์ด๋ผ๊ณ ๋„ ํ•จ)์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด์ „(๊ทธ๋ฆฐ) ๋ฒ„์ „๊ณผ ์ƒˆ(๋ธ”๋ฃจ) ๋ฒ„์ „์„ ๋™์‹œ์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒ„์ „์„ ๋ชจ๋‘ ๊ฒŒ์‹œํ•œ ํ›„ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ๋…น์ƒ‰ ๋ฒ„์ „์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ณ  ํŒŒ๋ž€์ƒ‰ ๋ฒ„์ „์€ QA ํŒ€์ด ๋ณ„๋„์˜ ์„œ๋น„์Šค ๋˜๋Š” ์ง์ ‘ ํฌํŠธ ์ „๋‹ฌ์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp-02
spec:
  template:
    metadata:
      labels:
        app: awesomeapp
        version: "02"

ํŒŒ๋ž€์ƒ‰(์ƒˆ) ๋ฒ„์ „์ด ํ…Œ์ŠคํŠธ๋˜๊ณ  ๋ฆด๋ฆฌ์Šค๊ฐ€ ์Šน์ธ๋˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ํ•ด๋‹น ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜๋˜๊ณ  ๋…น์ƒ‰(์ด์ „) ๋ฒ„์ „์ด ์ ‘ํ˜€์ง‘๋‹ˆ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: awesomeapp
spec:
  selector:
    app: awesomeapp
    version: "02"
...

์นด๋‚˜๋ฆฌ์•„(์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ)

์นด๋‚˜๋ฆฌ์•„ ๋กค์•„์›ƒ์€ ์ฒญ๋ก์ƒ‰ ๋กค์•„์›ƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ œ์–ด ๋ฐ ์‚ฌ์šฉ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ง„๋ณด์ ์ธ ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹. ์ด ์œ ํ˜•์—๋Š” "์Šคํ…”์Šค" ์ถœ์‹œ ๋ฐ A/B ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ „๋žต์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ์ „๋žต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ์—”๋“œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‹œํ—˜ํ•ด ๋ณด์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํ•ต์‹ฌ์€ ๊ฑฐ์˜ ๋™์ผํ•œ ๋‘ ๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ˆ˜์˜ ์‚ฌ์šฉ์ž ํ•˜์œ„ ๊ทธ๋ฃน์—๋งŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ ํ›„ ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์˜ค๋ฅ˜ ์—†์ด ์ง„ํ–‰๋˜๋ฉด ์ƒˆ ๋ฒ„์ „์ด ์ ์ฐจ์ ์œผ๋กœ ์ „์ฒด ์ธํ”„๋ผ์— ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ์ „๋žต์€ Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…์ ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๊ธฐ์กด ํฌ๋“œ๋ฅผ ์ƒˆ ํฌ๋“œ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Istio์™€ ๊ฐ™์€ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํŽธ๋ฆฌํ•˜๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Git์—๋Š” 0.1.0 ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์™€ 0.2.0 ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์นด๋‚˜๋ฆฌ์•„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Istio ๊ฐ€์ƒ ๊ฒŒ์ดํŠธ์›จ์ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ ๊ฐ€์ค‘์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์Œ ๋‘ ๋ฐฐํฌ ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ ๋ฐฐํฌ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

Istio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Canary ๋ฐฐํฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋Š” ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. Istio๋ฅผ ์‚ฌ์šฉํ•œ GitOps ์›Œํฌํ”Œ๋กœ. (๋ฉ”๋ชจ. ๋ฒˆ์—ญ: Canary ์ถœ์‹œ์— ๊ด€ํ•œ ์ž๋ฃŒ๋„ Istio๋กœ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.)

Weaveworks Flagger๋ฅผ ์‚ฌ์šฉํ•œ ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ

์œ„๋ธŒ์›์Šค ํ”Œ๋ž˜๊ฑฐ ์นด๋‚˜๋ฆฌ์•„ ์ถœ์‹œ๋ฅผ ์‰ฝ๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Flagger๋Š” ์ด๋“ค๊ณผ์˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. Istio ๋˜๋Š” AWS App Mesh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ๋ฐ ์ „ํ™˜ํ•˜๊ณ  Prometheus ์ง€ํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์›นํ›„ํฌ๋ฅผ ํ†ตํ•ด ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ ๋ถ„์„์„ ๋ณด์™„ํ•˜์—ฌ ์Šน์ธ ํ…Œ์ŠคํŠธ, ๋กœ๋“œ ํ…Œ์ŠคํŠธ ๋ฐ ๊ธฐํƒ€ ์œ ํ˜•์˜ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๋ฐฐํฌ ๋ฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ˆ˜ํ‰์  Pod ํ™•์žฅ(HPA)์„ ๊ธฐ๋ฐ˜์œผ๋กœ Flagger๋Š” ๊ฐ์ฒด ์„ธํŠธ(Kubernetes ๋ฐฐํฌ, ClusterIP ์„œ๋น„์Šค ๋ฐ Istio ๋˜๋Š” App Mesh ๊ฐ€์ƒ ์„œ๋น„์Šค)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Canary ๋ฐฐํฌ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

์ œ์–ด ๋ฃจํ”„ ๊ตฌํ˜„ (์ œ์–ด ๋ฃจํ”„),Flager๋Š” ์„ฑ๊ณต์ ์ธ HTTP ์š”์ฒญ ๋น„์œจ, ํ‰๊ท  ์š”์ฒญ ๊ธฐ๊ฐ„, Pod ์ƒํƒœ์™€ ๊ฐ™์€ ํ•ต์‹ฌ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ๋™์‹œ์— ์ธก์ •ํ•˜๋ฉด์„œ ์ ์ฐจ์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์นด๋‚˜๋ฆฌ์•„ ์„œ๋ฒ„๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. KPI(ํ•ต์‹ฌ์„ฑ๊ณผ์ง€ํ‘œ) ๋ถ„์„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์นด๋‚˜๋ฆฌ์•„๋Š” ์„ฑ์žฅํ•˜๊ฑฐ๋‚˜ ๋ถ•๊ดดํ•˜๋ฉฐ, ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” Slack์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์‹œ์—ฐ์€ ์ž๋ฃŒ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. App Mesh๋ฅผ ์œ„ํ•œ ์ ์ง„์  ์ „๋‹ฌ.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

๋‹คํฌ(์ˆจ๊ฒจ์ง) ๋˜๋Š” A/B ๋ฐฐํฌ

์Šคํ…”์Šค ๋ฐฐํฌ๋Š” ์นด๋‚˜๋ฆฌ์•„ ์ „๋žต์˜ ๋˜ ๋‹ค๋ฅธ ๋ณ€ํ˜•์ž…๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ๋ฐ Flagger๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ์Šคํ…”์Šค ๋ฐฐํฌ์™€ ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ์˜ ์ฐจ์ด์ ์€ ์Šคํ…”์Šค ๋ฐฐํฌ๋Š” ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ์™€ ๊ฐ™์€ ๋ฐฑ์—”๋“œ๊ฐ€ ์•„๋‹Œ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฐํฌ์˜ ๋˜ ๋‹ค๋ฅธ ์ด๋ฆ„์€ A/B ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ์ œํ•œ๋œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ์„ ๊ตฌ์ ์ธ ํ…Œ์Šคํ„ฐ๋ผ๋Š” ์‚ฌ์‹ค์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ "์Šคํ…”์Šค ๋ฐฐํฌ"๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์‚ฌ์šฉ๋จ).

๊ธฐ๋Šฅ ์Šค์œ„์น˜ ์‚ฌ์šฉ (๊ธฐ๋Šฅ ํ† ๊ธ€) ๋ฐ ๊ธฐํƒ€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ ๊ธฐ๋Šฅ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹, ์‚ฌ์šฉ์ž์˜ ์ฐธ์—ฌ ์—ฌ๋ถ€, ์ƒˆ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ ๊ธฐํƒ€ ์œ ํ˜•์˜ ์ธก์ •ํ•ญ๋ชฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฐฐํฌ ์ „๋žต: ๋กค๋ง, ์žฌ์ƒ์„ฑ, ๋ธ”๋ฃจ/๊ทธ๋ฆฐ, ์นด๋‚˜๋ฆฌ์•„, ๋‹คํฌ(A/B ํ…Œ์ŠคํŠธ)

์‹ ๊ณ ์ž ๋ฐ A/B ๋ฐฐํฌ

๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ์™ธ์—๋„ Flagger๋Š” HTTP ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์นด๋‚˜๋ฆฌ์•„ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. A/B ํ…Œ์ŠคํŠธ์—์„œ๋Š” HTTP ํ—ค๋”๋‚˜ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‚ฌ์šฉ์ž ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํƒ€๊ฒŸํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ์„ธ์…˜ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ํŠนํžˆ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. (์„ธ์…˜ ์–ดํ”ผ๋‹ˆํ‹ฐ). ์ž์„ธํ•œ ๋‚ด์šฉ์€ Flagger ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์ž๋Š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์Šคํ…ŒํŒ ํ”„๋กœ๋‹จ, Weaveworks ์—”์ง€๋‹ˆ์–ด(๊ทธ๋ฆฌ๊ณ  Flagger์˜ ์ฐฝ์‹œ์ž)๋Š” ์ด ๋ชจ๋“  ๋†€๋ผ์šด ๋ฐฐํฌ ํŒจํ„ด์— ๋Œ€ํ•ด ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€