06 kubelet
06 kubelet
1. Note
1. Note
- Probe는
- 단순히
Pod이 있냐 없냐가 아니라, Pod 안의 애플리케이션이 실제로 정상 동작하는지를 kubelet이 판단하도록 만드는 장치- 그래서 필수는 아님, 없어도 동작하는데 문제는 없음.
- 하지만 안정성을 위해 있는게 좋음
- 단순히
2. Kubelet / Probes
1. Kubelet / Probe
- kubelet: 각 노드(워커 노드)에서 실행되며 Pod를 생성하고 상태를 유지하는 에이전트
- probes: kubelet이 컨테이너 상태를 판단하기 위해 수행하는 헬스 체크 규칙
3. Kubelet 역할
- Pod 스펙(YAML)을 API Server로부터 받아옴
- 컨테이너 런타임(containerd 등)에 컨테이너 실행 요청
- 실행 중인 컨테이너 상태 지속 감시
- probes 설정을 기반으로 헬스 체크 수행
- 이상 상태일 경우 재시작 또는 상태 변경 처리
- Pod 상태를 API Server에 지속적으로 보고
3. Probe 역할
- 실행 목적
- 컨테이너가 정상적으로 동작 중인지 확인
- 서비스 트래픽을 받아도 되는 상태인지 확인
- 아직 초기화 중인지 판단
- 애플리케이션 장애 여부 탐지
- 판단
- POD에 직접 들어가서 상태를 직접 체크하지 X
판단하는 근거
방식 무엇을 확인 특징 HTTP GET API 응답 가장 일반적, Spring Boot TCP Socket 포트 열림 여부 단순 네트워크 체크 Exec 내부 명령 실행 가장 강력하지만 무거움
3. Probe 종류
1. 요약
| 종류 | 목적 | 실패 시 동작 | 사용 시점 |
|---|---|---|---|
| Liveness | 살아있는지 | 재시작 | 실행 중 장애 |
| Readiness | 트래픽 가능 여부 | 서비스 제외 | 요청 받기 전 |
| Startup | 초기 부팅 완료 여부 | 대기 (다른 probe 무시) | 앱 시작 시 |
2. Liveness Probe (생존 확인)
- 컨테이너가 “살아있는지” 확인하는 검사
- 확인 항목
- 앱이 멈췄는데 프로세스만 살아있는 경우
- 무한 루프, 데드락, 응답 없음 상태
- Kubelet 동작
- 실패하면 컨테이너를 재시작
3. Readiness Probe (준비 상태 확인)
- 컨테이너가 “트래픽을 받을 준비가 되었는지” 확인하는 검사
- 확인 항목
- 애플리케이션은 실행 중이지만 DB 연결이 안 된 상태
- 초기 데이터 로딩 중이거나 외부 의존성이 준비되지 않은 경우
- Kubelet 동작
- 실패하면 해당 Pod를 Service 트래픽에서 제외
4. Startup Probe (초기 구동 확인)
- 컨테이너가 “초기 시작 과정을 정상적으로 완료했는지” 확인하는 검사
- 확인 항목
- Spring Boot, JVM처럼 기동 시간이 긴 애플리케이션
- 초기 설정이나 로딩 시간이 긴 서비스
- Kubelet 동작
- 초기 구동 동안에는 Liveness/Readiness Probe를 잠시 무시
- Startup 성공 후에 다른 Probe가 정상적으로 동작
4. 전체적인 흐름
1. 컨테이너 설정 yaml
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
31
32
33
34
35
36
37
38
39
40
apiVersion: apps/v1
kind: Deployment # POD도 가능함.
metadata:
name: demo-app
spec:
replicas: 2
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
# 파드가 여러개 일경우 개별 설정함.
- name: app
image: my-app:1.0
# Probe 영역
livenessProbe: # 컨테이너가 살아있는지 확인 시작
httpGet: # HTTP 방식으로 상태 체크 (GET 요청)
path: /health # 상태 확인 엔드포인트
port: 8080 # 컨테이너 내부 포트
initialDelaySeconds: 10 # 컨테이너 시작 후 10초 뒤부터 검사 시작
periodSeconds: 5 # 5초마다 반복 검사
readinessProbe: # 트래픽 받을 준비 상태 확인 시작
httpGet: # HTTP 방식으로 상태 체크 (GET 요청)
path: /ready # 준비 상태 확인 엔드포인트
port: 8080 # 컨테이너 내부 포트
initialDelaySeconds: 5 # 컨테이너 시작 후 5초 뒤부터 검사 시작
periodSeconds: 5 # 5초마다 반복 검사
startupProbe: # 컨테이너 초기 실행 완료 여부 확인 시작
httpGet: # HTTP 방식으로 상태 체크 (GET 요청)
path: /startup # 초기 부팅 완료 확인 엔드포인트
port: 8080 # 컨테이너 내부 포트
failureThreshold: 30 # 실패 30번까지는 초기 구동으로 보고 기다림
periodSeconds: 10 # 10초마다 반복 검사
2. kubelet 생성
- 별도의 작업이 없이 POD내에서 probe설정을 하면 알아서 자동으로 진행됨.
- Service나 뭐 이런것처럼 별도 실행 X
3. kubelet 작업 흐름
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Deployment
↓
ReplicaSet
↓
Pod 생성
↓
kubelet 실행
↓
container runtime 실행
↓
probe 주기 실행
↓
상태 판단
↓
재시작 / 트래픽 제외 / 유지
5. SpringBoot와 Probe
- Memo
- Pod 내부에서 Probe 설정만 해두면 기본적으로 셋팅이됨
- 의존성추가
1 2 3 4
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
URL 매핑
Probe 종류 Spring Boot Actuator URL 의미 (무엇을 보는가) kubelet 동작 실제 체크 포인트 Liveness Probe /actuator/health/liveness앱이 “살아있는 상태인지” 실패 시 컨테이너 재시작 JVM crash, 무한루프, 응답 불가 Readiness Probe /actuator/health/readiness트래픽 받아도 되는 상태인지 실패 시 Service에서 제외 DB 연결, 외부 API, 초기화 완료 여부 Startup Probe (보통 Actuator 직접 사용 안함 / 커스텀 or readiness로 대체) 초기 부팅 완료 여부 성공 전까지 다른 probe 무시 초기 로딩, Spring Boot 기동 완료
This post is licensed under CC BY 4.0 by the author.