Kubernetes · Concepts ·
[Kubernetes] Pod Lifecycle 완벽 정리 (Pod 상태, Restart 정책, Health Check)
☸️ Kubernetes Pod Lifecycle 이해하기 #
Kubernetes에서 Pod는 가장 작은 배포 단위입니다.
하지만 Pod는 단순히 생성되고 종료되는 것이 아니라 여러 상태를 거치며 생명주기(Lifecycle) 를 가지게 됩니다.
Pod Lifecycle을 이해하면 다음과 같은 문제를 해결할 수 있습니다.
- Pod가 왜 재시작되는지
- Pod가 Pending 상태에서 멈춘 이유
- 서비스가 트래픽을 받지 못하는 이유
- Health Check 설정 방법
Pod Lifecycle 전체 흐름 #
Pod는 다음과 같은 상태를 거칩니다.
graph LR A[Pending] B[Running] C[Succeeded] D[Failed] E[Unknown] A --> B B --> C B --> D B --> E
Pod Phase #
Pod 상태는 Pod Phase로 표현됩니다.
대표적으로 5가지 상태가 있습니다.
| Phase | 설명 |
|---|---|
| Pending | Pod가 생성되었지만 실행 준비 중 |
| Running | Pod가 정상 실행 중 |
| Succeeded | 작업이 성공적으로 완료 |
| Failed | 실행 실패 |
| Unknown | 상태 확인 불가 |
Pending 상태 #
Pod가 생성되었지만 아직 실행되지 않은 상태입니다.
주요 원인
- Node 스케줄링 실패
- 이미지 다운로드 중
- 볼륨 마운트 문제
- 리소스 부족
구조
graph TD A[Pod Created] B[Scheduler] C[Node Assigned] D[Image Pull] A --> B B --> C C --> D
Running 상태 #
Pod가 정상적으로 실행되고 있는 상태입니다.
조건
- 최소 하나의 컨테이너가 실행 중
- 컨테이너 프로세스가 정상 작동
graph TD A[Pod] B[Container] C[Application Process] A --> B B --> C
Succeeded 상태 #
Pod의 작업이 정상적으로 완료된 상태입니다.
주로 Batch 작업에서 발생합니다.
예
- 데이터 처리
- ETL 작업
- CronJob
Failed 상태 #
컨테이너가 오류로 종료된 경우입니다.
대표적인 원인
- 애플리케이션 오류
- 메모리 부족(OOM)
- CrashLoop
Pod 상태 확인 #
Pod 상태는 다음 명령어로 확인할 수 있습니다.
1kubectl get pods예시
1NAME READY STATUS RESTARTS
2web-pod 1/1 Running 0
3batch-job 0/1 Completed 0
4api-pod 0/1 CrashLoopBackOff 3Restart Policy #
Pod는 컨테이너가 종료되면 Restart Policy에 따라 재시작됩니다.
| Policy | 설명 |
|---|---|
| Always | 항상 재시작 |
| OnFailure | 실패 시 재시작 |
| Never | 재시작하지 않음 |
Restart 구조 #
graph TD A[Container Crash] B[Restart Policy] C[Restart Container] D[Stop] A --> B B --> C B --> D
Liveness Probe #
Liveness Probe는 컨테이너가 살아있는지 확인하는 기능입니다.
애플리케이션이 deadlock 상태가 되면 자동으로 재시작합니다.
Liveness 구조 #
graph TD A[Kubelet] B[Liveness Probe] C[Container] D[Restart] A --> B B --> C C --> D
Liveness Probe 예시 #
1livenessProbe:
2 httpGet:
3 path: /health
4 port: 8080
5
6 initialDelaySeconds: 10
7 periodSeconds: 5Readiness Probe #
Readiness Probe는 Pod가 트래픽을 받을 준비가 되었는지 확인합니다.
준비되지 않은 경우 Service에서 제외됩니다.
Readiness 구조 #
graph TD A[Service] B[Readiness Probe] C[Pod] A --> B B --> C
Readiness Probe 예시 #
1readinessProbe:
2 httpGet:
3 path: /ready
4 port: 8080
5
6 initialDelaySeconds: 5
7 periodSeconds: 3Liveness vs Readiness #
두 Probe는 목적이 다릅니다.
| Probe | 역할 |
|---|---|
| Liveness | 컨테이너 재시작 |
| Readiness | 트래픽 제어 |
Probe 구조 #
graph TD A[Pod] B[Liveness Probe] C[Readiness Probe] D[Restart] E[Service Traffic] A --> B A --> C B --> D C --> E
Pod Lifecycle 전체 아키텍처 #
graph TD A[Pod Created] B[Scheduler] C[Node Assigned] D[Container Start] E[Running] F[Liveness Probe] G[Readiness Probe] H[Restart] A --> B B --> C C --> D D --> E E --> F E --> G F --> H
정리 #
Pod Lifecycle 핵심
Pod Phase #
- Pending
- Running
- Succeeded
- Failed
- Unknown
Restart Policy #
- Always
- OnFailure
- Never
Health Check #
- Liveness Probe
- Readiness Probe
Advertisement