[CKAD] Kubernetes Pod Lifecycle and Status

HongSeokChoi·2025년 9월 3일

ckad

목록 보기
10/14

Kubernetes Pod Lifecycle, Status & Conditions

Pod Status

Pending (대기)

  • Pod가 실행되기 위한 스케줄링이 아직 완료되지 않은 상태입니다. 스케줄러는 사용할 노드를 할당하고 Pod를 실행하기 위한 준비를 합니다.

ContainerCreating (컨테이너 생성 중)

  • 해당 Pod에 필요한 컨테이너 이미지가 다운로드되거나 컨테이너가 시작되는 과정입니다. 이미지 pull이 완료되면 컨테이너가 시작됩니다.

Running (실행 중)

  • 모든 컨테이너가 성공적으로 실행되고 있으며, 애플리케이션도 실행되고 있는 상태입니다.

Succeeded/Failed (성공/실패)

  • Succeeded: 모든 컨테이너가 정상적으로 종료된 상태입니다.
  • Failed: 실행 중에 오류가 발생하거나 비정상적인 종료가 발생한 상태입니다.

Pod Conditions

PodScheduled

  • 스케줄러가 Pod를 노드에 할당한 상태입니다. 이 상태는 노드가 할당되었음을 나타냅니다.

Initialized

  • Pod의 initContainers가 모두 실행 완료되었을 때 표시됩니다. initContainers는 주요 애플리케이션 컨테이너가 실행되기 전에 필요한 작업들을 처리합니다.

ContainersReady

  • 모든 주요 컨테이너가 준비가 완료된 상태입니다. 이 상태는 트래픽을 받을 준비가 되었다는 것을 의미합니다.

Ready

  • 포드가 트래픽을 처리할 준비가 되었다는 표시입니다. 모든 조건이 만족되면 트래픽을 받을 수 있게 됩니다.

kubectl 명령어

kubectl describe pod 또는 kubectl get pods 명령어를 사용하여 Pod의 상태(Status) 및 조건(Conditions)을 실시간으로 확인할 수 있습니다.

Note: 컨테이너 프로세스 실행이 완료되었다고 해서 애플리케이션이 완전히 준비되었다는 것은 아닙니다. 예를 들어 DB가 켜져 있어도 연결 준비가 완료되기까지 몇 초가 소요될 수 있습니다.


Kubernetes Probes

Readiness Probe: 트래픽 받을 준비 여부 확인

애플리케이션이 트래픽을 받을 준비가 되었는지를 판단하기 위한 프로브입니다. 이 프로브가 없으면, 앱이 아직 초기화 중인 상태에서 트래픽이 유입되어 장애가 발생할 수 있습니다.

  • 동작: 이 프로브가 실패할 경우, 포드는 Not Ready 상태로 표시되며, 서비스 엔드포인트에서 제외됩니다.
  • 검사 방법:
    • HTTP GET: 특정 헬스체크 URL(예: /healthz)에 HTTP GET 요청을 보내 응답을 확인합니다.
    • TCP Socket: 특정 포트가 리스닝 중인지 확인합니다.
    • Exec: 컨테이너 내부에서 커맨드를 실행하여 성공 또는 실패를 확인합니다.
  • 주요 옵션:
    • initialDelaySeconds: 애플리케이션이 준비되기까지의 대기 시간
    • periodSeconds: 프로브를 주기적으로 실행하는 시간
    • failureThreshold: 실패할 경우 Not Ready 상태로 전환되기까지의 실패 횟수
    • successThreshold: 성공해야 Ready로 간주되는 최소 성공 횟수

예시:

readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
  failureThreshold: 3

Liveness Probe: 애플리케이션이 살아있는지(정상 동작 중인지) 확인

애플리케이션이 응답이 없거나 Hang 상태인 경우 자동으로 복구하기 위해 사용됩니다.

  • 동작: 프로브가 실패하면, 컨테이너가 재시작되어 애플리케이션을 복구합니다.
  • 검사 방법: Readiness Probe와 동일한 방법을 사용하여 애플리케이션의 상태를 확인합니다.
  • 주요 옵션:
    • initialDelaySeconds: 검사 시작 전의 지연 시간
    • periodSeconds: 프로브 주기
    • failureThreshold: 실패 횟수 기준
livenessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 10
  periodSeconds: 20

Startup Probe: 초기 구동 시간이 긴 애플리케이션 보호

구동 시간이 오래 걸리는 애플리케이션에서 Liveness Probe가 너무 일찍 실행되어 잘못된 실패를 방지할 수 있도록 보호합니다.

  • 동작: Startup Probe가 성공할 때까지 Liveness Probe는 실행되지 않으며, 초기 구동 시간이 긴 애플리케이션이 안정적으로 시작될 수 있게 합니다.
  • 검사 방법: Readiness/Liveness와 동일한 방식으로 사용됩니다.
  • 주요 옵션:
    • initialDelaySeconds: 시작 전 지연 시간
    • periodSeconds: 검사 주기
    • failureThreshold: 실패 횟수 기준
startupProbe:
  exec:
    command: ["cat", "/tmp/ready"]
  initialDelaySeconds: 30
  periodSeconds: 10
  failureThreshold: 30

Probe 비교

  • Readiness Probe: 서비스 트래픽 유입 여부 제어
  • Liveness Probe: 애플리케이션이 죽었을 때 자동 복구
  • Startup Probe: 구동 시간이 오래 걸리는 애플리케이션 보호

Logging in Kubernetes

Docker에서의 로깅

  • 로그 확인:
    • docker logs <container_id>: 컨테이너 로그 출력
    • docker logs -f <container_id>: 실시간 스트리밍

Kubernetes에서의 로깅

  • 로그 확인:
    • kubectl logs <pod_name>: Pod 로그 출력
    • kubectl logs -f <pod_name>: 실시간 스트리밍
  • 다중 컨테이너 Pod:
    • kubectl logs <pod_name> -c <container_name>로 특정 컨테이너 지정 필요

기본 로깅 vs 중앙집중식 로깅

기본 로깅은 간단하고 빠르지만 로그가 손실될 수 있습니다. 중앙집중식 로깅 솔루션(ELK, Loki 등)은 대규모 환경에서 장기적인 분석을 제공하지만, 구축과 운영이 복잡합니다.


Monitoring Kubernetes

모니터링 항목

노드 레벨 지표

  • 클러스터 내 노드 수와 정상 노드 개수
  • CPU, 메모리, 네트워크, 디스크 활용도

포드 레벨 지표

  • 현재 클러스터 내 포드 개수
  • 각 포드의 CPU 및 메모리 사용량

Kubernetes 내장 모니터링 한계

Kubernetes는 자체적인 모니터링 솔루션을 제공하지 않으며, 오픈소스 또는 상용 솔루션을 추가로 사용해야 합니다.


주요 모니터링 솔루션

  • Metrics Server: 설치가 간단하며 kubectl top 명령어로 리소스를 확인할 수 있습니다. 장기 데이터 저장은 불가합니다.
  • Prometheus: 시계열 데이터를 관리하며, 강력한 쿼리 언어 PromQL을 지원합니다. Grafana와의 연동이 가능합니다.
  • Elastic Stack (ELK): Elasticsearch, Logstash, Kibana를 사용하여 로그 및 메트릭을 통합 분석할 수 있습니다.
  • Datadog: 빠른 구축과 다양한 통합을 지원하는 클라우드 기반 APM 및 모니터링 서비스입니다.
  • Dynatrace: 엔터프라이즈급 자동 계측 및 AI 기반 분석을 제공합니다.
profile
Network/Cloud

0개의 댓글