1. Pod의 life Cycle

1) Pending
Initialize
- 파드의 최초 상태를 결정한다.
- 작업이 성공적으로 끝나거나, 아예 설정을 하지 않으면 initialized 값이 True, 아니면 False로 설정된다.
- InitContainer: 본 컨테이너가 가동되기 위해 초기화해야하는 내용을 담는 컨테이너
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
PodScheduled
- 파드가 어느 노드로 올라갈지 스케줄이 완료되면 True가 된다
Image Downloading
- 컨테이너에 이미지 다운로드 동작
- 이 과정에서 Container의 상태는 Waiting이 되는데 이유는 Container가 생성되고 있기 때문이다.
2) Running

- 컨테이너가 정상적으로 가동되면 Running으로 상태가 변한다
- 만일 정상적으로 가동된다면 ContainerReady, Ready의 값이 True로 설정

- 컨테이너 가동중 문제가 시작되어 재 생성이 된다면 Waiting으로 값이 바뀌지만 해당 pod은 이러한 상태를 Running으로 간주한다. 하지만 내부 컨디션은 False로 설정
즉 pod의 상태는 running이지만 컨테이너는 waiting으로 문제가 있을 수 있기 때문에 컨테이너 상태로 모니터링을 해주어야한다.
3) Succeed/Failed

- Job, CronJob으로 생성, 일을 하는 중에는 Running이지만 일을 마치면 파드는 더이상 일을 하지 않는데 해당 상태를 위 2가지로 나타낸다.
- Failed: 작업을 하고 있는 컨테이너 중에 하나라도 문제가 생겼을 경우
- Succeed: 컨테이너가 해당 작업을 모두 성공적으로 마쳤을 경우
- Failed, Succeed 모두 ContainerReady, Ready는 False로 설정이 된다.
- Pending 중 Failed로 상태가 바뀔 수 있다.
- Running 중 통신장애가 발생할 시 Unknown 상태로 바뀌고 해당 상태가 지속될 시 Failed로 상태 변경
2. Pod 상태 확인

kubectl describe pod <pod_name>
ReadinessProbe / LivenessProbe
ReadinessProbe
- ReadinessProbe는 앱이 구동되기 전까지 서비스와 연결이 되지 않도록 해준다.
- 어플리케이션이 시작할 준비가 되었는지 우선 확인 후 앱 구동 순간 트래픽 실패 방지

해당 사진을 확인해보면 최초 Probe하고 5초 후에 실행이 되고 10초마다 cat /tmp/ready.txt라는 명령어가 제대로 동작하는지 확인을 한다. 만일 3회 성공시 해당 어플리케이션이 시작할 준비가 되었다고 인지를 하여 해당 어플리케이션 구동을 실시 한다.
LivenessProbe
- LivenessProbe는 앱의 장애 상황을 감지
- 어플리케이션이 응답가능한지 확인 후 앱 장애시 지속적은 트래픽 실패를 방지한다.

- httpGet, Exec, tcpSocket은 ReadinessProbe, LivenessProbe에서 공통으로 설정하는 내용
- httpGet: 포트, 호스트이름, Path, HttpHeader, Schme 확인 가능
- Exec: 특정 명령어를 날려서 결과 확인
- tcpSocket: 포트번호와 호스트명을 확인해서 ReadinessProbe, LivenessProbe에 대한 성공여부 확인
세부 설정
- initialDelaySeconds: 최초 Probe하기 전 delay 설정
- periodSeconds: Probe를 확인하는 시간의 간격
- timeoutSeconds: 지정된 시간까지 결과가 와야함
- successThreshold: 몇 번의 성공 결과를 받아야 정말 성공으로 인정할건지
- failureThreshold: 몇 번의 실패 결과를 받아야 정말 실패로 인정할건지!

위의 사진을 보면 우선 컨테이너 러닝 준비가 되면 5초 후에 10초 간격으로 http get 메서드로 /health url로 요청을 보낸다, 만일 3회 실패할 시에 해당 pod은 재실행을 하는 방식이다.