Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„ ์ด ์‹œ๋ฆฌ์ฆˆ๋Š” Istio ๊ธฐ๋Šฅ์„ ์†Œ๊ฐœํ•˜๊ณ  ์‹ค์ œ๋กœ ์ด๋ฅผ ์‹œ์—ฐํ•˜๋Š” ๋ฐ ์ „๋…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ๊ตฌ์„ฑ ๋ฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ณด๋‹ค ๋ณต์žกํ•œ ์ธก๋ฉด, ํŠนํžˆ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ผ์šฐํŒ… ๋ฐ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ €์žฅ์†Œ์˜ ๊ตฌ์„ฑ(Kubernetes ๋ฐ Istio์— ๋Œ€ํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ)์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. istio-mastery.

๊ตํ†ต ๊ด€๋ฆฌ

Istio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ํด๋Ÿฌ์Šคํ„ฐ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

  • ๋™์  ์š”์ฒญ ๋ผ์šฐํŒ…: ์นด๋‚˜๋ฆฌ์•„ ์ถœ์‹œ, A/B ํ…Œ์ŠคํŠธ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ: ํ•ด์‹œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ˆœํ•˜๊ณ  ์ผ๊ด€์ ์ž…๋‹ˆ๋‹ค.
  • ๋‚™์ƒ ํ›„ ํšŒ๋ณต: ์‹œ๊ฐ„ ์ดˆ๊ณผ, ์žฌ์‹œ๋„, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ;
  • ๊ฒฐํ•จ ์‚ฝ์ž…: ์ง€์—ฐ, ์š”์ฒญ ์ค‘๋‹จ ๋“ฑ

๊ธฐ์‚ฌ๊ฐ€ ๊ณ„์†๋˜๋ฉด์„œ ์„ ํƒํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์†Œ๊ฐœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. DestinationRules (์ฆ‰, ํŠธ๋ž˜ํ”ฝ/์š”์ฒญ ์ˆ˜์‹ ์ž์— ๋Œ€ํ•œ ๊ทœ์น™ - ๋Œ€๋žต์ ์ธ ๋ฒˆ์—ญ), ์ด๋ฅผ ํ†ตํ•ด A/B ํ…Œ์ŠคํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

A/B ํ…Œ์ŠคํŠธ: ์‹ค์ œ๋กœ DestinationRules

A/B ํ…Œ์ŠคํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋ณดํ†ต ์‹œ๊ฐ์ ์œผ๋กœ ๋‹ค๋ฆ„)์ด ์žˆ๊ณ  ์–ด๋–ค ๋ฒ„์ „์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ์ง€ 100% ํ™•์‹ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒ„์ „์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๊ณ  ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

A/B ํ…Œ์ŠคํŠธ ์‹œ์—ฐ์— ํ•„์š”ํ•œ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์˜ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created

"๊ทธ๋ฆฐ ๋ฒ„์ „"์˜ ๋ฐฐํฌ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ์œ„์น˜์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  1. ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ํƒœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. istio-green,
  2. ํฌ๋“œ์—๋Š” ๋ผ๋ฒจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. version: green.

๋‘ ๋ฐฐํฌ ๋ชจ๋‘ ๋ผ๋ฒจ์ด ์žˆ์œผ๋ฏ€๋กœ app: sa-frontend,๊ฐ€์ƒ ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…๋œ ์š”์ฒญ sa-external-services ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด sa-frontend, ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜๊ณ  ๋กœ๋“œ๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ๋ผ์šด๋“œ ๋กœ๋นˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์œผ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€
์š”์ฒญํ•œ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์ด๋Ÿฌํ•œ ํŒŒ์ผ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ด๋ฆ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค:

$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js

์ฆ‰, index.htmlํ•œ ๋ฒ„์ „์˜ ์ •์  ํŒŒ์ผ์„ ์š”์ฒญํ•˜๋Š” ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์˜ํ•ด ๋‹ค๋ฅธ ๋ฒ„์ „์ด ์žˆ๋Š” ํฌ๋“œ๋กœ ์ „์†ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ถ„๋ช…ํ•œ ์ด์œ ๋กœ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ ์‚ฌํ•ญ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.index.html์„ ์ œ๊ณตํ•œ ๋™์ผํ•œ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ›„์† ์š”์ฒญ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.".

