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
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 20. Pod - ReadinessProbe, LivenessProbe - 실습 (0) | 2021.02.17 |
---|---|
[k8s] 19. Pod - ReadinessProbe, LivenessProbe (0) | 2021.02.17 |
[k8s] 17. DaemonSet, Job, CronJob - 실습 (0) | 2021.02.14 |
[k8s] 16. DaemonSet, Job, CronJob (0) | 2021.02.14 |
[k8s] 15. Deployment - 실습 (0) | 2021.02.14 |