根據預設,Cloud Run 服務不會指定執行環境,因此 Cloud Run 會根據使用的功能選取執行環境。因此,除非您為服務指定執行環境,否則 Cloud Run 可以選取第一代或第二代環境。
請注意,Cloud Run 作業只會使用第二代執行環境,且無法變更。
第一代執行環境的冷啟動速度很快,且可模擬大部分 (但不是全部) 的作業系統呼叫。原本這是 Cloud Run 服務唯一可用的執行環境。
第二代執行環境提供完整的 Linux 相容性,而非系統呼叫模擬。這個執行環境提供:
- 提升 CPU 效能
- 網路效能更快,尤其是在封包遺失的情況下
- 與 Linux 完全相容,包括支援所有系統呼叫、命名空間和 cgroup
- 支援網路檔案系統
雖然第二代執行環境在持續負載下通常執行速度較快,但對大多數服務而言,冷啟動時間比第一代長。
如何選擇執行環境
如有下列任一情況,請使用第一代:
- Cloud Run 服務的流量突然暴增,需要快速擴充至多個執行個體,或服務對冷啟動時間很敏感。
- 您的 Cloud Run 服務流量不穩定,導致系統經常從零開始擴充。
- 您想使用的記憶體容量小於 512 MiB。 第二代執行環境至少需要 512 MiB 的記憶體。
如果您的 Cloud Run 服務符合下列任一條件,建議使用第二代:
- 您的服務需要使用網路檔案系統,但只有第二代支援這項功能。
- 您的服務流量相當穩定,且可容忍冷啟動速度稍慢。
- 服務有耗用大量 CPU 資源的工作負載。
- 服務可望獲得更快的網路效能。
- 您的服務需要使用軟體,但由於未實作的系統呼叫,導致軟體無法在第一代中執行。
- 您的服務需要 Linux cgroup 功能。
- 您的服務使用第三方基礎架構來保護容器安全。
使用第二代執行環境的最佳做法
建議容器安裝 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。網址格式為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
包裝服務。這樣做可讓服務以 tini
的子程序形式執行,而 tini
則會擔任容器初始化程序的角色。如需操作說明,請參閱 Docker 指令。
或者,您也可以變更應用程式,直接處理 SIGTERM。
後續步驟
- 如要為 Cloud Run 服務指定執行環境,請參閱「選取執行環境」。
- 如要為 Cloud Run 服務指定記憶體,請參閱記憶體限制。
- 如要搭配使用 Filestore 與 Cloud Run,請參閱「搭配使用 Filestore 與 Cloud Run」。
- 如要搭配使用 Cloud Storage FUSE 與 Cloud Run,請參閱「搭配使用 Cloud Storage FUSE 與 Cloud Run」。
- 如要在 Cloud Run 中使用 NFS、NDB、9P、CIFS/Samba 和 Ceph 等網路檔案系統,請參閱「使用網路檔案系統」一文。