본문 바로가기

쿠버네티스

3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 6

3.6 파드를 안전하게 종료하기 위해 고려해야 할 사항

 정상 혹은 비정상저긍로 종료되는 어떤 경우이든 쿠버네티스 입장에서 종료 요청이 오면 비동기적으로 종료 처리를 시작하고 Terminating 상태로 변경시키는 흐름으로 동작한다. 종료 처리SIGTERM 처리, SIGKILL 처리 순서로 실행된다. 또 이와 병행하여 서비스에서 제외되는 처리가 이루어진다.

 SIGTERM 처리, SIGKILL 처리와 서비스에서 제외되는 처리가 비동기로 이루어진다는 것은 파드를 종료할 때 서비스에서 제외되기 전 SIGTERM 처리를 할 수 있다는 의미다. 결국 서비스에서 제외되기 전에 파드가 클라이언트 요청에 정상적으로 응답될 수 없는 상태가 될 수 있다는 의미다. 파드는 그 특성상 자주 동작과 종료를 반복하기 때문에 이런 상황이 실제로 발생될 수 있다.

 

 이런 현상을 방지하기 위해 preStop 처리일정 시간 파드 종료를 대기시키는 방법을 사용할 수 있다.

preStop 처리란 SIGTERM 처리 전에 임의의 명령어를 실행하는 기능으로 매니페스트에 작성하여 실행할 수 있다. 예제 애플리케이션의 디플로이먼트용 매니페스트인 22_deployment_backend-app_k8s.yaml.template에 다음과 같이 정의되어 있다.

...
lifecycle:
  preStop:
    exec:
      command: ["/bin/sh", "-c", "sleep 2"]

이것으로 서비스에서 분리하는 처리가 끝난 이후부터 파드 종료 처리를 시작하도록 만들 수 있다.