앱 코드에서 컨테이너 종료 처리

2042 단어
DigitalOcean App Platform과 같은 요즘 대부분의 작은 앱은 PaaS에서 실행되기 시작합니다. 이와 같은 플랫폼은 앱 실행 전후 환경을 제어합니다. 앱이 시작될 때 시작 작업을 실행할 수 있으므로 사전 실행과 관련해서는 문제가 되지 않습니다.

그러나 앱, 특히 컨테이너가 종료될 때 정리 코드를 실행하는 것은 간단하지 않습니다. 여기서 Linux Signals을 사용하여 빵 한 조각으로 두 마리의 새를 먹일 수 있습니다.

개인적으로 사용하는 신호는 SIGTERM입니다. 이는 프로세스를 종료하려는 의도를 나타냅니다. 클라이언트 컨테이너가 종료될 때 운영 서비스에서 이 신호를 보냅니다. 이 신호를 포착하여 종료를 방지할 수 있지만 대부분의 서비스는 일정 시간이 지나면 앱 강제 종료 신호SIGKILL를 보냅니다. 경우에 따라 구성할 수 있습니다.
SIGTERM를 사용하면 앱에서 다음을 수행할 수 있기 때문에 두 마리의 새에게 먹이를 줍니다.
  • 정리 코드 실행
  • 애플리케이션을 정상적으로 종료합니다
  • .

    이렇게 하면 앱이 진행 중인 모든 작업을 종료할 시간이 있습니다. 그래서 그것은 어떻게 생겼습니까?

    // javascript
    process.on('SIGTERM', () => {
        console.info('SIGTERM signal received.');
    
        /**
         * This is where cleanup code can be run. For example, closing down the http server.
         */
        console.log('Closing http server.');
        server.close(() => {
            console.log('Http server closed.');
        });
    
        process.exit(0)
    });
    
    


    이 예제 스니펫은 nodejs 환경에서 실행되며 () => {...} 신호가 발생할 때 익명 함수SIGTERM를 프로세스에 연결합니다. 정리 코드가 실행되고 이 예제에서는 http 서버이지만 임의의 서비스 시간일 수 있는 server가 닫히고 process.exit(0)가 실행됩니다.

    Note: Exit code 0 means the process exited successfully, any other exit code indicates an error of some type.



    추가 자료



    Kubernetes best practices: terminating with grace은 기간 확장 및 이러한 신호가 Kubernetes에서 작동하는 방식에 대한 추가 세부 정보와 함께 위의 내용과 많이 겹치는 훌륭한 기사입니다.

    좋은 웹페이지 즐겨찾기