์ผ๊ด€๋œ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (์ผ๊ด€์ ์ธ ํ•ด์‹œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ). ์ด ๊ฒฝ์šฐ ๋™์ผํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋™์ผํ•œ ๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค., ์‚ฌ์ „ ์ •์˜๋œ ์†์„ฑ(์˜ˆ: HTTP ํ—ค๋”)์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.โ€ŠDestinationRules๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ ์ง€๊ทœ์น™

ํ›„ ๊ฐ€์ƒ์„œ๋น„์Šค ์›ํ•˜๋Š” ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. DestinationRules๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ํ–ฅํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์— ์ ์šฉ๋  ์ •์ฑ…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€
Istio ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ

์ฃผ์˜: ์—ฌ๊ธฐ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ Istio ๋ฆฌ์†Œ์Šค์˜ ์˜ํ–ฅ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ์‹์œผ๋กœ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์š”์ฒญ์„ ๋ณด๋‚ผ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ CRD์— ๊ตฌ์„ฑ๋œ Ingress ๊ฒŒ์ดํŠธ์›จ์ด์˜ Envoy์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๋Œ€์ƒ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๊ด€๋œ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋™์ผํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•˜๋„๋ก ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Destinationrule-sa-frontend.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-frontend
spec:
  host: sa-frontend
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: version   # 1

1 - HTTP ํ—ค๋”์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. version.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created

์ด์ œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ํ—ค๋”๋ฅผ ์ง€์ •ํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํŒŒ์ผ์„ ์–ป์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. version:

$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main

์ฃผ์˜: ํ—ค๋”์— ๋‹ค๋ฅธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ๊ฒฐ๊ณผ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™•์žฅ ํฌ๋กฌ์œผ๋กœ (๋˜๋Š” ์ด๊ฒƒ์œผ๋กœ Firefox์˜ ๊ฒฝ์šฐ - ์•ฝ. ๋ฒˆ์—ญ).

์ผ๋ฐ˜์ ์œผ๋กœ DestinationRules๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์˜์—ญ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ณต์‹ ๋ฌธ์„œ.

VirtualService๋ฅผ ๋” ์ž์„ธํžˆ ์—ฐ๊ตฌํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ "๊ทธ๋ฆฐ ๋ฒ„์ „"๊ณผ ํ•ด๋‹น ํŠธ๋ž˜ํ”ฝ ๋ฐฉํ–ฅ ๊ทœ์น™์„ ์‚ญ์ œํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions โ€œsa-frontend-greenโ€ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io โ€œsa-frontendโ€ deleted

๋ฏธ๋Ÿฌ๋ง: ์‹ค์ œ ๊ฐ€์ƒ ์„œ๋น„์Šค

๊ทธ๋ฆผ์ž (โ€œ์ฐจํโ€) ๋˜๋Š” ๋ฏธ๋Ÿฌ๋ง (โ€œ๋ฏธ๋Ÿฌ๋งโ€) ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ํ”„๋กœ๋•์…˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์›ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋œ ๋‘ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ๋ณต์ œ(โ€œ๋ฏธ๋Ÿฌ๋งโ€)ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ด๋Š” ๋™๋ฃŒ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ˆ„๊ตฌ๋„ ์‹ค์ œ๋กœ ๊ฒ€ํ† ํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๊ฑฐ๋Œ€ํ•œ ๋จผ์ง€ ๋ฉ์–ด๋ฆฌ ํ˜•ํƒœ๋กœ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ํ•˜๋Š” ๋•Œ์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” SA-Logic์˜ ๋‘ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(buggy) ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ:

$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created

์ด์ œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. app=sa-logic ๋˜ํ•œ ํ•ด๋‹น ๋ฒ„์ „์˜ ๋ผ๋ฒจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl get pods -l app=sa-logic --show-labels
NAME                              READY   LABELS
sa-logic-568498cb4d-2sjwj         2/2     app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c         2/2     app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66   2/2     app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz   2/2     app=sa-logic,version=v2

์„œ๋น„์Šค sa-logic ๋ผ๋ฒจ์ด ์žˆ๋Š” ํฌ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•จ app=sa-logic, ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์š”์ฒญ์€ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€

...ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์š”์ฒญ์ด v1 ์ธ์Šคํ„ด์Šค๋กœ ์ „์†ก๋˜๊ณ  v2 ์ธ์Šคํ„ด์Šค๋กœ ๋ฏธ๋Ÿฌ๋ง๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€

์šฐ๋ฆฌ๋Š” VirtualService๋ฅผ DestinationRule๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ทœ์น™์€ VirtualService์˜ ํ•˜์œ„ ์ง‘ํ•ฉ๊ณผ ํŠน์ • ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ๊ทœ์น™์—์„œ ํ•˜์œ„ ์ง‘ํ•ฉ ์ •์˜

ํ•˜์œ„ ์ง‘ํ•ฉ (ํ•˜์œ„ ์ง‘ํ•ฉ) ๋‹ค์Œ ๊ตฌ์„ฑ์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค(sa-logic-subsets-destinationrule.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: sa-logic
spec:
  host: sa-logic    # 1
  subsets:
  - name: v1        # 2
    labels:
      version: v1   # 3
  - name: v2
    labels:
      version: v2

  1. ์ฃผ์ธ (host) ์ด ๊ทœ์น™์€ ๊ฒฝ๋กœ๊ฐ€ ์„œ๋น„์Šค๋ฅผ ํ–ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋˜๋„๋ก ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. sa-logic;
  2. ์ œ๋ชฉ(name) ํ•˜์œ„ ์ง‘ํ•ฉ์€ ํ•˜์œ„ ์ง‘ํ•ฉ ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ผ๋ฒจ(label)๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜์œ„ ์ง‘ํ•ฉ์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ํ‚ค-๊ฐ’ ์Œ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created

์ด์ œ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ์ •์˜๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด sa-logic์— ๋Œ€ํ•œ ์š”์ฒญ์— ๊ทœ์น™์„ ์ ์šฉํ•˜๋„๋ก VirtualService๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ๋ผ์šฐํŒ…๋จ v1,
  2. ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ๋ฏธ๋Ÿฌ๋ง๋จ v2.

๋‹ค์Œ ์„ ์–ธ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„ํš์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(sa-logic-subsets-shadowing-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic          
  http:
  - route:
    - destination:
        host: sa-logic  
        subset: v1      
    mirror:             
      host: sa-logic     
      subset: v2

์—ฌ๊ธฐ์—๋Š” ์„ค๋ช…์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ชจ์Šต์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created

๋‹ค์Œ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜์—ฌ ๋กœ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ while true; do curl -v http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Grafana์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „(buggy)์€ ์š”์ฒญ์˜ ~60%์— ๋Œ€ํ•ด ์‹คํŒจ๋ฅผ ์ดˆ๋ž˜ํ•˜์ง€๋งŒ ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค์—์„œ ์‘๋‹ตํ•  ๋•Œ ์ด๋Ÿฌํ•œ ์‹คํŒจ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€
๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ sa-logic ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์„ฑ๊ณต์ ์ธ ์‘๋‹ต

์—ฌ๊ธฐ์„œ๋Š” ๋จผ์ € VirtualService๊ฐ€ ์„œ๋น„์Šค์˜ Envoy์— ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. sa-web-app ์š”์ฒญ์„ ํ•œ๋‹ค sa-logic, VirtualService๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ v1 ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ์š”์ฒญ์„ ์„œ๋น„์Šค์˜ v2 ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ๋ฏธ๋Ÿฌ๋งํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ์‚ฌ์ด๋“œ์นด Envoy๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. sa-logic.

์—ฌ๋Ÿฌ๋ถ„์€ ์ด๋ฏธ ๊ฐ€์ƒ ์„œ๋น„์Šค๊ฐ€ ๋‹จ์ˆœํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด ์ œํ’ˆ์ด ์ •๋ง ํ›Œ๋ฅญํ•˜๋‹ค๋Š” ์ ์„ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์นด๋‚˜๋ฆฌ์•„ ์ถœ์‹œ

Canary ๋ฐฐํฌ๋Š” ์†Œ์ˆ˜์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถœ์‹œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ ํ›„์—์•ผ ์ด๋ฏธ ํ•ด๋‹น (๋ฆด๋ฆฌ์Šค์˜) ํ’ˆ์งˆ์— ํ™•์‹ ์„ ๊ฐ–๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.ะพ๋” ๋งŽ์€ ์ฒญ์ค‘.

์นด๋‚˜๋ฆฌ์•„ ๋กค์•„์›ƒ์„ ์‹œ์—ฐํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๊ณ„์†ํ•ด์„œ ํ•˜์œ„ ์„ธํŠธ๋กœ ์ž‘์—…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. buggy ัƒ sa-logic.

์‚ฌ์†Œํ•œ ์ผ๋กœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  ์‚ฌ์šฉ์ž์˜ 20%๋ฅผ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ์ฆ‰์‹œ ๋ณด๋‚ด๊ณ (์ด๋Š” ์นด๋‚˜๋ฆฌ์•„ ์ถœ์‹œ๋ฅผ ๋‚˜ํƒ€๋ƒ„) ๋‚˜๋จธ์ง€ 80%๋Š” ์ผ๋ฐ˜ ์„œ๋น„์Šค๋กœ ๋ณด๋‚ด๋„๋ก ํ•ฉ์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ VirtualService(sa-logic-subsets-canary-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic    
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 80         # 1
    - destination: 
        host: sa-logic
        subset: v2
      weight: 20 # 1

1์€ ๋ฌด๊ฒŒ(weight) - ์ˆ˜์‹ ์ž ๋˜๋Š” ์ˆ˜์‹ ์ž์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์š”์ฒญ์˜ ๋น„์œจ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ VirtualService ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. sa-logic ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

... ๊ทธ๋Ÿฌ๋ฉด ์ผ๋ถ€ ์š”์ฒญ์ด ์‹คํŒจ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ์ฆ‰์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ while true; do 
   curl -i http://$EXTERNAL_IP/sentiment 
   -H "Content-type: application/json" 
   -d '{"sentence": "I love yogobella"}' 
   --silent -w "Time: %{time_total}s t Status: %{http_code}n" 
   -o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500

VirtualServices๋Š” ์นด๋‚˜๋ฆฌ์•„ ๋กค์•„์›ƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฌธ์ œ์˜ ์ž ์žฌ์  ์˜ํ–ฅ์„ ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜์˜ 20%๋กœ ์ขํ˜”์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ๋ฉ‹์ง„! ์ด์ œ ์ฝ”๋“œ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์ฆ‰, ํ•ญ์ƒ...) ๋ฏธ๋Ÿฌ๋ง ๋ฐ ์นด๋‚˜๋ฆฌ์•„ ๋กค์•„์›ƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ์žฌ์‹œ๋„

๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ํ•ญ์ƒ ์ฝ”๋“œ์—์„œ ๋๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. "์˜ ๋ชฉ๋ก์—์„œ๋ถ„์‚ฐ ์ปดํ“จํŒ…์— ๋Œ€ํ•œ 8๊ฐ€์ง€ ์˜คํ•ด"์ฒซ ๋ฒˆ์งธ๋Š” '๋„คํŠธ์›Œํฌ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค'๋Š” ์ž˜๋ชป๋œ ๋ฏฟ์Œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋„คํŠธ์›Œํฌ ์•„๋‹ˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ํƒ€์ž„์•„์›ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (์‹œ๊ฐ„ ์ดˆ๊ณผ) ๊ทธ๋ฆฌ๊ณ  ์žฌ์‹œ๋„ (์žฌ์‹œ๋„).

๋ฐ๋ชจ๋ฅผ ์œ„ํ•ด ๋™์ผํ•œ ๋ฌธ์ œ ๋ฒ„์ „์„ ๊ณ„์† ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. sa-logic (buggy), ๋ฌด์ž‘์œ„ ์˜ค๋ฅ˜๋กœ ๋„คํŠธ์›Œํฌ์˜ ๋ถˆ์•ˆ์ •์„ฑ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆด ํ™•๋ฅ ์ด 1/3์ด๊ณ , ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜๋กœ ๋๋‚  ํ™•๋ฅ ์ด 1/3์ด๋ฉฐ, ํŽ˜์ด์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋  ํ™•๋ฅ ์ด 1/3์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ์™„ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์‚ถ์„ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐ 8์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. ์š”์ฒญ์ด ์‹คํŒจํ•˜๋ฉด ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.

๊ตฌํ˜„์„ ์œ„ํ•ด ๋‹ค์Œ ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(sa-logic-์žฌ์‹œ๋„-์‹œ๊ฐ„ ์ดˆ๊ณผ-vs.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sa-logic
spec:
  hosts:
    - sa-logic
  http:
  - route: 
    - destination: 
        host: sa-logic
        subset: v1
      weight: 50
    - destination: 
        host: sa-logic
        subset: v2
      weight: 50
    timeout: 8s           # 1
    retries:
      attempts: 3         # 2
      perTryTimeout: 3s # 3

  1. ์š”์ฒญ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” 8์ดˆ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  2. ์š”์ฒญ์€ 3๋ฒˆ ์žฌ์‹œ๋„๋ฉ๋‹ˆ๋‹ค.
  3. ๊ทธ๋ฆฌ๊ณ  ์‘๋‹ต ์‹œ๊ฐ„์ด 3์ดˆ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๊ฐ ์‹œ๋„๋Š” ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ 8์ดˆ ์ด์ƒ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๊ณ  ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์‘๋‹ต์„ ์–ป๊ธฐ ์œ„ํ•ด XNUMX๋ฒˆ์˜ ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•˜์—ฌ ์„ฑ๊ณต์ ์ธ ์‘๋‹ต ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured

๊ทธ๋ฆฌ๊ณ  ์„ฑ๊ณต์ ์ธ ์‘๋‹ต ์ˆ˜๊ฐ€ ์œ„์—์„œ ์ฆ๊ฐ€ํ–ˆ์Œ์„ Grafana ๊ทธ๋ž˜ํ”„์—์„œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Istio๋ฅผ ์‚ฌ์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. 2 ๋ถ€
์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ์žฌ์‹œ๋„ ์ถ”๊ฐ€ ํ›„ ์„ฑ๊ณต์ ์ธ ์‘๋‹ต ํ†ต๊ณ„ ๊ฐœ์„ 

๋‹ค์Œ ์„น์…˜์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— (๋˜๋Š” ์˜คํžˆ๋ ค ๊ธฐ์‚ฌ์˜ ๋‹ค์Œ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์—ฌ๊ธฐ์—๋Š” ๋” ์ด์ƒ ์‹ค์ œ ์‹คํ—˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋žต ๋ฒˆ์—ญ์ž…๋‹ˆ๋‹ค.), ์‚ญ์ œ sa-logic-buggy ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ VirtualService๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ kubectl delete deployment sa-logic-buggy
deployment.extensions โ€œsa-logic-buggyโ€ deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io โ€œsa-logicโ€ deleted

ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ๋ฐ ๊ฒฉ๋ฒฝ ํŒจํ„ด

์šฐ๋ฆฌ๋Š” ์ž์ฒด ๋ณต๊ตฌ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํŒจํ„ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ž๊ฐ€ ์น˜์œ ) ์„œ๋น„์Šค.

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

์นธ๋ง‰์ด ("๋ถ„ํ• ") ์„œ๋น„์Šค ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋น„์Šค B๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  ๋‹ค๋ฅธ ์„œ๋น„์Šค(์„œ๋น„์Šค B์˜ ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์„œ๋น„์Šค B์— ์š”์ฒญ์„ ํ•˜์—ฌ ์Šค๋ ˆ๋“œ ํ’€์ด ์†Œ์ง„๋˜๊ณ  ๋‹ค๋ฅธ ์š”์ฒญ์„ ์„œ๋น„์Šคํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(์„œ๋น„์Šค B์˜ ์š”์ฒญ์ด ์•„๋‹ˆ๋”๋ผ๋„). (์ฐธ๊ณ : ํŒจํ„ด์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.)

์ด๋Ÿฌํ•œ ํŒจํ„ด์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ฐพ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ, ๋˜ํ•œ ๊ธฐ์‚ฌ์˜ ๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ๋…ผ์˜๋  ์ธ์ฆ ๋ฐ ์Šน์ธ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

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

์ถœ์ฒ˜ : habr.com

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