์ด ๊ธ์ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๊ณผ ์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํ ๊ธ์ ๋๋ค. ๋ชจ๋ ๋ด์ฉ์ ์ฑ ์ ํฌํจ๋์ด ์๋ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฑ ์ ๊ตฌ๋งคํด์ ์ฝ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ต๊ทผ ์๋น์ค ๋ฉ์์ ๋ํด ์์๋ณด๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค์๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ธ๊ฐ? ๋ผ๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋ ๋งํ ์ฑ ์ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด๊ณ ์ ํฉ๋๋ค.
์์คํ ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ๊ทธ๋ ์ด๋, ๋ฒ์ ๊ด๋ฆฌ, ๋ณ๊ฒฝ์ ๋ํด ์๋ํ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋๋ฐ ๋ง์ ์ด๋ ค์์ด ๋ฐ๋ฆ ๋๋ค. ์ด๋ฅผ ์ํด ์ฟ ๋ฒ๋คํฐ์ค, ํ์์ฝํ ๋ ธ๋ง๋์ ๊ฐ์ ์ค์ผ์คํธ๋ ์ดํฐ๋ ๋ฐํ์์ ์๋ํ ๊ด๋ จ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฒ์ ๊ด๋ฆฌ, ๋ฆด๋ฆฌ์ค, ๋ฐฐํฌ์ ๋ํ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ์ญํ ์ ์ํํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ๋ฒ์ , ๋ฆด๋ฆฌ์ค, ๋ฐฐํฌ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ์ฌ ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค.
๋ฒ์
์ผ๋ฐ์ ์ผ๋ก ๋ฒ์ ํ๊ธฐ์๋ ์๋ฉํฑ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฉํฑ ๋ฒ์ ์ (Major).(Minor).(Patch) ํ์์ผ๋ก ํ๊ธฐํฉ๋๋ค. ํจ์น ๋ฒ์ ์ ์ฌ์ํ ๋ณ๊ฒฝ์ฌํญ ๋ง๋ค ์ฆ๊ฐํ๊ฒ ๋๊ณ , ๋ง์ด๋ ๋ฒ์ ์ ๋ฒ์ ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง๋ง ์ด์ ๋ฒ์ ๊ณผ ํ์ ํธํ์ด ๊ฐ๋ฅํ ๋ณ๊ฒฝ์ ์๋ฏธํฉ๋๋ค. ๋ฉ์ด์ ๋ฒ์ ์ ๋๊ท๋ชจ์ ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ๋ฉ์ด์ ๋ฒ์ ์ฌ์ด์ API๋ ํธํ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฆด๋ฆฌ์ค
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ๋ก ์กด์ฌํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฆด๋ฆฌ์ค ์ ๋ณด๋ฅผ Deployment metadata.labels, pod.spec.template.metadata.label ํ๋์ ๋ฃ์์ผ๋ก์จ ๊ด๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ๋ฆด๋ฆฌ์ค ์ ๋ณด๋ฅผ ๋ฃ๋ ์์ ์ CD๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค์ํ ์ํญ์ ๋ผ์น ์ ์๋ค๋ ์ ์ ๋ช ์ฌํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ข ๋ ํธ๋ฆฌํ๊ฒ ์ํํ๊ธฐ ์ํด Helm์ ์ฌ์ฉํฉ๋๋ค. Helm์ ๋ฆด๋ฆฌ์ค ๋ด์ญ์ ์ถ์ ํด์ฃผ๋ฉฐ ๋๋ถ๋ถ์ CD ํด์ Helm๊ณผ ํตํฉํ์ฌ ๋ฆด๋ฆฌ์ค ์๋น์ค๋ฅผ ์ ๊ณตํด์ค๋๋ค.
๋ฆด๋ฆฌ์ค ์ด๋ฆ์ ์๋น์ค ๋ฉ์๊ฐ์ ์ธ๋ฐํ ๋ผ์ฐํ ์ ์ค์ ํ ๋ ์ด์ ๋ฐ ๊ด๋ฆฌ์ ์ฉ์ด์ฑ์ ์ํด ์ฝ์๋ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ex) stable, canary
๋กค์์
Deployment๊ฐ ๋ฑ์ฅํ๊ธฐ ์ด์ ์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ReplicaSet์ ์ ๋ฐ์ดํธ ํ๊ธฐ์ํ ๋ฐฉ๋ฒ์ CLI๋ฅผ ํตํ ๋ฐฉ๋ฒ๋ฐ์ ์์๊ณ , ์ด๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์งํฅํ๋ ์ ์ธ์ ํจ๋ฌ๋ค์์ ๋ถํฉํ์ง ์์์ต๋๋ค. ์ดํ ๋ฑ์ฅํ Deployment Controller๋ spec.template์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ธ๋ ์ํ๋ฅผ ์ฝ์ด ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉฐ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ฒ ๋ฉ๋๋ค.
Deployment๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ RollingUpdate์ recreate ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค. RollingUpdate๋ ์๋น์ค์ ์ค๋จ์์ด ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, recreate๋ ๋ชจ๋ Pod์ ์ค๋จํ๋๋ผ๋ ์๋น์ค์ ์ํฅ์ ๋ฐ์ง ์๋ ํน์ ์ํฌ๋ก๋์ ์ฌ์ฉํฉ๋๋ค.
๋ฒ์ , ๋ฆด๋ฆฌ์ค, ๋กค์์ ๋ชจ๋ฒ ์ฌ๋ก
-
์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฐฐํฌ ๋ฒ์ ์ ๋ ๋ฆฝ์ ์ธ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋ค๋ ์ ์ ์ ์ํ์. ์๋ ์์์ ๊ฐ์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฒ์ ์ 1.1.6์ด์ง๋ง Pod์ ๋ช ์ธ๋ 1.1.8์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ์ด๋ ConfigMap, Secret๊ณผ ๊ฐ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด pod ๋ช ์ธ๊ฐ ๋ณ๊ฒฝ๋์์์ ์๋ฏธํฉ๋๋ค. ๋ํ ์ ์ฒด ๋ฐฐํฌ๋ฒ์ ์ 1.3.5๋ก ์ ์ฒด ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์กด์ฌํจ์ ์๋ฏธํฉ๋๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-deploy
appVersion: 1.3.5
env: prod
release: stable
release number: 1234567
spec:
selector:
matchLabels:
app: server
appVersion: 1.1.8
env: prod
template:
metadata:
labels:
app: server
appVersion: 1.1.8
env: prod
spec:
containers:
- name: web-server
image: sphong0417/web-server:v1.1.6
...
-
๋ฆด๋ฆฌ์ค ์ด๋ฆ ๋ฐ ๋ฒํธ๋ฅผ ํตํด CI/CD ๋ฆด๋ฆฌ์ค๋ฅผ ์ถ์ ํด์ผ ํฉ๋๋ค. ์์ ์์์ ๊ฐ์ด metadata ํ๋์ CI/CD์ ์ค์ ๋ฆด๋ฆฌ์ค ์ ๋ณด์ ์ฐ๊ด๋๋ ๋ ์ด๋ธ์ ์ถ๊ฐํ์ฌ CI/CD ๊ณผ์ ์ถ์ ๋ฐ ๋กค๋ฐฑ์ ์๋ณํ๊ธฐ ์ฉ์ดํด์ง๋๋ค.
-
Helm์ ์ฌ์ฉํ๋ค๋ฉด Helm ์ฐจํธ์ ํฌํจ๋์ง ์์ ์๋น์ค๋ค๋ ํจ๊ป ์ ๋ฐ์ดํธ ๋ฐ ๋กค๋ฐฑ์ด ๋ ์ ์๋๋ก ๊ณ ๋ คํด์ผํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด Helm Chart์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ฉ๋ํ์คํธ๊ฐ ์กด์ฌํ๊ณ ์ด๋ฅผ ์ ๋ฐ์ดํธ ๋ฐ ๋กค๋ฐฑ ํ ๋ Helm ์ธ๋ถ์ DB ๋ฐฑ์ ์ด ํ์ํ๋ค๋ฉด ์ด ์ฒ๋ฆฌ๋ฅผ ํจ๊ป ์ํ๋ ์ ์๋๋ก ์ค์ ํด์ค์ผ ํฉ๋๋ค. Helm์ lifecycle Hook์ด๋ผ๋ ๊ธฐ๋ฅ์ ํตํด ์ด๋ฐ ์์ ์ ์ํํ ์ ์๋๋ก ํด์ค๋๋ค.
'๐ Book Review > ๐ Kubernetes Best Practice' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kubernetes Best Practice] 9. ๋คํธ์ํน, ๋คํธ์ํฌ ๋ณด์, ์๋น์ค ๋ฉ์ (0) | 2021.03.05 |
---|---|
[Kubernetes Best Practice] 8. ๋ฆฌ์์ค ๊ด๋ฆฌ (0) | 2021.03.01 |
[Kubernetes Best Practice] 5. ์ง์์ ํตํฉ, ํ ์คํธ, ๋ฐฐํฌ (0) | 2021.02.25 |
[Kubernetes Best Practice] 4. ์ค์ , ์ํฌ๋ฆฟ, RBAC (0) | 2021.02.22 |
[Kubernetes Best Practice] 3. ๋ชจ๋ํฐ๋ง๊ณผ ๋ก๊น (0) | 2021.02.14 |
๋๊ธ