Istio Revision and Canary Upgrade
๊ท์ฌ์ด ์นด๋๋ฆฌ์ (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-injection=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