๐ŸŒฑ ์ธํ”„๋Ÿฐ/โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ)

(5) Probe ์ดํ•ดํ•˜๊ธฐ

mallin 2025. 6. 2. 11:10

โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ) - Spring 1, 2 ์„ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๋ณต์Šต ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

 

 

1. Probe ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

 

- Pod ์•ˆ์— probe ์„ค์ •ํ•˜๊ธฐ

- startUpProbe, readinessProbe, livenessProbe ์ด 3๊ฐœ์˜ Probe ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ฐ๊ฐ ์„ฑ๊ณต์ด๋ž‘ ์‹คํŒจ์— ๋Œ€ํ•œ ์ˆ˜์น˜๋„ ์„ค์ • ๊ฐ€๋Šฅ (success Threshold, failure Threshold)

- ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์•ฑ์— ๊ฐ path ์— ๋Œ€ํ•œ url ์ด ์‚ฌ์ „์— ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

- ์ผ๋ฐ˜์ ์œผ๋กœ App ๊ธฐ๋™ ์‹œ๊ฐ„์— ๋”ฐ๋ผ startup Probe ์‹คํŒจ์ˆ˜๋งŒ ์กฐ์ •ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

 

 

์ถœ์ฒ˜URL : https://inf.run/k7mF

 

Pod ๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ž๋งˆ์ž probe ๊ธฐ๋Šฅ๋“ค์ด ๋™์ž‘ํ•œ๋‹ค.

App ๊ธฐ๋™์ค‘
  • startupProbe ๋ฅผ ๋™์ž‘์‹œํ‚ค๋ฉด์„œ 10์ดˆ์— ํ•œ๋ฒˆ์”ฉ /ready API ๋ฅผ ํ˜ธ์ถœ
  • ๊ธฐ๋™์ค‘์—” ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์—†์œผ๋‹ˆ ๊ณ„์† ์‹คํŒจ
  • ํ•œ ๋ฒˆ์ด๋ผ๋„ ์‘๋‹ต์ด ์žˆ์œผ๋ฉด ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผ
    → startupProbe ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๊ณ , livenessProbe ๋ž‘ readlinessProbe ๊ธฐ๋Šฅ์„ ๋™์ž‘
App ๊ธฐ๋™ ์™„๋ฃŒ
  • App ์ด ์‚ด์•„์žˆ๋Š” ๋™์•ˆ์€ 200 OK ๊ฒฐ๊ณผ ๋ฆฌํ„ด
  • readinessProbe : ์„ฑ๊ณต์„ ํ–ˆ์„ ๋•Œ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ Pod ๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ
  • livenessProbe : App ์ด ์‚ด์•„๋‹œ๋Š”์ง€ ์ฒดํฌ
App ์žฅ์•  ๋ฐœ์ƒ
  • API ์‹คํŒจ
  • ์„ค์ •์— ๋”ฐ๋ผ ๋‘๋ฒˆ ์‹คํŒจํ•˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” App ์žฌ๊ธฐ๋™

 

2. Application ๋กœ๊ทธ๋ฅผ ํ†ตํ•œ ํ”„๋กœ๋ธŒ ๋™์ž‘ ๋ถ„์„

2-1. ์‹ค์Šต ์ „ ์‚ฌ์ „ ์ค€๋น„ ์ž‘์—… (HPA minReplica ๋ฅผ 1๋กœ ๋ฐ”๊พธ๊ธฐ - Master Node)

kubectl patch -n anotherclass-123 hpa api-tester-1231-default -p '{"spec":{"minReplicas":1}}'
  • ๐Ÿค” ์—ฌ๊ธฐ์„œ HPA ๋ž€ ? ๋ถ€ํ•˜์— ๋”ฐ๋ผ pod ๋ฅผ ๋Š˜๋ ค์ฃผ๊ณ , ์ค„์—ฌ์ฃผ๋Š” ์Šค์ผ€์ผ๋ง ์—ญํ• 
  • ๊ธฐ์กด์˜ HPA ์˜ minReplica ๋Š” 2๋กœ ๋˜์–ด ์žˆ์—ˆ๋‹ค.
  • ์ด ์ˆ˜์น˜๊ฐ€ Deployment ์— ์˜ํ–ฅ์„ ์ค€๋‹ค.
  • Deployment → replica = 1
    • HPA ์˜ minReplica = 2 ์ด๋ผ๋ฉด Deployment → replica = 2
    • HPA ์˜ minReplica = 1 ์ด๋ผ๋ฉด Deployment → replica = 1
  • Pod ๊ฐ€ ๋‘ ๊ฐœ๋ฉด ๋กœ๊ทธ๋ฅผ ๋ณผ ๋•Œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์ „ ์ž‘์—…์„ ํ•ด์ค€๋‹ค.

 

