-
Notifications
You must be signed in to change notification settings - Fork 0
Description
๐ฅท๐ป ๊ธ์ ์ฝ๊ณ ๊ผญ ๋๋ตํ ์ ์์ด์ผ ํ๋ ์ง๋ฌธ
- ๋กค๋ง์ ๋ฐ์ดํธ์ ์ด์๋๋ POD์ ์ด ๊ฐ์๋ ๊ณ ์ ๋๋์?
- ๋กค๋ง ์ ๋ฐ์ดํธ ์ ์๋๋ฅผ ์กฐ์ ํ ์ ์๋์?
- ์ญ์ ํ ๋ ์ด๋ค POD๊ฐ ์ญ์ ๋๋์?
๐ ๋ชฉ์ฐจ
- POD ์ค๋ธ์ ํธ์ ์ข ๋ฅ
- Rolling Update
- Blue, Green
- Canary
- ์ค์ ์ฌ์ฉ ํํฉ๊ณผ ์ธ์ฌ์ดํธ
๐ ํต์ฌ ๋ด์ฉ
1. POD๋ฅผ ๋์ธ์ ์๋ ์ค๋ธ์ ํธ ์ข ๋ฅ
์ฟ ๋ฒ๋คํฐ์ค์๋ POD๋ฅผ ์ฌ๋ฆด ์ ์๋ ๋ค์ํ ์ค๋ธ์ ํธ๋ค์ด ์กด์ฌํฉ๋๋ค. ๊ฒ์์ 2์ฐจ์ ์ง์ฒ๋ผ POD์ ๊ฐ๊ฐ์ ํน์ฑ๋ค์ด ํฉ์ณ์ ธ ์งํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ฝ์ต๋๋ค. ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
POD + ๋ฌด์กฐ๊ฑด ๋ฑ ํ๋ฒ๋ง ๋์ = Job(eg, ํ๋ฒ๋ง ์คํ๋๋ ์คํฌ๋ฆฝํธ)
POD + ๋ณต์ ์ธ๋ฐ ์ํ๊ฐ์ด ๋ค ๋ฌ๋ผ์ ๋ฐ๋ก ๊ตฌ๋ถํด = StatefulSet(eg,DB์ ๊ฐ์ด ์ฌ๋ฌ๊ฐ๊ฐ ์กด์ฌํด๋ ์์ ๋ด๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ ๋ฐ๋ก ๊ตฌ๋ถ)
POD + ์ํ์ ์ฅ ๊ทธ๋ฐ๊ฑฐ์๊ณ ๊ทธ๋ฅ ๋๊ฐ์๊ฑฐ ๋ฌดํ๋ณต์ = Deployment(eg,ํ๋ก ํธ์๋,๋ฐฑ์๋์ ๊ฐ์ ์ฑ๋ค์ ๋ณดํต ํน์ ์ํ๊ฐ์ ์ ์ฅํ์ง ์๊ณ ๋จ์ API๋ง ์ฒ๋ฆฌ)
POD + ๋ ธ๋๋ง๋ค ํ๊ฐ์ฉ๋ง ๋ค์ด๊ฐ์ ์ฃฝ์ง๋ง = DemonSet(eg,๋งคํธ๋ฆญ ๋นํธ,kube-proxy ์ฒ๋ผ ๋ ธ๋๋ง๋ค ๋ฑ ํ๊ฐ์ฉ๋ง ์์ด๋ ๋๋๊ฒ๋ค)
ํคํฌ์ธํธ1. ํ๋ก ํธ์๋, ๋ฐฑ์๋๋ ์ ์ฃผ๋ก Deployment ๋ก ๋์์ง๋์?
๊ทธ์ค์์๋ ์ด๋ฒ ๊ธ์ Deployment์ ๋ฐฐํฌ ๋ฐฉ์์ ๋ค๋ฃน๋๋ค.
2. Rolling Update(Default)
Rolling์ Deployment์ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋ฐฉ์์ผ๋ก ์ฌ์ค ์ด์ธ ๋๋จธ์ง ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ํ๋ก์ธ์ค์ ์ผ๋ก ์ ์ ๋ค์ด ๊ณ ์ํด๋ธ ๋ฐฐํฌ ๋ฐฉ์์ธ๋ฟ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ง์ ์ง์ํ๋ ์ต์
์ ๋กค๋ง๋ฟ์
๋๋ค. ๋ฐ๋๋ก ๋งํ๋ฉด ๋กค๋ง์
๋ฐ์ดํธ๋ฅผ ํ๋ผ๊ณ ๋ํ๋ก์ด๋จผํธ๊ฐ ์กด์ฌํ๋ค๊ณ ๋งํ ์์์ต๋๋ค. ์ด์ ๋๋ก ๋งค์ฐ ์ค์ํ ๋ฐฐํฌ๋ฐฉ์์
๋๋ค.
๋กค๋ง ์
๋ฐ์ดํธ๋ ์ฌ๋ฌ๊ฐ๊ฐ ๋์์ง POD ์์ ์กฐ๊ธ์ฉ ์ ์ง์ ์ผ๋ก ์๋ก์ด ์ด๋ฏธ์ง์ POD ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ์์
๋๋ค.
์ด์ Deployment์์ ๋กค๋ง์ ๋ฐ์ดํธ์ ๊ด๋ จ๋ ์ฃผ์ ์ต์ 2๊ฐ์ง๋ฅผ ์๊ฐํฉ๋๋ค. ํด๋น ์ต์ ๊ฐ์๋ N ํน์ N%๊ฐ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
max_surge: ์ ๋ฐ์ดํธ ์์ ์ ์ค์ ๋ replicas ๊ฐ์๋ฅผ ์ด๊ณผํ์ฌ ์์ฑํ ์ ์๋ ์ Pod(New)์ ์ต๋ ๊ฐ์ ๋๋ ๋น์จ(์๋ฌด๊ฒ๋ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด 25%), ์ฝ๊ฒ ๋งํ๋ฉด New ๋ฅผ ํ๋ฒ์ ์์ฑํ๋ ๊ฐ์
max_unavailable : ์ ๋ฐ์ดํธ ์์ ์ ์ญ์ ๋ ์ ์๋ ๊ธฐ์กด Pod(Old)์ ์ต๋ ๊ฐ์ ๋๋ ๋น์จ(์๋ฌด๊ฒ๋ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด 25%), ๊ทธ๋ฅ ๋จ์ํ๊ฒ old ๊ฐ ํ๋ฒ์ ์ง์์ง๋ ๊ฐ์๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
์ฌ๊ธฐ์ ํฌ์ธํธ๋ ํด๋น ์ต์ ๊ฐ๋ค์ ๋ ํ๋ฆฌ์นด์ ์ด ๊ฐ์๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ง๊ฒ ์ค ์ ์์ต๋๋ค. ์ฆ 100%๋ฅผ ๋ฃ์ด์ฃผ๊ฑฐ๋ N๊ฐ์ ์ด ๋ ํ๋ฆฌ์นด ๊ฐ์๋ก ๋ณด๋ค ๊ฐ๊ฑฐ๋ ๋ง๊ฒ ์ฃผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค์ 2๊ฐ์ง์ ๊ฒฝ์ฐ ์คํ์กฐ์ฐจ ์๋์ง๋ง ๊ฐ์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
Case 1. max_surge = 100%, ํน์ ์ด ๋ ํ๋ฆฌ์นด ์
๋กค๋ง ์
๋ฐ์ดํธ๊ฐ ์์ํ๋ฉด ๊ธฐ์กด์ ๋๊ณ ์๋ Old Pod๋ ๊ทธ๋๋ก ์กด์ฌํ๋ฉด์ ๋๊ฐ์ ์๋งํผ New Pod๊ฐ ๋จ๊ฒ๋ฉ๋๋ค. ์ ์ฒด๋ฅผ ๋๊ฐ์ด ๋ณต์ฌํ์ฌ ํต์งธ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๊ฒ ๋๊ธฐ์ Blue, Green ๋ฐฐํฌ์ ๊ฐ๊ฒ๋๋ฉฐ ๋งค์ฐ ํฐ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ ์ง์ ๋ฐฐํฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ค๊ณํ ์ทจ์ง์ ๋ง์ง ์์ต๋๋ค.
Case 2. max_unavailable = 100%, ํน์ ์ด ๋ ํ๋ฆฌ์นด ์
๋กค๋ง ์
๋ฐ์ดํธ๊ฐ ์์ํ๋ฉด ๊ธฐ์กด์ ๋๊ณ ์๋ Old Pod๊ฐ ํ๋๋ ๋จ์ง์๊ณ ๋์์ ๋ชจ๋ ์ญ์ ๋ฉ๋๋ค. ์ด๋ ์๋น์ค์ ์ค๋จ์ด๋ฏ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ค๊ณํ ์ทจ์ง์ ๋ง์ง ์์ต๋๋ค.
ํคํฌ์ธํธ2. ๋กค๋ง ์ ๋ฐ์ดํธ์ 2๊ฐ์ง์ ์ต์ ๊ฐ์ ์ต์ ์ต๋ ์ด๋ป๊ฒ ์ง์ ํ ์ ์์ผ๋ฉฐ ๊ทธ ์๋ฏธ๋?
์ 2๊ฐ์ง๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋์ ๋ฐ๋ผ ๊ฐ์ ๋กค๋ง ์ ๋ฐ์ดํธ์ฌ๋ ํน์ฑ์ด ๋ฌ๋ผ์ง๊ฒ ๋๊ณ ์ธํ๋ผ๊ฐ ๋งค์ฐ ๊ณจ๋๋ฆฌ๋ ๋ถ๋ถ์ผ๋ก ๋ฐ๋๋๋ค. ์ดํ ๊ณผ์ ์ ์ต์ ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ ์ฒ๋ผ replicas์ ๊ฐ์๋งํผ ๋ชจ๋ New๊ฐ ๋ ๋๊ฐ์ง ๋ฐ๋ณต ์งํน๋ฉ๋๋ค.
Case 1
replicas: 4
strategy {
rolling_update {
max_surge = "0"
max_unavailable = "1"
}
type = "RollingUpdate"
}
์ญ์ ๊ฐ ๋์๋ง์ ๋ค์ Old๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ New๊ฐ ๋จ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด ๊ทธ ์์ค์ ๊ณ์ ์ญ์ ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
์
๋ฐ์ดํธ ๋์ค ์ต์ 3๊ฐ์ Pod๋ ํญ์ ์คํ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
maxSurge 0 ์ค์ ์ผ๋ก ์ธํด ํ ๋ฒ์ ์๋ก์ด Pod๋ฅผ ์ถ๊ฐ ์์ฑํ์ง ์๊ณ ๊ธฐ์กด Pod๋ฅผ ์ฌํ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์
๋ฐ์ดํธ ๊ณผ์ ์ด ๋ ๋๋ฆฌ๊ฒ ์งํ๋ ์ ์์ต๋๋ค.
์๋ก์ด Pod๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ์ง ์์ผ๋ฏ๋ก ํด๋ฌ์คํฐ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
Case 2
replicas: 4
strategy {
rolling_update {
max_surge = "1"
max_unavailable = "0"
}
type = "RollingUpdate"
}
Case 3
replicas: 4
strategy {
rolling_update {
max_surge = "1"
max_unavailable = "1"
}
type = "RollingUpdate"
}
๐ ์ฃผ์ํด์ผํ ์
๋กค๋ง ์
๋ฐ์ดํธ๋ ์๋ฌด๋ฆฌ ๋น์จ๊ณผ ์ต์
์ ์ ์กฐ์ ํ๋ค ํ์ฌ๋ ๊ฒฐ๊ตญ Old์ New Pod๊ฐ ๋์์ ๋จ๋ ๊ตฌ๊ฐ์ด ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ํด๋น ๊ตฌ๊ฐ์์ Old, New POD๊ฐ ๋์์ DB ํน์ ๋๋จธ์ง POD๋ค์ ์ฐ๊ฒฐ๋๋๋ผ๋ ์๋น์ค์ ๋ฌธ์ ๊ฐ ์๋๋ก ๋ก์ง์ ์์ฑํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผํ๋ฉฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋กค๋ง ์
๋ฐ์ดํธ๋ ์ฌ์ฉํ ์์์ผ๋ฉฐ ํต์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ Blue, Green ๋ฐฐํฌ ๋ฐฉ์์ ์ฌ์ฉํด์ผํ๋ค.
Blue, Green
Deployment์ Service๋ Label๋ก ์ฐ๊ฒฐ๋๋ค๋ ํน์ฑ์ ์ด์ฉํ์ฌ Deployment๋ฅผ ๊ธฐ์กด๊ณผ ๋ฐ๋์ธ ์์ผ๋ก ๋ฐ๋ก ๋ง๋ค์ด ๋๊ณ ์๋น์ค์ ๋ผ๋ฒจ๋ง ๋ฐ๊พธ์ด์ ๋ฐ๋ก ๊ต์ฒดํ ํ๋ ๋ฐฉ์์ ๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Old Image๋ฅผ ๊ฐ์ง Backend Deployment ๊ฐ ์กด์ฌํ๋ฉฐ version: blue๋ผ๋ ํ๊ทธ๊ฐ ์๊ณ Backend Service๋ version: blue ํ๊ทธ๊ฐ ์กด์ฌํ์ฌ ์๋ก ๋งค์น๊ฐ ์ ๋ ์ํ๋ก ์๋น์ค๊ฐ ์ด์๋๊ณ ์์ต๋๋ค.
- ๊ทธ ์ํ์์ ๊ทธ๋๋ก New Image๋ฅผ ๊ฐ์ง Backend Deployment๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๋ฉฐ version: green ํ๊ทธ๋ฅผ ๋ถ์ ๋๋ค. ๊ธฐ์กด Backend Service๋ version : blue ์ธ Deployment๋ฅผ ์ฐพ๊ณ ์๊ธฐ์ ์ ํ ์ง์ฅ์ด ์์ต๋๋ค.
- Backend Service์์ version : green ํ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
- Backend Service ๋ New Image๋ฅผ ๊ฐ์ง version: green ์ Backend Deployment๋ฅผ ์ฐพ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ๊ธฐ์กด version: blue ์๋ Deployment๋ฅผ ์ญ์ ํฉ๋๋ค.
๐ ์ฃผ์ํด์ผํ ์
ํด๋น POD ์ ๊ฒฐํฉ์ฑ์ด ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋ DB๊ฐ์ ์๋น์ค์ ๊ฒฝ์ฐ ๋ธ๋ฃจ ๊ทธ๋ฆฐ์ผ๋ก ๊ฐ์ด 2๊ฐ์ง๋ฅผ ๋ง๋ค์ด ๋์์ ๋ฐ๊ฟ์ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ํ์ํ์ฌ ๋ฆฌ์์ค๋ฐ ์ ๋ต์ด ๋ง์ด ํ์ํ ๋ฐฐํฌ ๋ฐฉ์์
๋๋ค.
Canary
๐ ์ฃผ์ํด์ผํ ์
๋กค๋ง ์
๋ฐ์ดํธ๋ ์๋ฌด๋ฆฌ ๋น์จ๊ณผ ์ต์
์ ์ ์กฐ์ ํ๋ค ํ์ฌ๋ ๊ฒฐ๊ตญ Old์ New Pod๊ฐ ๋์์ ๋จ๋ ๊ตฌ๊ฐ์ด ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ํด๋น ๊ตฌ๊ฐ์์ Old, New POD๊ฐ ๋์์ DB ํน์ ๋๋จธ์ง POD๋ค์ ์ฐ๊ฒฐ๋๋๋ผ๋ ์๋น์ค์ ๋ฌธ์ ๊ฐ ์๋๋ก ๋ก์ง์ ์์ฑํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผํ๋ฉฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋กค๋ง ์
๋ฐ์ดํธ๋ ์ฌ์ฉํ ์์์ผ๋ฉฐ ํต์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ Blue, Green ๋ฐฐํฌ ๋ฐฉ์์ ์ฌ์ฉํด์ผํ๋ค.
๐ก ์ฐธ๊ณ ์๋ฃ:
- ๋งํฌ๋ ์ฐธ๊ณ ํ ์๋ฃ ์ถ์ฒ๋ฅผ ์ฌ๊ธฐ์ ์ ์ด ์ฃผ์ธ์.