티스토리 뷰
✅ 아래 글의 내용 및 이미지는 인프런 "쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2" 강의를 듣고 정리한 글입니다.
Pod (probe) - 프로브 기본 개념
Pod의 Probe(프로브) 는 Kubernetes에서 애플리케이션의 상태를 모니터링하는 중요한 기능이다. 프로브는 다음과 같은 세 가지 유형으로 나뉜다.
- Startup Probe
- 애플리케이션이 정상적으로 시작되었는지 확인하는 역할을 한다.
- 기동 중에는 API 요청을 받을 수 없으므로, 이 프로브가 성공할 때까지 다른 프로브(readiness, liveness)는 실행되지 않는다.
- 설정 예시
startupProbe: httpGet: path: "/ready" port: 8080 periodSeconds: 10 successThreshold: 1 failureThreshold: 10
- 실패하면 일정 횟수 이후 Pod를 재시작한다.
- Readiness Probe
- 애플리케이션이 정상적으로 서비스할 준비가 되었는지 확인한다.
- 실패하면 서비스 엔드포인트에서 Pod를 제거하여 트래픽이 전달되지 않도록 한다.
- 설정 예시
readinessProbe: httpGet: path: "/ready" port: 8080 periodSeconds: 10 successThreshold: 1 failureThreshold: 2
- 예를 들어, DB 연결이 실패하면 readinessProbe도 실패하여 새로운 요청을 받지 않게 된다.
- Liveness Probe
- 애플리케이션이 정상적으로 동작 중인지 확인한다.
- 실패하면 Pod를 자동으로 재시작한다.
- 설정 예시
livenessProbe: httpGet: path: "/ready" port: 8080 periodSeconds: 10 successThreshold: 1 failureThreshold: 2
- 예를 들어, 애플리케이션이 무한 루프에 빠지거나 응답하지 않으면 이 프로브가 Pod를 재시작한다.
Pod 프로브 동작 흐름
- Startup Probe: 성공할 때까지 readiness/liveness 실행 안 함.
- Readiness Probe: 실패 시 서비스 트래픽 차단.
- Liveness Probe: 실패 시 Pod를 재시작.
즉, Kubernetes의 프로브는 애플리케이션의 상태를 자동으로 체크하여, 서비스 운영을 안정적으로 유지하는 역할을 한다.
실습자료
https://cafe.naver.com/kubeops/39
Application 기능으로 이해하기 - Probe
1. 프로브 기본 개념 2. Applicaiton 로그를 통한 프로브 동작 분석 ▶ 실습 전 사전 준비작업 ▶ Grafana 접속해서 Loki에 Pod로그 화면 세팅 ▶ P...
cafe.naver.com
강의 대로 실습
- 임의로 로그를 구성한 학습적인 상황임을 고려.
- ConfigMap
- 사용자가 App이 기동된 이후에 외부 데이터를 가져와서 추가적으로 시스템을 초기화 시키려는 상황
- readniess는 실패고 liveness는 성공인 상황이 있다. 이건 왜? 사용자 초기화 구간에는 readniess가 실패되게 의도한 상황
2025-02-17 23:58:52
2025-02-17 23:58:52 . ____ _ __ _ _
2025-02-17 23:58:52 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
2025-02-17 23:58:52 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2025-02-17 23:58:52 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
2025-02-17 23:58:52 ' |____| .__|_| |_|_| |_\__, | / / / /
2025-02-17 23:58:52 =========|_|==============|___/=/_/_/_/
2025-02-17 23:58:52 :: Spring Boot :: (v3.1.0)
2025-02-17 23:58:52
2025-02-17 23:58:52 2025-02-17T14:58:52.725Z INFO 1 --- [ main] com.pro.app.AppApplication : Starting AppApplication v0.0.1-SNAPSHOT using Java 17.0.2 with PID 1 (/usr/src/myapp/app.jar started by root in /usr/src/myapp)
2025-02-17 23:58:52 2025-02-17T14:58:52.726Z INFO 1 --- [ main] com.pro.app.AppApplication : The following 1 profile is active: "dev"
2025-02-17 23:58:57 2025-02-17T14:58:57.426Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2025-02-17 23:58:57 2025-02-17T14:58:57.520Z INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-02-17 23:58:57 2025-02-17T14:58:57.520Z INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.8]
2025-02-17 23:58:58 2025-02-17T14:58:58.131Z INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-02-17 23:58:58 2025-02-17T14:58:58.132Z INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5205 ms
2025-02-17 23:59:00 2025-02-17T14:59:00.728Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2025-02-17 23:59:00 2025-02-17T14:59:00.823Z INFO 1 --- [ main] Startup : [System] App is initializing
2025-02-17 23:59:03 2025-02-17T14:59:03.127Z INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-02-17 23:59:03 2025-02-17T14:59:03.127Z INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-02-17 23:59:03 2025-02-17T14:59:03.127Z INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
2025-02-17 23:59:03 2025-02-17T14:59:03.224Z INFO 1 --- [nio-8080-exec-1] DefaultService : [Kubernetes] startupProbe is Failed-> [System] isAppLive: false
2025-02-17 23:59:05 2025-02-17T14:59:05.823Z INFO 1 --- [ main] Startup : [System] Database is connecting
2025-02-17 23:59:08 2025-02-17T14:59:08.028Z INFO 1 --- [nio-8080-exec-2] DefaultService : [Kubernetes] startupProbe is Failed-> [System] isAppLive: false
2025-02-17 23:59:10 2025-02-17T14:59:10.823Z INFO 1 --- [ main] Startup : [System] Database is connected
2025-02-17 23:59:13 2025-02-17T14:59:13.028Z INFO 1 --- [nio-8080-exec-3] DefaultService : [Kubernetes] startupProbe is Failed-> [System] isAppLive: false
2025-02-17 23:59:15 2025-02-17T14:59:15.823Z INFO 1 --- [ main] Startup : [System] App is starting
2025-02-17 23:59:18 2025-02-17T14:59:18.030Z INFO 1 --- [nio-8080-exec-4] DefaultService : [Kubernetes] startupProbe is Failed-> [System] isAppLive: false
2025-02-17 23:59:20 2025-02-17T14:59:20.824Z INFO 1 --- [ main] Startup : [System] App is started
2025-02-17 23:59:23 2025-02-17T14:59:23.029Z INFO 1 --- [nio-8080-exec-5] DefaultService : [Kubernetes] startupProbe is Succeed-> [System] isAppLive: true
2025-02-17 23:59:23 2025-02-17T14:59:23.041Z INFO 1 --- [nio-8080-exec-6] DefaultService : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-02-17 23:59:27 2025-02-17T14:59:27.824Z INFO 1 --- [ main] Startup : [System] ConfigMap data is loading..
2025-02-17 23:59:28 2025-02-17T14:59:28.029Z INFO 1 --- [nio-8080-exec-7] DefaultService : [Kubernetes] livenessProbe is Succeed-> [System] isAppLive: true
2025-02-17 23:59:28 2025-02-17T14:59:28.030Z INFO 1 --- [nio-8080-exec-8] DefaultService : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-02-17 23:59:32 2025-02-17T14:59:32.825Z INFO 1 --- [ main] Startup : [System] ConfigMap data is loading..
2025-02-17 23:59:37 2025-02-17T14:59:37.826Z INFO 1 --- [ main] Startup : [System] ConfigMap data is loading..
2025-02-17 23:59:38 2025-02-17T14:59:38.029Z INFO 1 --- [nio-8080-exec-9] DefaultService : [Kubernetes] livenessProbe is Succeed-> [System] isAppLive: true
2025-02-17 23:59:38 2025-02-17T14:59:38.029Z INFO 1 --- [io-8080-exec-10] DefaultService : [Kubernetes] readinessProbe is Failed-> [System] isAppReady: false
2025-02-17 23:59:42 2025-02-17T14:59:42.827Z INFO 1 --- [ main] Startup : [System] Data loading is completed
2025-02-17 23:59:44 2025-02-17T14:59:44.847Z INFO 1 --- [ main] com.pro.app.AppApplication : Started AppApplication in 54.011 seconds (process running for 56.366)
2025-02-17 23:59:48 2025-02-17T14:59:48.028Z INFO 1 --- [nio-8080-exec-2] DefaultService : [Kubernetes] livenessProbe is Succeed-> [System] isAppLive: true
2025-02-17 23:59:48 2025-02-17T14:59:48.028Z INFO 1 --- [nio-8080-exec-1] DefaultService : [Kubernetes] readinessProbe is Succeed-> [System] isAppReady: true
2025-02-17 23:59:58 2025-02-17T14:59:58.028Z INFO 1 --- [nio-8080-exec-3] DefaultService : [Kubernetes] livenessProbe is Succeed-> [System] isAppLive: true
2025-02-17 23:59:58 2025-02-17T14:59:58.028Z INFO 1 --- [nio-8080-exec-4] DefaultService : [Kubernetes] readinessProbe is Succeed-> [System] isAppReady: true
2025-02-18 00:00:08 2025-02-17T15:00:08.028Z INFO 1 --- [nio-8080-exec-6] DefaultService : [Kubernetes] readinessProbe is Succeed-> [System] isAppReady: true
2025-02-18 00:00:08 2025-02-17T15:00:08.028Z INFO 1 --- [nio-8080-exec-5] DefaultService : [Kubernetes] livenessProbe is Succeed-> [System] isAppLive: true
쿠버네티스에서 왜 probe라는 기능이 생겼나?
쿠버네티스는 어플리케이션을 편하게 관리하게 위해서 만들어짐.
모든 App에는 초기화 과정이 존재함. (DB연결, Spring 초기화, Jar 실행 등등)
사용자 초기화 과정까지 끝나야 App이 기동되었다고 봐야함. (초기 데이터 로딩, 연동 시스템 체크 등등)
이 모든 과정이 끝나야 App이 정확하게 기동을 한것이라고 볼 수 있다.
그 이후부터 외부로부터 트래픽이 들어와야 제대로 된 응답을 할 수 있는 상황.
위에까지의 상황을 자동화 요구사항 기능으로 얘기해보면
API를 받을 수 없는 상태
APP 상태 체크 (초기화가 끝났는지?)
이 과정 동안에는 외부 API 접근 금지
API를 받을 수 있는 상태
APP 상태 체크 (앱이 살아 있는지?)
이 과정에서도 외부 API 접근 금지
APP 기동 상태
APP 상태 체크 (APP이 살아 있는지?)
외부 API 접근 허용
k8s가 없기전 사용자들이 수동으로 App 상태 체크등을 했지만 k8s에서는 프로브라는 속성이 이런 자동화 요구사항에 부합하는 기능을 제공해준다.
startupProbe가 성공하면 liveness와 readiness 기능을 활성화 시킨다.
readiness 프로브가 성공하면 서비스 와 파드를 연결한다!
중간에 readiness 가 실패하면 서비스 와 파드 연결을 다시 해제한다.
마스터 노드에서 실습을 진행!
스프링 부트에서 liveness와 readiness를 활용하려면?
참고 https://lifeplan-b.tistory.com/280
Spring Boot EndPoint(Liveness, Readiness) 활용
SpringBoot 2.3 부터 Kubernetes의 Probe와 통합되어서, 좀 더 Cloud Native한 경험을 만들 수 있는 방법이 추가 되었습니다. 그 방법은?Kubernetes의 LivenessProbe와 ReadinessProbe가 있는데, SpringBoot 2.3부터 liveness와
lifeplan-b.tistory.com
출처
쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의 | 일프로 - 인프런
일프로 | ⚓쿠버네티스, 🙇♀️아직 망설이시나요? 🙋♂️저만 믿고 따라오세요! 당신의 실력을 ⭐어나더 레벨로 만들어 드리겠습니다., ✅ 광범위한 쿠버네티스 기술을 A~Z까지 넓고
www.inflearn.com
- Total
- Today
- Yesterday
- elasticsearch
- docker
- 베리 심플
- Bash tab
- maven
- 오라클
- rocky
- Spring
- Spring Security
- mybatis
- Mac
- claude
- mybatis config
- 북리뷰
- k8s
- oracle
- window
- intellij
- springboot
- Java
- LocalDateTime
- Kotlin
- JavaScript
- LocalDate
- svn
- Linux
- config-location
- localtime
- jQuery
- input
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |