컬쥐네 다락방

Kubernetes | Pod Lifecycle 본문

클라우드/K8S

Kubernetes | Pod Lifecycle

코딩하는 갱얼쥐 2022. 5. 18. 16:07

Pod Lifecycle/ Lifetime

Pod의 상태

  • Pending : 파드가 쿠버네티스 클러스터에서 승인됐지만 하나 이상의 컨테이너가 설정되지 않았고, 실행할 준비가 되지 않은 상태. 여기에는 파드가 스케쥴되기 이전까지의 시간 뿐 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함된다. -> 스케쥴링되기 전, 이미지 받기 전, 컨테이너가 준비 되기 전 상태
  • Running : 파드가 노드에 바인딩되었고, 모든 컨테이너가 생성되었다. 적어도 하나의 컨테이너가 아직 실행중이거나, 시작 또는 재시작 중에 있다. -> 컨테이너가 실행 중, 실행 전, 재시작 중인 상태
  • Succeeded : 파드에 있는 모든 컨테이너들이 성공적으로 종료되었고, 재시작되지 않을 것이다. -> 정상 종료
  • Failed : 파드에 있는 모든 컨테이너가 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료되었다. 즉 해당 컨테이너는 non-zero 상태로 빠져나왔거나 (Exited) 시스템에 의해서 종료(Terminated)되었다. -> 비정상 종료
  • Unknown : 어떤 이유에 의해서 파드의 상태를 얻을 수 없다. 이 단계는 일반적으로 파드가 실행되어야 하는 노드와의 통신 오류로 인해 발생한다. -> 노드 통신 문제로 알 수 없음

Container 상태

  • Waiting : 컨테이너를 시작하기 위해 필요한 작업 (이미지 가져오기, 시크릿 데이터 적용(볼륨 연결) 등)을 실행하는 상태. Waiting인 파드를 쿼리해보면 Reason 필드에 이유가 나타난다.
  • Running : 문제없이 실행되고 있는 상태
  • Terminated : 실행이 종료되었거나 실패한 상태

재시작 정책

파드의 spec 에는 restartPolicy 필드가 있다. restartPolicy 는 파드의 모든 컨테이너에 적용된다. restartPolicy 는 동일한 노드에서 kubelet에 의한 컨테이너 재시작만을 의미한다.

  • pod.spec.restartPolicy
    • Always (기본값)
    • OnFailure
    • Never

지수 백오프

  • 파드 실패시 재시작 정책에 의해 재시작을 한다. 이때 시간에 지수 백오프 지연으로 재시작된다.
    • 재시작 시간을 10초, 20초, 40초 .... 300초까지 시간을 늘려가며 유에 기간을 두는 방식.

컨테이너 프로브

프로브는 컨테이너에서 kubelt에 의해 주기적으로 수행되는 진단(diagnostic)이다. 진단을 수행하기 위해서, kubelet은 컨테이너 안에서 코드를 실행하거나, 또는 네트워크 요청을 전송한다.

프로브 매커니즘

프로브를 사용하여 컨테이너를 체크하는 방법에는 4가지가 있다. 각 프로브는 다음의 4가지 메커니즘 중 단 하나만을 정의해야 한다.

  • exec : 컨테이너 내에서 지정된 명렁어를 실행한다. 명령어가 상태 코드 0으로 종료되면 성공으로 간주한다.
  • grpc : gRPC를 사용하여 원격 호출을 수행한다.
  • httpGet : Web, WebApp에서 사용. 지정한 포트 및 경로에서 컨테이너의 IP 주소에 HTTP Get 요청을 수행한다. 응답 코드가 200 이상, 400 미만이면 성공으로 간주한다.
  • tcpSocket : 지정한 포트 및 경로에서 컨테이너의 IP 주소에 TCP 검사를 수행한다. 포트가 활성화되어 있으면 성공으로 간주한다. 원격 시스템(컨테이너)이 연결을 연 이후 즉시 닫더라도 성공으로 간주한다.

프로브 결과

각 Probe는 다음 세 가지 결과 중 하나를 가진다.

  • Success : 컨테이너가 진단을 통과함
  • Failure : 컨테이너가 진단에 실패함
  • Unknown : 진단 자체가 실패함 -> 추가 체크 진행

프로브 종류

  • livenessProbe : 애플리케이션이 실행/작동 여부
  • readinessProbe
  • StartupProbe : 애플리케이션이 시작 되었는지 확인. 실패시 나머지 프로브는 비활성화
`pods.spec.containers.livenessProbe`
- exec
- httpGet
- tcpSocket
- periodSeconds: 프로브 주기
- failureThreshold: 실패 임계값
- successThreshold: 성공 임계값
- initialDelaySecond: 프로브 유예 기간
- timeoutSeconds: 프로브 타임아웃

'클라우드 > K8S' 카테고리의 다른 글

Kubernetes | Workload-Controller  (0) 2022.05.18
Kubernetes | Label, LabelSelector, Annotation  (0) 2022.05.17
Kubernetes | Namespace  (0) 2022.05.17
Kubernetes | Workload - Pod  (0) 2022.05.17
Kubernetes | Object 파일  (0) 2022.05.17
Comments