2-2. Pod ๋ฅผ ์‚ญ์ œํ•œ ๋‹ค์Œ Application ๋กœ๊ทธ ํ™•์ธ

  1. App ์ดˆ๊ธฐํ™”
  2. startUpProbe ๊ฐ€ 5์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ํ˜ธ์ถœ
    1. ์„ฑ๊ณต : readinessProbe, livenessProbe ์‹œ์ž‘
    2. ์‹คํŒจ : ์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    3. ๋™์ž‘ ํ™•์ธ์„ ์œ„ํ•ด ์ž„์˜๋กœ ์ฝ”๋“œ ๊ตฌ์„ฑ, ์‹ค์ œ App ์€ ๊ธฐ๋™๋˜๊ธฐ ์ „์— API ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•จ
  3. User ์ดˆ๊ธฐํ™” ์ค‘ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ž‘์—…
    1. ์ด ์ž‘์—…์ด ๋‹ค ๋๋‚˜์•ผ App ๊ธฐ๋™ ์™„๋ฃŒ
  4. readinessProbe ๋Š” ์ฒ˜์Œ ์‹คํŒจ ํ›„ 3๋ฒˆ์ด ์™„๋ฃŒ๋˜๊ณ , ๊ธฐ๋™์™„๋ฃŒ๊ฐ€ ๋˜์„œ์•ผ ์„ฑ๊ณต (10์ดˆ ๊ฐ„๊ฒฉ ํ˜ธ์ถœ)
  5. livenessProbe ๋Š” ๋ฐ”๋กœ ์„ฑ๊ณต (10์ดˆ ๊ฐ„๊ฒฉ ํ˜ธ์ถœ)

 

3. Application ๋™์ž‘ ์ค‘์‹ฌ์˜ ํ”„๋กœ๋ธŒ ์ดํ•ด

probe ๊ธฐ๋Šฅ์ด ์ƒ๊ธด ์ด์œ  

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค → Aplication ์„ ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ

Application ์— ๋™์ž‘์ด ์žˆ๊ณ , ๊ทธ ๋™์ž‘์œผ๋กœ๋ถ€ํ„ฐ ์ž๋™ํ™” ๋˜๊ธธ ๋ฐ”๋ผ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋‹ค.

 

์ถœ์ฒ˜URL : https://inf.run/k7mF

Application ๋™์ž‘

  1. App ์ดˆ๊ธฐํ™” (ํŠธ๋ž˜ํ”ฝ ๋ฐ›์„ ์ค€๋น„)
    • pod ์ƒ์„ฑ → Jar ์‹คํ–‰ → Spring ์ดˆ๊ธฐํ™” → DB ์—ฐ๊ฒฐ
    • ์ด ๊ณผ์ •์ด ๋๋‚˜์•ผ App ์ด ์ค€๋น„๋˜๊ณ , ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๋ฅผ ์™„๋ฃŒ
  2. User ์ดˆ๊ธฐํ™” (App ์ •์ƒ ๊ธฐ๋™)
    • App ์˜ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ, ์—ฐ๋™ ์‹œ์Šคํ…œ ์ฒดํฌ, DB ๋ฐ์ดํ„ฐ Validation
    • User ์ดˆ๊ธฐํ™” ๊ณผ์ •๊นŒ์ง€ ๋๋‚˜์•ผ App ์ด ์ •ํ™•ํ•˜๊ฒŒ ๊ธฐ๋™

 

์ž๋™ํ™” ์š”๊ตฌ์‚ฌํ•ญ

  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ
    • App ์ƒํƒœ ์ฒดํฌ (์ดˆ๊ธฐํ™” ๋?)
    • ์™ธ๋ถ€ API ์ ‘๊ทผ ๐Ÿ™…‍โ™€๏ธ
  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ (User ์ดˆ๊ธฐํ™” ์ „)
    • App ์ƒํƒœ ์ฒดํฌ (App ์ด ์‚ด์•„ ์žˆ๋Š”์ง€?)
    • ์™ธ๋ถ€ API ์ ‘๊ทผ ๐Ÿ™…‍โ™€๏ธ
  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ (User ์ดˆ๊ธฐํ™” ํ›„)
    • App ์ƒํƒœ ์ฒดํฌ (App ์ด ์‚ด์•„ ์žˆ๋Š”์ง€?)
    • ์™ธ๋ถ€ API ์ ‘๊ทผ ๐Ÿ™†‍โ™€๏ธ
  • App ์žฅ์•  ๋ฐœ์ƒ ์‹œ
    • App ์žฌ๊ธฐ๋™ ๐Ÿ”„

 

