티스토리 뷰

반응형

Pod spec 에는 restartPolicy 필드가 있다.

Pod의 Container가 종료했을 때, 재시작 정책을 정의하는 필드이다.

 

3가지의 값을 허용한다.

  • Always (default): Container들이 정상적으로 종료(zero exit code)되었더라도 재시작하는 정책. Container가 어떻게 종료되든 간에 무조건 구동 중이여야한다면 해당 옵션을 사용하는 것이 유용하다.
  • OnFailure : Container가 비정상적으로 종료(non-zero exit code)하는 경우에만 재시작하는 정책. Pod가 특정 task를 수행하도록 설게되었고, 그 task가 완료(성공)되면 재시작하지 않는게 정상인 경우라면 해당 옵션을 사용하는 것이 유용하다.
  • Never: Container의 exit code와 관계없이 재시작하지 않는 정책.

 

 

특징이 몇 가지 있다.

  • Pod의 전체 container에 반영되는 속성이다. Pod의 필드지, Container마다 설정되는 필드가 아님을 주의하자.
  • 재시작 정책에 따라 Pod가 존재하고 있는 Node의 kubelet에 의해 재시작된다. restartPolicy가 따르는 재시작은 kubelet 에 의해 재시작되는 경우만을 의미한다. 직접 코드 또는 외부에서 트리거시키는 등의 재시작은 해당 재시작 정책을 따르지 않을 수 있다.

 

 

재시작은 Container 종료와 함께 바로 실행되는 것일까? 아니다!

  • 여러 분야의 구현체에서 특정 요청의 실패에 따라 재시도를 바로 하지 않고, 지수 백오프 지연(Exponential Back-off delay) 후에 진행한다. Kubernetes도 같다.
  • kubelet은 지수 백오프 지연(10s/20s/40s/ ... /5m)로 Container 재시작을 시도한다. 재시도에 성공해서 10분간 정상적으로 구동되면, 재시작 지수 백오프 타이머를 재설정한다.

 

 

여러 Probe에 실패하면 재시도 하게 되는데, 이런 경우에도 재시도 정책을 따른다.

  • 즉, Probe에 실패하면 kubelet 이 Container를 죽인다. 그러므로 해당 Container가 재시작 정책의 대상이 되는 것이다.
  • 모든 Probe가 실패하면 재시작하게 되는 것은 아니다. livenessProbe, startupProbe 의 경우 실패(Failure) 시, 재시도하게 된다. 하지만 readinessProbe 는 실패해도 재시도하지 않는다.

 

 

References

파드 라이프사이클

Configure Liveness, Readiness and Startup Probes

What is the difference between always and on failure for kubernetes restart policy?

320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함