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