๋™์‹œ์— 2๊ฐœ Istio๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•. Revision์œผ๋กœ Istio๋ฅผ Canary Upgrade ํ•˜๊ธฐ ๐Ÿฃ

2 minute read

๊ท€์—ฌ์šด ์นด๋‚˜๋ฆฌ์•„ (unsplash)

Istio Canary Upgrade

K8s ํด๋Ÿฌ์Šคํ„ฐ์— Istio ๋ฉ”์‰ฌ๋ฅผ ๊ตฌ์ถ•ํ•ด๋‘ฌ๋„ Istio ๋ฒ„์ „์ด ์‹ ๊ทœ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ์ถœ์‹œ๋˜๊ณ , K8s ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๋ฉด ์„ธํŒ…ํ•œ Istio ๋ฉ”์‰ฌ์˜ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์ด ์•ˆ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. Istio๋Š” MSA์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค๋ฃจ๋Š” ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์— Istio ๋ฌธ์„œ์—์„œ๋„ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋งค์šฐ ์‹ ์ค‘ํžˆ ์•Œ ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ƒˆ๋กœ์šด Istio ๋ฒ„์ „์œผ๋กœ ๋ฉ”์‰ฌ๋ฅผ ์„ธํŒ…ํ•ด์•ผ ํ•  ๋•Œ, Istio๋Š” revision๋ผ๋Š” ํƒœ๊ทธ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์ผ๋ถ€๋งŒ ๊ต์ฒดํ•˜๋Š”, Canary Upgrade ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค.

์›๋žœ Istio์—์„œ ๋™์‹œ์— 2๊ฐœ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ๋œจ๋Š” ๊ฑธ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ์•„๋ž˜์™€ ๊ฐ™์ด revision์„ ์ง€์ •ํ•˜๋ฉด 2๊ฐœ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋™์‹œ์— ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

$ istioctl install --revision=canary

๋งŒ์•ฝ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์„ค์น˜ ํ–ˆ๋˜ revision์„ ๊ทธ๋Œ€๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

$ istioctl uninstall --revision=canary

๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์„ ์‹ ๊ทœ revision์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ

test-ns๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— istio-inejction=enabled๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ๋ถ™์–ด์žˆ์–ด์„œ ํ•ด๋‹น ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋œฌ Pod๋“ค์€ sidecar๊ฐ€ ๋ถ™์€ ์ƒํƒœ๋กœ ์„ธํŒ…ํ•ด๋ณด์ž.

$ kubectl create ns test-ns
$ kubectl label namespace test-ns istio-injection=enabled
$ kubectl apply -n test-ns -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/sleep/sleep.yaml
---
NAME                    READY   STATUS    RESTARTS   AGE
sleep-bc9998558-ph8kw   2/2     Running   0          5s

์ด ๊ฒฝ์šฐ๋Š” revision=canary istio๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์žˆ๋˜ istio ๋ฉ”์‰ฌ์˜ ์ œ์–ด๋ฅผ ๋ฐ›๋Š”๋‹ค. ์š” test-ns ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Pod์ด ์ƒˆ๋กœ ๋„์šด canary istio ๋ฉ”์‰ฌ์˜ ์ œ์–ด๋ฅผ ๋ฐ›๋„๋ก ์ˆ˜์ •ํ•ด๋ณด์ž.

์ผ๋‹จ ๊ธฐ์กด์˜ istio-injection ๋ ˆ์ด๋ธ”์„ ์ œ๊ฑฐํ•˜๊ณ  istio.io/rev=canary๋ผ๋Š” ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

$ kubectl label namespace test-ns istio-injection- istio.io/rev=canary

๊ทธ๋ฆฌ๊ณ  Pod๋“ค์„ ๋‹ค์‹œ ๋„์›Œ์ค€๋‹ค.

$ kubectl rollout restart deployment -n test-ns
---
NAME                    READY   STATUS    RESTARTS   AGE
sleep-bbc457487-k5pdt   2/2     Running   0          9s

๊ทธ๋ฆฌ๊ณ  istioctl proxy-status ์ปค๋งจ๋“œ๋กœ istio์˜ proxy ์ƒํƒœ๋“ค์„ ํ™•์ธํ•ด๋ณด๋ฉด

sleep Pod์ด canary istio๋ฅผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!!

istio-injection ๋ ˆ์ด๋ธ”์„ ์ œ๊ฑฐํ•œ ์ด์œ ๋Š” ์š” ๋ ˆ์ด๋ธ”์ด istio.io/rev ๋ ˆ์ด๋ธ”๋ณด๋‹ค ์šฐ์„ ๊ถŒ์„ ๊ฐ–๋Š” ๋ ˆ์ด๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ณ„๋„๋กœ ๋„์šด istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์˜ ๊ณผ์ •์ฒ˜๋Ÿผ ๊ธฐ์กด ๋ ˆ์ด๋ธ”์„ ์ œ๊ฑฐํ•˜๊ณ  istio.io/rev ๋ ˆ์ด๋ธ”๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

istioctl tags

istioctl์—์„œ๋Š” โ€œtagsโ€๋ผ๊ณ  revision์˜ ๋ณ„๋ช…(alias)๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์•„์ง์€ ์™ ์ง€ ์ž˜ ์•ˆ ์“ธ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฌธ์„œ๋งŒ ๋ณด๊ณ  ๋„˜๊ธฐ๊ฒ ๋‹ค ๐Ÿ™‡

โžก๏ธ istio: istioctl tag

์ฐธ๊ณ ์ž๋ฃŒ