Pod Lifecycle
Pod phase (파드의 단계)
pod의 status
필드는 PodStatus
오브젝트로 정의됨
Pending
: 파드가 쿠버네티스 시스템에 의해서 승인되었지만, 파드를 위한 하나 또는 하나 이상의 컨테이너 이미지 생성이 아직 완료되지 않았다. 여기에는 스케줄되기 이전까지의 시간 뿐만 아니라 오래 걸릴 수 있는 네트워크를 통한 이미지 다운로드 시간도 포함된다.Running
:파드가 한 노드에 결합되었고, 모든 컨테이너들의 생성이 완료되었다. 적어도 하나의 컨테이너가 동작 중이거나, 시작 또는 재시작 중에 있다.Succeeded
: 파드에 있는 모든 컨테이너들이 성공으로 종료되었고, 재시작되지 않을 것이다.Failed
: 파드에 있는 모든 컨테이너들이 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료되었다. 즉, 해당 컨테이너는 non-zero 상태로 빠져나왔거나(exited) 시스템에 의해서 종료(terminated)되었다.Unknown
: 어떤 이유에 의해서 파드의 상태를 얻을 수 없다. 일반적으로 파드 호스트와의 통신 오류에 의해서 발생한다.
Pod condition (파드의 조건)
Container probe
Probe는 컨테이너에서 kubelet에 의해 주기적으로 수행되는 diagnostic
진단을 위해서 kubelet은 핸들러를 호출한다. 핸들러의 타입은 다음 3가지
ExecAction
: 지정된 명령어 실행. 0으로 종료되면 성공으로 간주TCPSocketAction
: 지정된 포트에서 컨테이너의 IP 주소에 대해 TCP 검사 수행.HTTPGetAction
: 지정된 포트 및 경로에서 컨테이너의 IP 주소에 대해 HTTP Get 요청 수행. status code가 200보다 크도 400보다 작으면 성공으로 진단
probe의 결과는 3가지
- Success
- Failure
- Unknown
kubelet은 실행중인 컨테이너들에 대해 선택적으로 세가지 종류의 probe를 수행 가능
livenessProbe
: 컨테이너가 동작 중인지 여부. liveness probe에 실패한다면 kubelet은 컨테이너를 죽이고 재시작 정책의 대상이 됨. 만약 이를 제공하지 않으면 기본 상태는 SuccessreadnessProbe
: 컨테이너가 요청을 처리할 준비가 되었는지 여부. readness probe 실패시 pod에 관련된 모든 서비스들의 endpoint에서 pod의 IP 주소를 제거.startupProbe
: 컨테이너 내의 애플리케이션이 시작되었는지를 나타냄. startup probe가 주어진 경우 성공할 때까지 나머지 probe가 활성화 되지 않는다.
언제 각각의 probe를 사용하면 되는지는 kubernetes 문서 참고
재시작 정책
PodSpec은 restartPolicy
로 Always
, OnFailure
, Never
로 설정. default는 Always
Pod lifetime
일반적으로 pod는 사람, 혹은 controller가 명시적으로 pod를 삭제할 때 까지 남아있음
다양한 리소스가 있는데 다음 상황에서 사용
- 예를 들어 웹 서버와 같이 종료되지 않을 것으로 예상되는 파드용 디플로이먼트(Deployment), 레플리카셋(ReplicaSet) 또는 스테이트풀 셋(StatefulSet)을 사용한다.
- 배치 연산과 같이, 종료가 예상되는 파드를 위해서는 잡(Job)을 사용하길 바란다. 잡은 restartPolicy가 실패 시(OnFailure) 또는 절대 안 함(Never)으로 지정된 경우에 적합하다.
- 적합한 노드 당 하나씩 실행해야 하는 파드에는 데몬셋(DaemonSet)을 사용한다.
Init container
initContainer는 pod 안의 container 중 가장 먼저 실행됨. initContainer가 실행되지 못하면 pod가 실행되지 않는다.
initContainer 코드는 멱등성(indempotent)을 유지해야함
initContainer 예시
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- 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 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"]
'backend > kubernetes docs' 카테고리의 다른 글
[kubernetes docs] Replicaset, ReplicationController, Deployment (0) | 2020.06.12 |
---|---|
[kubernetes docs] pod (0) | 2020.06.03 |
kubernetes docs - pod overview (0) | 2020.06.01 |
kubernetes docs - Container (0) | 2020.05.22 |
kubernetes docs: 클러스터 아키텍쳐 - 컨트롤러 (controller) (0) | 2020.05.18 |