K8S Pod Lifecycle
Pod와 Container Lifecycle에 따른 상태
1. Pod
1) Phase
Pod의 상태
$ kubectl describe pod <name-of-pod>
- Pending : 파드가 쿠버네티스 클러스터에서 승인되었지만, 하나 이상의 컨테이너가 설정되지 않았고 실행할 준비가 되지 않았다. 여기에는 파드가 스케줄되기 이전까지의 시간 뿐만 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함된다.
- Running : 파드가 노드에 바인딩되었고, 모든 컨테이너가 생성되었다. 적어도 하나의 컨테이너가 아직 실행 중이거나, 시작 또는 재시작 중에 있다.
- Succeeded : 파드에 있는 모든 컨테이너들이 성공적으로 종료되었고, 재시작되지 않을 것이다.
- Failed : 파드에 있는 모든 컨테이너가 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료되었다. 즉, 해당 컨테이너는 non-zero 상태로 빠져나왔거나(exited) 시스템에 의해서 종료(terminated)되었다.
- Unknown : 어떤 이유에 의해서 파드의 상태를 얻을 수 없다. 이 단계는 일반적으로 파드가 실행되어야 하는 노드와의 통신 오류로 인해 발생한다.
2) Conditions
Pod는 하나의 PodStatus를 가지며, 그것은 파드가 통과했거나 통과하지 못한 PodConditions 배열을 가진다.
- PodScheduled : 파드가 노드에 스케줄되었다.
- ContainersReady : 파드의 모든 컨테이너가 준비되었다.
- Initialized : 모든 초기화 컨테이너가 성공적으로 완료(completed)되었다.
- Ready : 파드는 요청을 처리할 수 있으며 일치하는 모든 서비스의 로드 밸런싱 풀에 추가되어야 한다
3) Conditions : Reason
Pod Conditions의 마지막 전환에 대한 이유
- ContainersNotReady
- PodCompleted
2. Container
1) State
Container 상태
- Waiting
- Running
- Terminated
2) State : Reason
Container 상태의 원인
- ContainerCreating
- CrashLoopBackOff
- Error
- Completed
3. Lifecycle Sample
- 예) #1 (Pod와 Container 기동 중인 상태)
- Pod : Phase -> Pending
- Container : State -> Creating
- Container : State : Reason -> ContainerCreating
- 예) #2 (기동 중 Container가 에러가 난 상태)
- Pod : Phase -> Running
- Container : State -> Waiting
- Container : State : Reason -> CrashLoopBackOff
- 예) #3 (Pod, Container 모두 정상 기동 된 상태)
- Pod : Phase -> Running
- Container : State -> Running
- 예) #4 (Job에 에러가 발생한 상태)
- Pod : Phase -> Failed
- Container : State -> Terminated
- Container : State : Reason -> Error
- 예) #5 (Job이 정상적으로 완료된 상태)
- Pod : Phase -> Succeeded
- Container : State -> Terminated
- Container : State : Reason -> Completed
4. 기타
- ImageID가 없으면 Image를 download 중이라는 의미
- initContainers : Container보다 먼저 실행되서 Container를 초기화 시키는 등의 일을 한다.
...
spec:
containners:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'until nslookup service; do echo waiting for my service; sleep 2; done;']
- name: init-mydb
image: busybox:1.28'
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
...