Search

Pod Life Cycle

Pod는 장기적인 엔티티 보단 임시적인 리소스로 restart policy에 따라 실패할경우 삭제되며 self-healing을 하지 않는다.
Pod가 할당된 노드가 작동을 하지 않을경우 pod는 삭제되며 혼자 다시 살아날 수 없다.
Pod는 다른 노드로 “옮길”수 없으며 꼭 삭제되고 다시 생성되어야 한다.
Pod의 상태는 다음과 같이 나눌 수 있다.
Pending : k8s 클러스터에 pod가 등록되었으나 아직 실행중이지 않은 상태 (이미지 pull 중.. 등)
Running : pod의 container가 생성되고 실행중인 상태
Succeeded : 모든 컨테이너들이 return 0으로 종료되었고 restart가 활성화 되지 않았을때
Failed : 모든 컨테이너들이 0이 아닌 값으로 종료되거나 시스템에 의해서 종료된 경우 + restart가 활성화 되지 않았을때
Unknown : pod의 상태를 알 수 없는 상태일때 (ex: pod가 존재하는 node와의 연결이 끊어졌을때)
Container의 상태는 다음과 같이 나눌 수 있다.
Waiting : 이미지를 pull 하거나 secret을 반영하는 중인 등 아직 containter가 실행중이지 않은 상태
[postStart hook]
Running : container가 실행중인 상태
[preStop hook]
Terminated : 컨테이너가 정상 혹은 비정상 적으로 꺼진 상태
Pod에 Crash가 났을때는 다음과 같이 작동한다.
첫번째 크래시 : restartpolicy에 따라 재시작을 시도한다.
반복되는 크래시 : expotential하게 (10, 20, 40, 80… < 5분) 쉬는 시간을 줘서 리소스 독점을 막는다.
CrashLoopBackOff 모드로 진입 : 실패와 재시작을 반복하고 있는 상태
크래시 중 복구 성공시 : 10분정도의 시간 후에 크래시 카운터를 0으로 다시 리셋한다.
Pod 컨디션은 다음과 같이 나눌 수 있다 각자 True, False값을 가질 수 있다.
PodScheduled : pod가 노드에 스케쥴 되었는가?
PodReadyToStartContainers : Pod 환경이 잘 생성되고 네트워크는 연결되었는가
ContainersReady : Pod의 모든 컨테이너가 작동중인가
Initialized : 모든 init 컨테이너가 성공적으로 종료되었는가
Ready : Pod 가 트래픽을 받을 준비가 되었는가