๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ ๋ฒ์ ์
๊ทธ๋ ์ด๋ ๋ฐ ๋กค๋ฐฑ(rollback) ์ ๋ต์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Istio๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๋ ํ๋ก์ ํธ์ด๋ฏ๋ก ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๋ณด์ ํจ์น๋ฅผ ํฌํจํ ์
๋ฐ์ดํธ๊ฐ ์์ฃผ ์ด๋ฃจ์ด์ง๋๋ค.
๊ทธ๋ฌ๋ ์
๊ทธ๋ ์ด๋ ๊ณผ์ ์์ ์๋น์ค ์ค๋จ์ด๋ ์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ์คํ ์ ๊ทผ์ด ํ์ํฉ๋๋ค.
์ด ๊ธ์์๋ Istio์ ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ, ์์ ํ ๋กค๋ฐฑ ์ ๋ต ๋ฐ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐น 1. Istio ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ํ ์ด์
โ 1.1 Istio ์ ๊ทธ๋ ์ด๋๊ฐ ์ค์ํ ์ด์
Istio๋ ์ ๊ธฐ์ ์ผ๋ก ์๋ก์ด ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ฆ๋๋ฉฐ, ๋ณด์ ํจ์น ๋ฐ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฅ์ด ํฌํจ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ต์ ๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ํ์ฌ ๋ณด์ ๋ฐ ์ฑ๋ฅ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Istio ์ ๊ทธ๋ ์ด๋์ ์ฃผ์ ๋ชฉ์
1๏ธโฃ ๋ณด์ ์ทจ์ฝ์ ํจ์น → ์ต์ ๋ณด์ ์
๋ฐ์ดํธ ์ ์ฉ
2๏ธโฃ ์ฑ๋ฅ ๊ฐ์ → ๋คํธ์ํฌ ์ต์ ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์
3๏ธโฃ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ → ์ต์ Istio ๊ธฐ๋ฅ ํ์ฉ ๊ฐ๋ฅ
4๏ธโฃ ๋ฒ๊ทธ ์์ → ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ค๋ฅ ํด๊ฒฐ
๐ก ์ ๊ทธ๋ ์ด๋๋ฅผ ์งํํ๊ธฐ ์ , ๊ธฐ์กด ์๋น์ค์์ ํธํ์ฑ์ ๋ฐ๋์ ํ ์คํธํด์ผ ํฉ๋๋ค.
๐น 2. Istio ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ
โ 2.1 ํ์ฌ Istio ๋ฒ์ ํ์ธ
Istio์ ํ์ฌ ์ค์น๋ ๋ฒ์ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
istioctl version
์ถ๋ ฅ ์์ :
client version: 1.17.0
control plane version: 1.16.2
data plane version: 1.16.2 (7 proxies)
๐ก control plane version๊ณผ data plane version์ด ๋ค๋ฅด๋ฉด, Sidecar๊ฐ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋์ง ์์์ ์ ์์ต๋๋ค.
โ 2.2 Istio ์ ๊ทธ๋ ์ด๋ ์ค๋น (์ฌ์ ์ ๊ฒ)
Istio๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ์ ์, ๊ธฐ์กด ์ค์ ์ด ์ ๋ฒ์ ๊ณผ ํธํ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
istioctl upgrade --dry-run
์ถ๋ ฅ ์์ :
โ Istio control plane upgrade compatibility check passed
โ No incompatible configurations detected
๐ก --dry-run ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ณ๊ฒฝ ์์ด ์ ๊ทธ๋ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
โ 2.3 Istio Control Plane ์ ๊ทธ๋ ์ด๋ (istiod ์ ๊ทธ๋ ์ด๋)
Istio Control Plane์ ์๋ก์ด ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
istioctl upgrade
์ ๊ทธ๋ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์๋์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n istio-system
์ถ๋ ฅ ์์ :
NAME READY STATUS RESTARTS AGE
istiod-1-17-0-xyz123 1/1 Running 0 2m
๐ก Control Plane์ด ์ ์์ ์ผ๋ก ์ฌ์์๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
โ 2.4 Data Plane(Sidecar) ์ ๊ทธ๋ ์ด๋
Sidecar Proxy(Envoy)๋ ์ต์ ๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ํด์ผ ํฉ๋๋ค.
์
๊ทธ๋ ์ด๋๋ฅผ ์งํํ์ง ์์ผ๋ฉด Control Plane๊ณผ Data Plane ๊ฐ์ ๋ฒ์ ๋ถ์ผ์น๋ก ์ธํด ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์์ ์ ์์ต๋๋ค.
kubectl rollout restart deployment -n default
์ด์ Data Plane์ด ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋์๋์ง ํ์ธํฉ๋๋ค.
istioctl proxy-status
์ถ๋ ฅ ์์ :
NAME CDS LDS EDS RDS VERSION
my-app-123456-abc.default SYNCED SYNCED SYNCED SYNCED 1.17.0
๐ก VERSION ๊ฐ์ด Control Plane๊ณผ ๋์ผํ ๋ฒ์ (1.17.0)์ธ์ง ํ์ธํฉ๋๋ค.
๐น 3. Istio ๋กค๋ฐฑ(rollback) ์ ๋ต
โ 3.1 ๋กค๋ฐฑ์ด ํ์ํ ๊ฒฝ์ฐ
Istio ์
๊ทธ๋ ์ด๋ ํ ์๋น์ค ์ด์์ด ๋ฐ์ํ๋ฉด, ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํด์ผ ํฉ๋๋ค.
๋กค๋ฐฑ์ด ํ์ํ ๊ฒฝ์ฐ:
1๏ธโฃ ๋คํธ์ํฌ ํธ๋ํฝ ์ฐจ๋จ → ํน์ ์๋น์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
2๏ธโฃ ์ฑ๋ฅ ์ ํ → Latency ์ฆ๊ฐ ๋๋ CPU ์ฌ์ฉ๋ ๊ธ์ฆ
3๏ธโฃ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ์ ํธํ์ฑ ๋ฌธ์ → ๊ธฐ์กด ์ค์ ๊ณผ ์ถฉ๋ ๋ฐ์
โ 3.2 Istio Control Plane ๋กค๋ฐฑ
์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๋ ค๋ฉด, ์ด์ Istio ๋ฒ์ ์ ๋ค์ ์ค์นํด์ผ ํฉ๋๋ค.
istioctl install --set profile=default --set revision=1-16-2
์ ๊ทธ๋ ์ด๋ํ Control Plane์ ์ญ์ ํฉ๋๋ค.
kubectl delete deployment istiod-1-17-0 -n istio-system
์ด์ Istio์ ์ด์ ๋ฒ์ ์ด ์ ์์ ์ผ๋ก ์คํ๋๋์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n istio-system
์ถ๋ ฅ ์์ :
NAME READY STATUS RESTARTS AGE
istiod-1-16-2-xyz123 1/1 Running 0 2m
๐ก ์ด์ ๋ฒ์ ์ Istio Control Plane์ด ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
โ 3.3 Data Plane ๋กค๋ฐฑ (Sidecar ๋ฒ์ ๋ค์ด๊ทธ๋ ์ด๋)
Sidecar Proxy(Envoy)๋ฅผ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฌ๋ ค๋ฉด, Deployment๋ฅผ ์ฌ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
kubectl rollout undo deployment -n default
์ ๋ฐ์ดํธ๋ Sidecar๊ฐ ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต์๋์๋์ง ํ์ธํฉ๋๋ค.
istioctl proxy-status
์ถ๋ ฅ ์์ :
NAME CDS LDS EDS RDS VERSION
my-app-123456-abc.default SYNCED SYNCED SYNCED SYNCED 1.16.2
๐ก Sidecar Proxy์ ๋ฒ์ ์ด 1.16.2๋ก ๋ณต์๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๐ ๊ฒฐ๋ก
- Istio ์ ๊ทธ๋ ์ด๋๋ ๋ณด์ ํจ์น, ์ฑ๋ฅ ๊ฐ์ ๋ฐ ์๋ก์ด ๊ธฐ๋ฅ ํ์ฉ์ ์ํด ํ์์ ์ ๋๋ค.
- ์ ๊ทธ๋ ์ด๋ ์ --dry-run์ ์ฌ์ฉํ์ฌ ํธํ์ฑ์ ์ ๊ฒํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- Control Plane(istiod)๊ณผ Data Plane(istio-proxy)์ ๋ชจ๋ ์ ๊ทธ๋ ์ด๋ํด์ผ ์ ์์ ์ผ๋ก ๋์ํฉ๋๋ค.
- ์ ๊ทธ๋ ์ด๋ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ด์ ๋ฒ์ ์ผ๋ก ์ ์ํ๊ฒ ๋กค๋ฐฑํ ์ ์๋๋ก ๋๋นํด์ผ ํฉ๋๋ค.
- ๋กค๋ฐฑ์ ์ํํ ๋๋ istioctl install --set revision=<์ด์ ๋ฒ์ >๊ณผ kubectl rollout undo deployment๋ฅผ ํ์ฉํ๋ฉด ์์ ํ๊ฒ ๋๋๋ฆด ์ ์์ต๋๋ค.