Pod๋ ๋จ์ํ ์ปจํ ์ด๋ ๋ฌถ์์ด ์๋ ๊ณต์ ๋ Linux Namespace + Volume ์์์ ์คํ๋๋ ์ปจํ ์ด๋์ ์งํฉ์ด๋ค.
Pod ์์ฑ ์ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ์ปจํ
์ด๋๋ก Pod์ Network Namespace๋ฅผ ์์ฑํ๊ณ ์ ์งํ๋ ์ญํ ์ ํ๋ค.
์์ฑ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ชจ๋ ์ปจํ
์ด๋๊ฐ ๋์ผํ Network Namespace๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ผํ IP๋ฅผ ๊ณต์ ํ๋ฉฐ localhost๋ก ์ปจํ
์ด๋ ๊ฐ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ ์ฑ ์ปจํ
์ด๋๊ฐ ์ฌ์์ ๋๋ ๊ฒฝ์ฐ์๋ Pause ์ปจํ
์ด๋๊ฐ Network Namespace๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ Pod IP๋ ์ ์ง๋๋ค.
k8s๋ Linux Namespace๋ฅผ ํ์ฉํด Pod ๋ด๋ถ ์ปจํ ์ด๋๋ฅผ ๊ฒฉ๋ฆฌํ๋ค. ํ์ง๋ง ๋์ผ Pod ๋ด๋ถ์์๋ ์ผ๋ถ namespace๋ฅผ ๊ณต์ ํ๋ค.
PID namespace๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ๋์ง ์์ง๋ง ๋ค์ ์ค์ ์ ํตํด ๊ณต์ ํ ์ ์๋ค.
shareProcessNamespace: true์ด ์ค์ ์ ์ฌ์ฉํ๋ฉด ์ปจํ
์ด๋ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ ์ ์๋ค.
๋ํ ์ปจํ
์ด๋ ๊ฐ ํ์ผ ์์คํ
์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋๋ฉฐ ๋ฐ์ดํฐ ๊ณต์ ๋ ๋ฐ๋์ Volume์ ์ฌ์ฉํด์ผํ๋ค.
Init Container๋ ์ฃผ ์ฑ ์ปจํ
์ด๋๊ฐ ์คํ๋๊ธฐ ์ , ํ์ํ ํ๊ฒฝ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ด๊ธฐํํ๋ ์ปจํ
์ด๋์ด๋ค. ์ฃผ์ ์ฉ๋๋ ๋ฐ์ดํฐ ๋ค์ด๋ก๋, DB ๋ง์ด๊ทธ๋ ์ด์
, ์ค์ ํ์ผ ์์ฑ, ์ธ๋ถ ์๋น์ค์ ๊ฐ์ฉ์ฑ ํ์ธ ๋ฑ์ด ์๋ค.
Init Container๋ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค. ์ค๊ฐ์ ํ๋๋ผ๋ ์คํจํ๋ฉด Pod๋ ์์๋์ง ์์ผ๋ฉฐ ๋ชจ๋ Init Container๊ฐ ์ฑ๊ณตํด์ผ ์ฑ ์ปจํ
์ด๋๊ฐ ์คํ๋๋ค.
YAML์ ์ ์๋ ์์๋๋ก ํ๋์ฉ ์คํ๋๋ฉฐ ์ด์ Init ์ปจํ
์ด๋๊ฐ ์ฑ๊ณต(Exit Code 0)ํด์ผ๋ง ๋ค์ Init ์ปจํ
์ด๋๊ฐ ์คํ๋๋ค. ํ๋๋ผ๋ ์คํจํ ๊ฒฝ์ฐ Pod์ restartPolicy์ ๋ฐ๋ผ ์ ์ฒด Pod๊ฐ ์ฌ์์๋๊ฑฐ๋ ์คํ์ด ์ค๋จ๋๋ค. ์ฆ ๋ชจ๋ Init ์ปจํ
์ด๋๊ฐ ์ฑ๊ณตํด์ผ๋ง ์ฑ ์ปจํ
์ด๋๊ฐ ์์๋๋ค.
์ผ๋ฐ์ ์ธ Init ์ปจํ
์ด๋๋ ์ข
๋ฃ๋ฅผ ์ ์ ๋ก ํ๋ฏ๋ก Liveness, Readiness Probe๋ฅผ ์ง์ํ์ง ์๋๋ค. ์ค์ง ์ข
๋ฃ ์ฝ๋๋ก๋ง ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
๋จ k8s 1.29 ์ดํ์๋ restartPolicy: Always๊ฐ ์ค์ ๋ Init ์ปจํ
์ด๋์ ๊ฒฝ์ฐ ์ฑ ์ปจํ
์ด๋์ ํจ๊ป ๊ณ์ ์คํ๋๋ ์ฌ์ด๋์นด ์ญํ ์ ์ํํ๋ฏ๋ก ์ด ๊ฒฝ์ฐ์ ํํด Readiness Probe๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํด๋น ํ๋ก๋ธ๊ฐ ์ฑ๊ณตํด์ผ ๋ค์ ๋จ๊ณ๋ก ์งํ๋๋ค.
Pod ์ค์ผ์ค๋ง ์ ๋ฆฌ์์ค ๊ณ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ์์ ๋ฐ๋ฅธ๋ค.
Effective Request = max(
max(init containers),
sum(app containers)
)
Pod์ ์ํ๋ ๋ด๋ถ ์ปจํ
์ด๋ ์ํ์ Probe ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์ปจํ
์ด๋๋ ๋ค์ ์ธ ๊ฐ์ง ์ํ ์ค ํ๋๋ฅผ ๊ฐ์ง๋ค.
1. Wating
์ปจํ
์ด๋๊ฐ ์คํ ์ค๋น ์ค์ธ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฏธ์ง ๋ค์ด๋ก๋, ์ํฌ๋ฆฟ ๋ก๋ฉ ๋ฑ์ด ์๋ค.
2. Running
์ปจํ
์ด๋ ํ๋ก์ธ์ค๊ฐ ์ ์ ์คํ ์ค์ธ ์ํ๋ฅผ ์๋ฏธํ๋ค.
3. Terminated
ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์ ์ ์ข
๋ฃ, ์คํจ ์ข
๋ฃ
k8s๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด Probe๋ฅผ ์ฌ์ฉํ๋ค.
ํํ ์คํดํ๊ธฐ๋ก Pod Phase๊ฐ Running์ด๋ฉด ์๋น์ค ๊ฐ๋ฅ ์ํ๋ผ๊ณ ์๊ฐํ์ง๋ง ์ค์ ํธ๋ํฝ ์ ์
์ฌ๋ถ๋ Readiness Probe ํต๊ณผ ์ฌ๋ถ์ ๋ฌ๋ ค ์๋ค.
์ฆ, Readiness Probe๊ฐ ์คํจํ๋ฉด Pod๋ ์คํ ์ค์ด์ด๋ Service Endpoint์์ ์ ์ธ๋๋ค.
Pod ์ญ์ ์ k8s๋ ํธ๋ํฝ ์ฐจ๋จ๊ณผ graceful shutdown์ ๋์์ ์งํํ๋ค.
API Server๊ฐ Pod๋ฅผ Terminating์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด์ ๋์์ ์๋ํฌ์ธํธ ์ปจํธ๋กค๋ฌ๋ ์๋น์ค ๋ชฉ๋ก์์ ํด๋น Pod IP๋ฅผ ์ ๊ฑฐํ์ฌ ์๋ก์ด ํธ๋ํฝ ์ ์ ์ ์ฐจ๋จํ๋ค. (์ด ๊ณผ์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ํ๋๋ค.)
Kubelet์ ์ปจํ
์ด๋์ ์ ์๋ preStop ๋ช
๋ น์ ๋ด๋ฆฐ๋ค. ์ฃผ๋ก ์งํ ์ค์ธ ์์ฒญ์ ์ฒ๋ฆฌ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฑฐ๋ DB ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ๋ซ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
preStop ์์
์ด ๋๋๋ฉด Kubelet์ด ๋ฉ์ธ ํ๋ก์ธ์ค(PID 1)์ SIGTERM์ ๋ณด๋ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ ์ข
๋ฃ๋ฅผ ์ ๋ํ๋ค.
์ค์ ๋ ์๊ฐ(๊ธฐ๋ณธ 30์ด) ๋์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
terminationGracePeriodSeconds: 30๋๊ธฐ ์๊ฐ์ด ์ง๋๋ ํ๋ก์ธ์ค๊ฐ ์ด์์์ผ๋ฉด SIGKILL์ ๋ณด๋ด ๊ฐ์ ๋ก ์ข
๋ฃํ๊ณ , ์ต์ข
์ ์ผ๋ก API Server๊ฐ Pod ์ ๋ณด๋ฅผ ์ญ์ ํ๋ค.
