๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ ๋ธ๋ฃจ/๊ทธ๋ฆฐ(Blue-Green) ๋ฐฐํฌ ์ ๋ต์ ๋ค๋ฃน๋๋ค.
๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ ์๋น์ค๋ฅผ ์ค๋จ ์์ด ๋ฐฐํฌํ๊ณ ๋กค๋ฐฑ์ด ์ฉ์ดํ ๋ฐฐํฌ ๋ฐฉ์์
๋๋ค.
Istio์์๋ VirtualService์ DestinationRule์ ํ์ฉํ์ฌ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ๊ฐ๋ , ํธ๋ํฝ ๋ฏธ๋ฌ๋ง ๊ธฐ๋ฒ, ๊ฐ์ค์น ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ํ์ฉํ ๋ฐฐํฌ ์ค์ต์ ์งํํ๊ฒ ์ต๋๋ค.
๐น 1. ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋?
โ 1.1 ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ๊ฐ๋
๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ ๊ธฐ์กด ๋ฒ์ (Blue)๊ณผ ์๋ก์ด ๋ฒ์ (Green)์ ๋์์ ์ด์ํ๋ฉด์,
ํธ๋ํฝ์ ์ ์ง์ ์ผ๋ก ์๋ก์ด ๋ฒ์ (Green)์ผ๋ก ์ด๋์ํค๋ ๋ฐฐํฌ ์ ๋ต์
๋๋ค.
๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์ ํ๋ฆ
- Blue(๊ธฐ์กด ๋ฒ์ )์ Green(์๋ก์ด ๋ฒ์ ) ํ๊ฒฝ์ ๋ชจ๋ ์ด์
- ํธ๋ํฝ์ ์ผ๋ถ๋ฅผ Green์ผ๋ก ์ด๋ํ๋ฉฐ ํ ์คํธ
- ์ด์์ด ์์ผ๋ฉด ์ ์ฒด ํธ๋ํฝ์ Green์ผ๋ก ์ด๋
- ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฆ์ Blue๋ก ๋กค๋ฐฑ ๊ฐ๋ฅ
๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์ ์ฅ์
- ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ฐ๋ฅ
- ํธ๋ํฝ์ ์ ์ง์ ์ผ๋ก ์ด๋ํ๋ฉฐ ์๋น์ค ์์ ์ฑ ํ๋ณด
- ๋ฌธ์ ๋ฐ์ ์ ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ๋ฅ
โ 1.2 Istio์์ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ ์ฉ ๋ฐฉ์
Istio์์๋ VirtualService์ DestinationRule์ ํ์ฉํ์ฌ,
ํธ๋ํฝ์ ์ ์ง์ ์ผ๋ก ๊ธฐ์กด ๋ฒ์ (Blue)์์ ์ ๊ท ๋ฒ์ (Green)์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- VirtualService โ ํธ๋ํฝ ๋ผ์ฐํ ์ค์ (๊ฐ์ค์น ์กฐ์ , ํธ๋ํฝ ๋ฏธ๋ฌ๋ง ์ ์ฉ)
- DestinationRule โ ์๋น์ค์ ๋ฒ์ ๋ณ ์๋ธ์ (Subset) ์ ์
๐น 2. ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ค์ต (๊ฐ์ค์น ๊ธฐ๋ฐ ๋ผ์ฐํ )
โ 2.1 ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ํ DestinationRule ์ค์
์๋ YAML์ ๊ธฐ์กด ๋ฒ์ (v1)๊ณผ ์๋ก์ด ๋ฒ์ (v2)์ ๊ตฌ๋ถํ๋ DestinationRule ์ค์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service
spec:
host: my-service # ๋์ ์๋น์ค ์ด๋ฆ
subsets:
- name: v1 # ๊ธฐ์กด ์๋น์ค ๋ฒ์ (Blue)
labels:
version: v1
- name: v2 # ์ ๊ท ์๋น์ค ๋ฒ์ (Green)
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN # ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ํธ๋ํฝ ๋ถ๋ฐฐ
์ค๋ช :
- subsets.name: v1 โ ๊ธฐ์กด ๋ฒ์ (Blue) ์๋น์ค ์ ์
- subsets.name: v2 โ ์ ๊ท ๋ฒ์ (Green) ์๋น์ค ์ ์
- loadBalancer.simple: ROUND_ROBIN โ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ํธ๋ํฝ์ ๋ฐฐ๋ถ
โ 2.2 ๋ธ๋ฃจ/๊ทธ๋ฆฐ ํธ๋ํฝ ๋ถ๋ฐฐ ์ค์ (VirtualService ์ ์ฉ)
์๋ VirtualService๋ ํธ๋ํฝ์ 90%๋ ๊ธฐ์กด ์๋น์ค(v1), 10%๋ ์ ๊ท ์๋น์ค(v2)๋ก ๋ผ์ฐํ ํ๋ ์ค์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1 # ๊ธฐ์กด ์๋น์ค(v1)
weight: 90 # 90% ํธ๋ํฝ์ ๊ธฐ์กด ๋ฒ์ ์ผ๋ก ์ ๋ฌ
- destination:
host: my-service
subset: v2 # ์ ๊ท ์๋น์ค(v2)
weight: 10 # 10% ํธ๋ํฝ์ ์ ๊ท ๋ฒ์ ์ผ๋ก ์ ๋ฌ
์ค๋ช :
- weight: 90 โ ๊ธฐ์กด v1 ์๋น์ค๋ก 90% ํธ๋ํฝ์ ๋ณด๋
- weight: 10 โ ์ ๊ท v2 ์๋น์ค๋ก 10% ํธ๋ํฝ์ ๋ณด๋
- ์ ์ง์ ์ผ๋ก ์ ๊ท ์๋น์ค(v2)๋ก ํธ๋ํฝ์ ์ฆ๊ฐ์ํค๋ฉด์ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์งํ ๊ฐ๋ฅ
๐น 3. ํธ๋ํฝ ๋ฏธ๋ฌ๋ง์ ํ์ฉํ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ํ ์คํธ
โ 3.1 ํธ๋ํฝ ๋ฏธ๋ฌ๋ง์ด๋?
ํธ๋ํฝ ๋ฏธ๋ฌ๋ง์ ์ค์ ์ฌ์ฉ์ ์์ฒญ์ ๊ธฐ์กด ์๋น์ค(v1)๋ก ๋ณด๋ด๋ฉด์, ๋์์ ๋ณต์ฌ๋ ์์ฒญ์ ์๋ก์ด ์๋น์ค(v2)๋ก ๋ณด๋ด ํ
์คํธํ๋ ๊ธฐ๋ฒ์
๋๋ค.
์ด๋ฅผ ํตํด ์ค์ ํ๊ฒฝ์์ ์ ๊ท ์๋น์ค์ ์ฑ๋ฅ ๋ฐ ์ค๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
โ 3.2 ํธ๋ํฝ ๋ฏธ๋ฌ๋ง ์ค์ (VirtualService ์ ์ฉ)
์๋ VirtualService๋ ๋ชจ๋ ์์ฒญ์ ๊ธฐ์กด v1 ์๋น์ค๋ก ๋ณด๋ด๋ฉด์, 100% ํธ๋ํฝ์ v2๋ก ๋ฏธ๋ฌ๋งํ๋ ์ค์ ์ ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
subset: v1 # ๊ธฐ์กด ์๋น์ค(v1)
mirror:
host: my-service
subset: v2 # ์ ๊ท ์๋น์ค(v2)๋ก ํธ๋ํฝ ๋ฏธ๋ฌ๋ง
mirrorPercentage:
value: 100.0 # 100% ํธ๋ํฝ์ ๋ฏธ๋ฌ๋ง (์๋ณธ ์์ฒญ์ v1์ผ๋ก๋ง ์ ๋ฌ๋จ)
์ค๋ช :
- route.destination.subset: v1 โ ๋ชจ๋ ์์ฒญ์ ๊ธฐ์กด v1 ์๋น์ค๋ก ์ ๋ฌ
- mirror.destination.subset: v2 โ ๊ธฐ์กด ์์ฒญ์ v2 ์๋น์ค๋ก ๋ณต์ฌํ์ฌ ๋ฏธ๋ฌ๋ง
- mirrorPercentage.value: 100.0 โ ๋ชจ๋ ํธ๋ํฝ์ v2 ์๋น์ค์๋ ์ ๋ฌ
๐น 4. ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์งํ ๋ฐฉ๋ฒ
1๏ธโฃ ์ด๊ธฐ ์ํ:
- ๊ธฐ์กด ์๋น์ค(v1)์ 100% ํธ๋ํฝ ์ ๋ฌ
- ์ ๊ท ์๋น์ค(v2)์๋ ํธ๋ํฝ ๋ฏธ๋ฌ๋ง ์ ์ฉํ์ฌ ํ ์คํธ
2๏ธโฃ ํธ๋ํฝ ๋ถ๋ฐฐ ์์:
- VirtualService๋ฅผ ์ ๋ฐ์ดํธํ์ฌ v2๋ก 10% ํธ๋ํฝ ์ ๋ฌ
- ๋๋จธ์ง 90%๋ v1์ผ๋ก ์ ์ง
3๏ธโฃ ์ ์ง์ ์ฆ๊ฐ:
- v2์ ์์ ์ฑ์ด ํ์ธ๋๋ฉด, ํธ๋ํฝ์ 50%๋ก ์ฆ๊ฐ
- ์ดํ 100%๊น์ง ์ด๋
4๏ธโฃ ๋ฐฐํฌ ์๋ฃ ๋ฐ ๋กค๋ฐฑ ์ต์ :
- v2๊ฐ ์์ ํ ์์ ์ ์ด๋ฉด, v1์ ์ ๊ฑฐ
- ๋ฌธ์ ๋ฐ์ ์ ํธ๋ํฝ์ ๋ค์ v1์ผ๋ก ๋๋๋ฆฌ๋ฉด ์ฆ์ ๋กค๋ฐฑ ๊ฐ๋ฅ
๐ ๊ฒฐ๋ก
- ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ ๊ธฐ์กด ๋ฒ์ (Blue)๊ณผ ์ ๊ท ๋ฒ์ (Green)์ ๋์์ ์ด์ํ๋ฉด์, ์ ์ง์ ์ผ๋ก ํธ๋ํฝ์ ์ด๋ํ๋ ๋ฐฐํฌ ๋ฐฉ์์ ๋๋ค.
- VirtualService์ DestinationRule์ ํ์ฉํ์ฌ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ๋ฅผ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
- ํธ๋ํฝ ๋ฏธ๋ฌ๋ง์ ํ์ฉํ๋ฉด, ์ค์ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์ ๊ท ์๋น์ค์ ์ฑ๋ฅ์ ํ ์คํธํ ์ ์์ต๋๋ค.
- ์ ์ง์ ์ธ ํธ๋ํฝ ์ด๋์ ํตํด ์์ ์ฑ์ ํ๋ณดํ ํ ์ ์ฒด ํธ๋ํฝ์ ์๋ก์ด ๋ฒ์ ์ผ๋ก ์ด๋ ๊ฐ๋ฅํ๋ฉฐ, ๋กค๋ฐฑ์ด ์ฉ์ดํฉ๋๋ค.