์๋ ํ์ธ์ ๊ตฌ๋ ์๋, DevOps ์์๊ณผ ๊ธฐ์ ์ง์์ ์ ๋ฆฌํด์ ๊ณต์ ํด๋๋ฆฌ๋ DevOps ์ฌํ์ ์ํ ์์์ง์ ๋๋ค.
Kubernetes์์ Pod๋ฅผ ๋ฐฐํฌํ๋ฉด Pod์์ ์ ์ํ ์ปจํ ์ด๋๊ฐ ์คํ๋๋๋ฐ์. ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋์ด์ผ ํ๋ ํ๋ก์ธ์ค๊ฐ ์ ์ ์๋ํ ๋ ๋น๋ก์ Pod๋ฅผ ํตํด ์ํ๋ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
Pod๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์ํ๋ค๋ณด๋ฉด ๋์ ์ค์ด๋ ์ปจํ ์ด๋์ ์ํ๊ฐ ์ ์์ธ์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธ์ด ํ์ํ ๋๊ฐ ์์ต๋๋ค. ํน์ ํด๋น ์ปจํ ์ด๋๊ฐ ์ธ๋ถ ํธ๋ํฝ์ ๋ฐ์ ์ค๋น๊ฐ ๋์๋์ง ์์์ผ ํ ๋๋ ์์ฃ .
์ด๋ ๊ฒ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ง๋จํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก, Container Probe์ ๋๋ค. ์ปจํ ์ด๋์ ์ํ๋ฅผ ์กฐ์ฌํ๋ค๋ ๋ป์์ ๋ถ์ฌ์ง ์ด๋ฆ์ด์ฃ .
์ด๋ฒ ์์์ง์์ Kubernetes์ Probe์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๐ฉบContainer Probe์ ์ง๋จ ์ ํ๊ณผ Probe์ ์ข ๋ฅ
Kubernetes์ Container Probe๋ Manifest์ ์ปจํ ์ด๋ ๋ ๋ฒจ์์ ์ ์๋๋๋ฐ์. ์ ์๋ ์ง๋จ ์ค์ ์ ๋ฐ๋ผ kubelet์ด ํด๋น ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ง๋จ์ ์ํํฉ๋๋ค.
์ปจํ ์ด๋ ๋ ๋ฒจ์์ ์ ์๋๋ค๋ ๋ป์, Pod๋ฟ๋ง ์๋๋ผ Depolyment์ด๋ Statefulset๊ณผ ๊ฐ์ ๋ฐฐํฌ ๋จ์์ Manifest(yaml ํ์ผ)์์๋ Probe๋ฅผ ์ ์ํ ์ ์๋ค๋ ๋ป์ ๋๋ค.
Probe๋ ์๋์ ๊ฐ์ด 4๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ง๋จํ ์ ์์ต๋๋ค.
- exec
- ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํํ ๋ช ๋ น์ด ์ง์
- ๋ช ๋ น์ด ์คํ ํ ์ํ ์ฝ๋๊ฐ `0`์ด๋ฉด ์ง๋จ ๊ฒฐ๊ณผ ์ ์์ผ๋ก ํ๋จ
- ๋จ exec๋ ์ํ๋ ๋๋ง๋ค ์ปจํ ์ด๋ ๋ด์ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ฆฌ์์ค๊ฐ ์ถ๊ฐ๋ก ํ์ํ๊ณ , ์ด๋ก ์ธํด Node์ CPU ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์
- grpc
- gRPC ์์ฒญ์ผ๋ก ์ง๋จํ๋ฉฐ, ๋ฏธ๋ฆฌ ๊ตฌํ๋ gRPC Health Check ํ์
- ์๋ต status๊ฐ SERVING์ด๋ฉด ์ฑ๊ณต์ผ๋ก ์ง๋จ
- httpGet
- ํน์ port ๋ฐ path๋ก Pod์ IP์ ๋ํด HTTP GET ์์ฒญ์ผ๋ก ์ง๋จ
- ์๋ต status code๊ฐ 200 ์ด์ 400 ๋ฏธ๋ง์ด๋ฉด ์ฑ๊ณต์ผ๋ก ์ง๋จ
- tcpSocket
- ํน์ port๋ก Pod์ IP์ ๋ํด TCP ์์ฒญ์ผ๋ก ์ง๋จ
- ํด๋น port๊ฐ ์ด๋ ค ์์ผ๋ฉด ์ฑ๊ณต์ผ๋ก ์ง๋จ
์ด๋ ๊ฒ ์ํํ ์ง๋จ ๊ฒฐ๊ณผ๋ ์๋ 3๊ฐ์ง ์ค ํ๋๋ก ๋์ต๋๋ค.
- Success: ์ง๋จ ์ฑ๊ณต
- Failure: ์ง๋จ ์คํจ
- Unknown: ์ง๋จ ์คํจ์ด๋, Faliure์ ๋ฌ๋ฆฌ kubelet์ด ์ถ๊ฐ ์ง๋จ ์คํ
๊ทธ๋ฆฌ๊ณ kubelet์ด ์ํํ๋ Probe๋ ์๋์ ๊ฐ์ด 3๊ฐ์ง ์ ํ์ผ๋ก ๋๋๋๋ฐ์.
- Readiness Probe
- Liveness Probe
- Startup Probe
์๋์์ ๊ฐ Probe์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
โจReadiness, Liveness, Startup Probe
Readiness Probe
Readiness Probe๋ ๋คํธ์ํฌ ํธ๋ํฝ๊ณผ ๊ด๋ จ์ด ์๋๋ฐ์. Readiness Probe๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์ปจํ ์ด๋๋ก ํธ๋ํฝ์ด ๋ค์ด์ค๋ ์์ ์ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฆ, ์ปจํ ์ด๋์ ์ํ ์ง๋จ ๊ฒฐ๊ณผ๊ฐ ์ฑ๊ณต์ธ ์์ ๋ถํฐ ํด๋น ์ปจํ ์ด๋์ ํธ๋ํฝ์ด ๋ค์ด์ค๋ ๊ฒ์ ํ์ฉํ๊ณ ์ถ์ ๋ Readiness Probe๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ฃ .
๊ฐ Probe๋ ์ปจํ ์ด๋ ๋ ๋ฒจ์์ ์ ์ํ๋ค๊ณ ํ๋๋ฐ์. ์๋ Pod Manifest ์์ ๋ก Probe๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
์ ์์ ์์ Readiness Probe๋ฅผ ์ ์ํ๋ ๋ถ๋ถ๋ง ์ดํด๋ณด๋ฉด ํด๋น Probe์ ์๋ ๋ฐฉ์์ ์๋์ ๊ฐ์ต๋๋ค.
- ์ Readiness Probe๋ HTTP GET ์์ฒญ์ผ๋ก ์ง๋จ ์ํ (httpGet)
- HTTP GET ์์ฒญ์ ๋ณด๋ด๋ Port์ ๊ฒฝ๋ก๋ '8080' ๋ฐ '/healthz'
- kubelet์ด ์ฒซ Probe ์ง๋จ์ ์ํ๋๋ ์์ ์ ์ปจํ ์ด๋ ์คํ ํ 15์ด ๋ค (initialDelaySeconds)
- kubelet์ 10์ด ๊ฐ๊ฒฉ์ผ๋ก Probe ์ง๋จ ์ํ (periodSeconds)
์ ์์ ์์ ์ปจํ ์ด๋์ readinessProbe ํ๋๋ง ์ ์๋์์ง๋ง, ํ์์ ๋ฐ๋ผ ์ปจํ ์ด๋์ ๋ํด Probe๋ฅผ ์ข ๋ฅ๋ณ๋ก ๋ชจ๋ ์ ์ํ ์๋ ์์ต๋๋ค.
Liveness Probe
Liveness Probe๋ ๋์ ์ค์ธ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ง๋จํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
Kubernetes์ ๋ฐฐํฌ๋ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค์ ์ด์๊ฐ ์๊ธฐ๊ฑฐ๋ ํ๋ก์ธ์ค์ ์ํ๊ฐ Unhealthy์ธ ๊ฒฝ์ฐ, kubelet์ด ์ด๋ฅผ ๊ฐ์งํ์ฌ ์๋์ผ๋ก Pod์ restartPolicy(์ฌ์์ ์ ์ฑ )์ ๋ฐ๋ผ ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ๋๋ฌธ์ Liveness Probe๊ฐ ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค.
ํ์ง๋ง Probe์ ์ปจํ ์ด๋ ์ํ ์ง๋จ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ข ๋ฃ ๋๋ ์ฌ์์์ด ํ์ํ ๊ฒฝ์ฐ๋ผ๋ฉด Liveness Probe๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ Liveness Probe์ Readiness Probe๋ฅผ ๋์ผํ ์ปจํ ์ด๋์ ๋ํด ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ฐ Probe์ ์ญํ ์ํ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- Readiness Probe๋ก ํด๋น ์ปจํ ์ด๋๊ฐ ์ค๋น๋ ๋๊น์ง ์ธ๋ถ ํธ๋ํฝ์ด ๋ค์ด์ค๋ ๊ฒ์ ์ ์ด
- Liveness Probe๋ก ํด๋น ์ปจํ ์ด๋ ๋์ ์ค์ ์ง๋จ ์คํจ ์ ์๋์ผ๋ก ์ฌ์์
Startup Probe
๋ง์ง๋ง์ผ๋ก Startup Probe๋, ๊ทธ ์ด๋ฆ์ฒ๋ผ ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง๋จํฉ๋๋ค.
๊ฐ๋ํ๋ ๋ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ง๋จํด์ผ ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, Liveness Probe์ periodSeconds ๊ฐ์ ๊ธธ๊ฒ ์ค์ ํด์ ์ง๋จ ์ฃผ๊ธฐ๋ฅผ ๋ํ๊ธฐ๋ณด๋ค๋ Startup Probe๋ฅผ ์ ์ํด์ ์ปจํ ์ด๋์ ์์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ ํ๋ ๊ฒ์ด ์ข์๋ฐ์.
๊ทธ๋์ผ Liveness Probe๋ก๋ ๋์ ์ค์ธ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ ์ ํ ์ฃผ๊ธฐ๋ก ์ง๋จํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฆ, ๊ฐ Probe์๊ฒ ๋ณธ๋์ ์ญํ ์ ๋ถ์ฌํจ์ผ๋ก์จ ํจ์จ์ ์ธ ์ด์์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋จ์ด ์ฑ๊ณตํ๊ธฐ ์ ๊น์ง Readiness Probe์ Liveness Probe๊ฐ ์คํ๋์ง ์๋ค๋ ๊ฒ๋ Startup Probe์ ์ฃผ์ ํน์ง์ ๋๋ค.
์ด๋ ๊ฒ ๊ฐ Probe๋ ์ํ ์์ ๊ณผ ์ญํ ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ปจํ ์ด๋์ ์ฑ๊ฒฉ์ด๋ ์ด์ ์ ์ฑ ์ ๋ฐ๋ผ ์ ์ ํ ์กฐํฉ์ผ๋ก Probe๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋์ฑ ํจ๊ณผ์ ์ผ๋ก Pod๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์ํ ์ ์์ต๋๋ค.
๐ญ๋ง์น๋ฉฐ...
์ด๋ฒ ์์์ง์์ Kubernetes์ ๋ฐฐํฌ๋ ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ง๋จํด์ฃผ๋ Probe์ ๋ํด ์์๋ดค์ต๋๋ค.
ํน์ ์ด๋ฒ ๋ด์ฉ ๊ด๋ จํด์ ๋ ๊ถ๊ธํ ์ ์ด ์์ผ์๋ค๋ฉด ์๋ ๋ฉ์ผ๋ฆฌ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์.๐
๊ทธ๋ผ, ๋ค์ ์์์ง์์ ๋ณด๋ค ์์ฐจ๊ณ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
์ค๋๋ ๊ฐ์ฌํฉ๋๋ค, ๊ตฌ๋ ์๋ ๐บ
๐References
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์