Post

[Kubernetes] Pod Lifecycle 완벽 정리 (Pod 상태, Restart 정책, Health Check)

Kubernetes Pod Lifecycle, Pod 상태, Restart Policy, Liveness Probe, Readiness Probe까지 실무 중심으로 정리합니다.

[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설명
PendingPod가 생성되었지만 실행 준비 중
RunningPod가 정상 실행 중
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 상태는 다음 명령어로 확인할 수 있습니다.

1
kubectl get pods

예시

1
2
3
4
NAME        READY   STATUS    RESTARTS
web-pod     1/1     Running   0
batch-job   0/1     Completed 0
api-pod     0/1     CrashLoopBackOff 3

Restart 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 예시

1
2
3
4
5
6
7
livenessProbe:
  httpGet:
    path: /health
    port: 8080

  initialDelaySeconds: 10
  periodSeconds: 5

Readiness Probe

Readiness Probe는 Pod가 트래픽을 받을 준비가 되었는지 확인합니다.

준비되지 않은 경우 Service에서 제외됩니다.


Readiness 구조

graph TD

A[Service]

B[Readiness Probe]

C[Pod]

A --> B
B --> C

Readiness Probe 예시

1
2
3
4
5
6
7
readinessProbe:
  httpGet:
    path: /ready
    port: 8080

  initialDelaySeconds: 5
  periodSeconds: 3

Liveness 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
This post is licensed under CC BY 4.0 by the author.