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"]
이것으로 서비스에서 분리하는 처리가 끝난 이후부터 파드 종료 처리를 시작하도록 만들 수 있다.
'쿠버네티스' 카테고리의 다른 글
EKS로 ALB Ingress생성 시, ADDRESS가 비어있는 에러 (0) | 2024.05.26 |
---|---|
Windows에서 Helm bitnami 레포지토리 추가 방법 (0) | 2024.05.26 |
3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 5 (0) | 2023.04.21 |
3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 4 (0) | 2023.03.31 |
3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 3 (0) | 2023.03.31 |