Kubernetes ์ œ๊ณต ๊ธฐ๋Šฅ

  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ
    • /startUp API ํ˜ธ์ถœ (์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€)
    • Service ์™€ Pod ๋Š” ๋ฏธ์—ฐ๊ฒฐ
  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ (User ์ดˆ๊ธฐํ™” ์ „)
    • /liveness API ํ˜ธ์ถœ
    • ๋งŒ์•ฝ ์‹คํŒจ์‹œ Pod ์žฌ๊ธฐ๋™
  • API ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ (User ์ดˆ๊ธฐํ™” ํ›„)
    • /readiness API ํ˜ธ์ถœ
    • ๋งŒ์•ฝ ์„ฑ๊ณต ์‹œ Service ์™€ Pod ์—ฐ๊ฒฐ

⇒ redinessProbe, livenessProbe ๋Š” ์ฃฝ์„ ๋•Œ๊นŒ์ง€ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœํ•˜๋Š” API ๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

 

Probe ๋™์ž‘ ์ •๋ฆฌ

startupProbe "App ์ดˆ๊ธฐํ™”๊ฐ€ ๋๋‚ฌ๋‚˜?"

๐Ÿ™†‍โ™€๏ธ (์„ฑ๊ณต) : livenessProbe, readinessProbe ํ˜ธ์ถœ
๐Ÿ™…‍โ™€๏ธ (์‹คํŒจ) : ๋‹ค์‹œ ํ˜ธ์ถœ
livenessProbe "App ์ด ์‚ด์•„์žˆ๋‚˜?"

๐Ÿ™†‍โ™€๏ธ (์„ฑ๊ณต) : ๋‹ค์‹œ ํ˜ธ์ถœ 
๐Ÿ™…‍โ™€๏ธ (์‹คํŒจ) : Pod ์žฌ๊ธฐ๋™
readinessProbe "App ์ด ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‚˜ ?"

๐Ÿ™†‍โ™€๏ธ (์„ฑ๊ณต) : ๋‹ค์‹œ ํ˜ธ์ถœ (Service, Pod ์—ฐ๊ฒฐ)
๐Ÿ™…‍โ™€๏ธ (์‹คํŒจ) : Service, Pod ์—ฐ๊ฒฐ ํ•ด์ œ (ํŠธ๋ž˜ํ”ฝ ๋ฐ›์„ ์ˆ˜ ์—†์Œ)

 

 

4. ์ผ์‹œ์ ์ธ ์žฅ์•  ์ƒํ™ฉ์—์„œ์˜ ํ”„๋กœ๋ธŒ ํ™œ์šฉ

์•ฑ์ด ์ž˜ ๊ธฐ๋™๋˜์„œ ์„œ๋น„์Šค ์ค‘์ธ ์ƒํƒœ → ๐Ÿšจ ์ผ์‹œ์ ์ธ ์žฅ์• ๊ฐ€ ์ƒ๊ฒผ๋‹ค 

  • ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถœ์ˆ˜๋„ ์žˆ๊ณ 
  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋‹ค๋ณด๋ฉด ์Šค์Šค๋กœ ํ•ด๊ฒฐ๋  ์ˆ˜๋„ ์žˆ๋‹ค

livenessProbe ๊ฐ€ ์‹คํŒจํ•˜๋ฉด → Pod ์žฌ๊ธฐ๋™

  • probe ๊ฐ€ ์—†์—ˆ์œผ๋ฉด ์ •์ƒ์œผ๋กœ ๋Œ์•„์™”์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ → Pod ๋ฅผ ์žฌ๊ธฐ๋™ ์‹œํ‚ค๋ฉด์„œ App ์—์„œ ์ฒ˜๋ฆฌ ์ค‘์ธ ์ž‘์—…๋“ค์€ ๋ชจ๋‘ ์‹คํŒจ

readinessProbe ๊ฐ€ ์‹คํŒจํ•˜๋ฉด → ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๊ธˆ์ง€

  • ์‹คํŒจ์‹œ ์™ธ๋ถ€ API ์ ‘๊ทผ์„ ๊ธˆ์ง€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— App ๋ถ€๋‹ด ๊ฐ์†Œ (๊ทธ๋Œ€๋กœ ๋‘์–ด๋„ ๋จ)

⇒ livenessProbe ์˜ ์ฒดํฌ์ฃผ๊ธฐ๋ฅผ readinessProbe ์™€ ๊ฐ™์ง€ ์•Š๋„๋ก ์„ค์ •

์‹คํŒจํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ธธ๊ฒŒ ์„ค์ •ํ•ด์„œ Pod ๊ฐ€ ์‰ฝ๊ฒŒ ์žฌ๊ธฐ๋™ ๋˜๋Š” ๊ฑธ ๋ฐฉ์ง€

 

5. ์‘์šฉ ๊ณผ์ œ

https://soyeon-devlog.tistory.com/43