본문 바로가기
네트워크/k8s

[k8s] 18. Pod - Lifecycle

by Lauren X Ming 2021. 2. 16.

Pod - Lifecycle

Lifecylce

  • 사람은 삶이 있음
  • 파드도 사람의 삶처럼 라이프 사이클이 있음
  • 각 단계에 따라 행하는 행동이 다름
  • 여러 기능들이 파드의 특정 단계와 관련이 있음
  • 내용이 복잡하지만 꼭 이해해야 함

Pod의 라이프사이클

  • 파드 생성 후 내용을 보면 Status 밑에 많은 내용이 있음
  • Status 안에 Phase가 있음
  • Phase: 파드의 전체 상태를 대표하는 속성
  • Conditions: 파드가 생성되면서 실행하는 단계와 상태를 알려줌
  • 파드 안에 Container들이 있음
  • Containers의 State는 Container를 대표함

Phase, Conditions

  • Phase: Pending, Running, Succeeded, Failed, Unknown 5개의 상태가 있음
  • Conditions: Initialized, ContainerReady, PodScheduled, Ready
  • Reason: Conditions의 세부 내용을 알려주는 항목 --> ContainerNotReady, PodCompleted

ContainerStatuses

  • State: Waiting, Running, Terminated
  • Reason: ContainerCreating, CrashLoopBackOff, Error, Completed

Phase - Pending

InitContainer

  • 파드의 최초 상태
  • InitContainer: 본컨테이너가 기동되기 위해 초기화해야 하는 내용을 담는 컨테이너, ex) 볼륨, 보안세팅
  • 작업이 성공적으로 끝나거나, 아예 설정을 하지 않으면 Initialized: True, 아니면 Initialized: False

PodScheduled, Image Downloading

  • 파드가 어느 노드로 올라갈지 스캐줄이 완료되면 PodScheduled: True가 됨
    • 직접 노드를 지정하거나, 쿠버네티스가 스캐줄해주거나
  • Image Downloading: 컨테이너에 이미지를 다운로드 동작
  • 이 과정에서 Container의 상태는 Waiting, Reason은 ContainerCreating

Phase - Running

  • 컨테이너가 정상적으로 기동되면 Running
  • 정상적으로 기동되면 ContainerReady, Ready는 True
  • 컨테이너 기동중 문제가 시작되어 재시작되면 Waiting, Reason: CrashLoopBackOff
  • 파드는 이러한 상태를 Running으로 간주하지만 내부 Condition에 ContainerReady, Ready는 False

  • 파드의 상태가 Running이더라도 내부 컨테이너가 Running이 아닐 수 있으니 파드뿐만 아니라 컨테이너도 모니터링 해야함

Phase - Failed, Succeeded

  • Job, CronJob으로 생성할 땐, 일을 하는 중엔 Running이지만, 일을 마치면 파드는 더이상 일을 하지 않은 상태
  • 이 때 상태가 Failed, Succeeded 두 가지로 갈림
  • Failed: 작업을 하고 있는 컨테이너 중에 하나라도 문제가 생김
  • Succeeded: 컨테이너가 모두 작업을 성공적으로 마침
  • Failed건 Succeeded건 ContainerReady, Ready는 False임

Phase - Failed, Unknown

  • Pending 중 Failed로 상태가 바뀔 수 있음
  • Running 중 통신장애가 발생하면 Unknown 상태로 가고, 이게 지속되면 Failed 상태로 바뀜

Phase 정리

RestartPolicy

  • RestartPolicy는 보통 Controller를 통해서 관리
  • Controller는 ReplicaSet/Deployment/StatefulSet과 Job/CronJob에서 사용하는 경우로 분리
  • 파드 재시작이지, 재생성이 아님을 유의!!

ReplicaSet/Deployment/StatefulSet

  • 무적권 Always로만 세팅
  • 파드가 Success건 Failure건 Terminated건 무적권 재시작
  • 파드가 Running이 되도록 유지해야 하기 때문

Job/CronJob

  • 무적권 OnFailure나 Never로 세팅
    • OnFailure: 파드가 Failure 시에만 재시작
    • Never: 절대 재시작 안 함
  • 파드 다시 시작할지 말지 관리자가 결정
    • Job 실패하면 꼮 다시 시작해야 돼! --> OnFailure
    • 걍 내버려둬... --> Never

출처

인프런 - 대세는 쿠버네티스