Cloud Run 서비스는 기본적으로 실행 환경을 지정하지 않으므로, Cloud Run이 사용되는 기능에 따라 실행 환경을 선택합니다. 따라서 서비스의 실행 환경을 지정하지 않으면 Cloud Run이 1세대 또는 2세대 환경을 선택할 수 있습니다.
Cloud Run 작업은 2세대 실행 환경만 사용하며 작업에 대해 이를 변경할 수 없습니다.
1세대 실행 환경은 빠른 콜드 스타트 시간과 모든 운영 체제 호출은 아니지만 대부분의 에뮬레이션을 특징으로 합니다. 원래 Cloud Run의 서비스에서 사용할 수 있는 유일한 실행 환경이었습니다.
2세대 실행 환경은 시스템 호출 에뮬레이션이 아닌 전체 Linux 호환성을 제공합니다. 이 실행 환경은 다음을 제공합니다.
- 더 빠른 CPU 성능
- 특히 패킷이 손실된 경우 더 빠른 네트워크 성능
- 모든 시스템 호출, 네임스페이스, cgroup 지원 등 전체 Linux 호환성
- 네트워크 파일 시스템 지원
2세대 실행 환경이 일반적으로 지속적인 부하 상태에서 더 빠르게 수행되지만 대부분 서비스의 경우 1세대보다 콜드 스타트 시간이 더 오래 걸립니다.
새 서비스 또는 서비스의 새 버전을 배포할 때 Cloud Run 서비스의 실행 환경을 선택할 수 있습니다. 실행 환경을 지정하지 않으면 기본적으로 1세대가 사용됩니다.
실행 환경을 선택하는 방법
다음 중 하나라도 해당되는 경우 1세대를 사용해야 합니다.
- Cloud Run 서비스에 트래픽 급증이 발생하여 많은 인스턴스로 빠르게 수평 확장해야 하거나 서비스가 콜드 스타트 시간에 민감한 경우
- Cloud Run 서비스에 트래픽이 빈번하게 발생하지 않아 0에서 수평 확장되는 경우가 많습니다.
- 512MiB 미만의 메모리를 사용하려는 경우 2세대 실행 환경에는 최소 512MiB의 메모리가 필요합니다.
다음 중 하나라도 Cloud Run 서비스에 적용되면 2세대를 사용해야 합니다.
- 이 서비스에서는 2세대만 지원하는 네트워크 파일 시스템을 사용해야 합니다.
- 서비스의 트래픽이 상당히 안정적이고 다소 느린 콜드 스타트도 허용됩니다.
- 서비스에 CPU 집약적인 워크로드가 있습니다.
- 서비스에서 더 빨라진 네트워크 성능의 이점을 활용할 수 있습니다.
- 서비스에서 구현되지 않은 시스템 호출로 인해 1세대에서 실행 문제가 있는 소프트웨어를 사용해야 합니다.
- 서비스에 Linux cgroup 기능이 필요합니다.
- 서비스가 컨테이너 보안을 위해 서드 파티 인프라를 사용합니다.
2세대 실행 환경 사용 시 권장사항
특히 CPU 주문형 결제 모델을 사용하는 경우 컨테이너가 SIGTERM 핸들러를 설치하는 것이 좋습니다.
SIGTERM을 처리하면 컨테이너가 종료되기 전에 로그 삭제와 같은 필요한 정리 작업을 수행할 수 있습니다. 컨테이너가 SIGTERM을 포착하지 못하더라도 10초 동안 이러한 태스크를 수행할 수 있으며, 이 10초에 대한 요금이 청구될 수 있습니다.
컨테이너가 SIGTERM을 처리하는지 확인하는 방법
컨테이너에 SIGTERM 핸들러가 설치되어 있는지 확인하려면 다음 안내를 따르세요.
Cloud Shell을 시작합니다. 현재 문서 페이지의 헤더에서 Cloud Shell 활성화를 확인할 수 있습니다. 승인 후 프로비저닝될 때까지 기다려야 할 수도 있습니다. 또는 독립형 세션을 시작합니다.
Cloud Shell에서 로컬로 컨테이너를 실행합니다.
docker run IMAGE_URL
IMAGE_URL을 컨테이너 이미지에 대한 참조(예:
us-docker.pkg.dev/cloudrun/container/hello:latest
)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
입니다.Cloud Shell에서 다른 탭을 열고 현재 Cloud Shell 세션에서 실행 중인 컨테이너 목록을 가져옵니다.
docker container ls
이 명령어에서 반환된 컨테이너 ID를 찾아야 합니다.
컨테이너 ID를 사용하여 컨테이너에 SIGTERM 신호 전송
docker kill -s SIGTERM CONTAINER_ID
docker run
을 호출한 탭으로 돌아가서 컨테이너가 종료(중지)되었는지 확인합니다. SIGTERM 신호로 인해 컨테이너가 종료되면 컨테이너가 SIGTERM을 처리하는 것입니다.
SIGTERM 처리 방법
컨테이너가 SIGTERM을 처리하지 않는 경우 SIGTERM 핸들러를 추가하는 가장 간단한 방법은 tini
로 서비스를 래핑하는 것입니다. 이렇게 하면 서비스가 컨테이너 init 프로세스의 역할을 하는 tini
의 하위 프로세스로 실행됩니다.
자세한 내용은 Docker 안내를 참조하세요.
또는 SIGTERM을 직접 처리하도록 애플리케이션을 변경할 수 있습니다.
다음 단계
- Cloud Run 서비스의 실행 환경을 지정하려면 실행 환경 선택을 참조하세요.
- Cloud Run 서비스의 메모리를 지정하려면 메모리 한도를 참조하세요.
- Cloud Run에서 Filestore를 사용하려면 Cloud Run에서 Filestore 사용을 참조하세요.
- Cloud Run에서 Cloud Storage FUSE를 사용하려면 Cloud Run에서 Cloud Storage FUSE 사용을 참조하세요.
- Cloud Run에서 NFS, NDB, 9P, CIFS/Samba, Ceph와 같은 네트워크 파일 시스템을 사용하려면 네트워크 파일 시스템 사용을 참조하세요.