ML/MLOps Engineer
Kubernetes์˜ Probe ์•Œ์•„๋ณด๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes)์—์„œ ํ”„๋กœ๋ธŒ(Probe)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋ธŒ๋Š” ์ฃผ๋กœ ํ—ฌ์Šค ์ฒดํฌ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ง€์›ํ•˜๋Š” ์ฃผ์š” ํ”„๋กœ๋ธŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Liveness Probe: ์ƒ์กด ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ์‹คํŒจ ์‹œ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘.
  • Readiness Probe: ์ค€๋น„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ์‹คํŒจ ์‹œ ํŠธ๋ž˜ํ”ฝ ์ฐจ๋‹จ
  • Startup Probe: ์‹œ์ž‘ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉฐ, Liveness/Readiness Probe์˜ ์‹คํ–‰์„ ์ง€์—ฐ.

Liveness Probe

์—ญํ• : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ ์ค‘์ธ์ง€ ํ™•์ธ.

  • ์‹คํŒจํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹œ์ž‘.
  • ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณ ์žฅ๋‚œ ์ƒํƒœ์—์„œ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
  • ์˜ˆ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ๋“œ๋ฝ ์ƒํƒœ์— ๋น ์กŒ๊ฑฐ๋‚˜, ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ. 
  • livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 3 periodSeconds: 5

Readiness Probe

์—ญํ• : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ.

  • ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ.
  • ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™”๋‚˜ ์˜์กด ์„œ๋น„์Šค๊ฐ€ ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
  • Liveness์™€ ๋‹ฌ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์ง€๋Š” ์•Š์Œ.
    readinessProbe:
    tcpSocket:
      port: 3306
    initialDelaySeconds: 5
    periodSeconds: 10

Startup Probe

์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์™„์ „ํžˆ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ํ™•์ธ.

  • Readiness์™€ Liveness์˜ ์—ญํ• ์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์ง€๋งŒ, ์‹œ์ž‘์ด ๋Š๋ฆฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ์šฉ.
  • Startup Probe๊ฐ€ ์„ฑ๊ณตํ•˜๊ธฐ ์ „์—๋Š” Liveness์™€ Readiness๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ.
    startupProbe:
    exec:
      command:
      - cat
      - /tmp/ready
    initialDelaySeconds: 10
    periodSeconds: 5
    failureThreshold: 30

ํ”„๋กœ๋ธŒ์˜ ์„ค์ • ๊ตฌ์„ฑ

  • ๋™์ž‘ ์œ ํ˜•
    • httpGet: HTTP ์š”์ฒญ์„ ๋ณด๋‚ด ์ƒํƒœ ํ™•์ธ.
    • tcpSocket: ํŠน์ • ํฌํŠธ์—์„œ TCP ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ.
    • exec: ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํ™•์ธ.
  • ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ
    • initialDelaySeconds: ํ”„๋กœ๋ธŒ ์‹œ์ž‘ ์ „ ๋Œ€๊ธฐ ์‹œ๊ฐ„.
    • periodSeconds: ํ”„๋กœ๋ธŒ ์ฃผ๊ธฐ.
    • timeoutSeconds: ํ”„๋กœ๋ธŒ ์‘๋‹ต ํƒ€์ž„์•„์›ƒ.
    • failureThreshold: ์‹คํŒจ๋ฅผ ๋ช‡ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๊ฐ์ง€ํ•˜๋ฉด ์ƒํƒœ๋ฅผ "๋น„์ •์ƒ"์œผ๋กœ ํŒ๋‹จํ• ์ง€ ์„ค์ •.
    • successThreshold: ๋ช‡ ๋ฒˆ ์—ฐ์† ์„ฑ๊ณตํ•˜๋ฉด ์ƒํƒœ๋ฅผ "์ •์ƒ"์œผ๋กœ ํŒ๋‹จํ• ์ง€ ์„ค์ • (์ฃผ๋กœ Readiness Probe์— ์‚ฌ์šฉ).

ํ”„๋กœ๋ธŒ ํ™œ์šฉ ์‹œ ์ฃผ์˜์ 

  • Startup Probe๋Š” ๋Š๋ฆฐ ์ดˆ๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งŒ ํ•„์š”ํ•˜๋ฉฐ, ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Liveness Probe๊ฐ€ ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์žฌ์‹œ์ž‘์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Readiness Probe๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€ ์˜์กด์„ฑ(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ƒํƒœ)์„ ํ™•์ธํ•˜๋Š” ๋ฐ๋„ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • Liveness Probe๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณ ์žฅ ์ƒํƒœ๋ฅผ ์‹ ์†ํžˆ ๊ฐ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.