Pod 생명주기, 재시작 정책

751 단어·2 분·원문(.md)

Pod의 생명주기와 재시작 정책 그리고 컨테이너 상태 진단을 위한 Probe에 대해서 알아보겠다.

Pod의 생명주기 #

pod의 생명주기는 네 가지의 단계로 구분이 되어진다.

  1. PENDING: 클러스터 내 파드가 승인이 되었지만 아직 컨테이너 내부가 시작되기 전이며 노드에 배치되지 않은 상태다.
  2. RUNNING: 클러스터 내 파드가 승인되고 컨테이너가 시작되어 노드에 배치되어있는 상태다.
  3. SUCCEEDED: 노드에 대한 유한한(정적인) 작업이 완료되었을때 나타내는 상태다. 노드를 종료할 때 나타내는 상태이며, 해당 작업을 정상적으로 마쳤다는 뜻이다.
  4. FAILED: 노드에 대한 유한한(정적인) 작업이 완료되었을때 나타내는 상태다. 노드를 종료할 때 나타내는 상태이며, 해당 작업이 비정상 종료되었음을 의미한다.

이 외에도 특수한 경우에만 파드에 부여되는 상태 정보(.status.phase)가 추가로 존재한다.

  • unknown: 파드의 상태가 확인이 불가능할 경우다. 보통 노드 네트워크 문제로 발생한다.
  • terminating: 파드를 삭제시켰을 때 볼 수 있다. 일반적으로 파드는 삭제가되면 30초의 유예시간을 갖는다. 만약 이 유예시간없이 삭제시키고 싶다면 kubelet delete 옵션에 --force를 추가하면 된다.

파드의 생명 주기와 현재 상태는 kubelet이 주기적으로 모니터링한다. 이렇게 모니터링된 상태 정보는 kubectl get pods의 출력 결과 중 STATUS 필드에서 볼 수 있다. 해당 파드 오브젝트의 .status.phase 필드에서도 확인 가능하며, 이때 필요한 명령어는 다음과 같다.

kubectl get pod <파드명> -o jsonpath='{.status.phase}'

Pod 재시작 정책 #

파드에 포함된 컨테이너에는 오류가 생겼을때 재시작하기 위한 정책을 가지고 있다.

이 정책은 3가지로 분류되며 spec.restartPolicy 를 통해 직접 부여할 수 있다.

  1. Always: 컨테이너가 정상/비정상 종료시 항상 재시작한다. default
  2. Onfailure: 컨테이너가 비정상 종료시에만 재시작한다.
  3. Never: 재시작하지 않는다.

컨테이너의 재시작 시도 주기는 최대 300초 한도로 10초 지수 단위로 진행된다.

10초후 20초후 40초후 80초후..

DevOps/k8s/podstatus.md