Cloud Run 提供暫時性磁碟區,只會在執行個體存續期間保留。這項功能可讓您指定所需的磁碟空間大小,以及掛接磁碟的位置。Cloud Run 隨後會將該磁碟空間量分配給資源。
系統會在啟動時自動佈建磁碟、預先格式化為 ext4,並使用執行個體專屬金鑰加密。暫時磁碟會建立磁碟區,供任何使用者讀取或寫入。由於儲存空間是暫時性的,執行個體關閉時,所有資料都會永久刪除。包括因下列原因造成的關機:
- 執行個體當機
- 服務資源調度
- 將流量遷移至新修訂版本
磁碟專屬於特定執行個體,不會與其他執行個體或修訂版本共用。您可以為每個磁碟區設定掛接點,藉此控管檔案系統結構。
關閉執行個體前,Cloud Run 會向執行個體中的所有容器傳送 SIGTERM 訊號,表示實際關閉前有 10 秒的緩衝時間,屆時 Cloud Run 會傳送 SIGKILL 訊號。您可以在這 10 秒內執行清理作業,例如最後一次複製磁碟內容永久儲存空間。
用途
暫時性磁碟可用於下列用途:
- 資料處理工作負載:在 Cloud Run 中處理大型資料檔案時,您通常會將整個檔案儲存在記憶體中,或是協調將檔案分割成較小的部分。使用暫時性儲存空間時,您不需要支付大量記憶體費用,即可建立資料的暫時本機副本。您也可以處理較大的資料集。
- 快取:在網路服務用途中,將資料快取到磁碟,而不是從遠端儲存空間擷取資料,可最佳化應用程式的延遲時間。
儲存空間和執行個體限制
適用的限制如下:
- 執行個體儲存空間上限:每個執行個體的總空間預設上限為 10 GB。 如有需要,請申請提高配額。
- 執行個體磁碟區限制:每個執行個體最多只能有 10 個磁碟區。
- 專案限制:每個專案在每個區域的預設上限為 100 GB。 如有需要,請申請提高配額。
申請提高配額
首次在某個區域使用 Cloud Run 暫時性磁碟的專案,系統會自動授予每個執行個體 10 GB 的配額,每個專案在每個區域的配額為 100 GB。
如需額外容量,請為 Cloud Run 服務申請提高配額。請使用下列按鈕提供的連結,申請所需配額。
| 目前的配額 | 配額連結 |
|---|---|
| 每個執行個體 10 GB | 要求提高每個執行個體的配額 |
| 每項專案 100 GB | 申請提高每個專案的配額 |
如要進一步瞭解如何要求增加配額,請參閱「如何增加配額」。
限制
只有第二代執行環境支援暫時磁碟。不允許的路徑
Cloud Run 不允許您在 /dev、/proc 或 /sys,或其子目錄中掛接磁碟區。
支援的地區
暫時磁碟功能適用於下列區域:
- 對於非 GPU 工作負載,暫時磁碟適用於:
- 如果您使用 GPU,所有支援 GPU 的區域都會提供暫時性磁碟。
事前準備
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 安裝並初始化 gcloud CLI。
-
更新元件:
gcloud components update
- 如要瞭解 CPU、記憶體和網路輸出費用,請參閱 Cloud Run 定價頁面。您需要支付的費用取決於佈建的磁碟大小,以及使用該磁碟的執行個體存續時間。
必要的角色
如要取得設定暫時磁碟所需的權限,請要求系統管理員授予您下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer) 在 Cloud Run 服務上 -
服務帳戶使用者 (
roles/iam.serviceAccountUser) 服務身分
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
建立及掛接暫時磁碟
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立及掛接暫時性磁碟:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」,然後點選「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後按一下「編輯及部署新的修訂版本」。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性) 展開服務設定頁面。
按一下「容器」分頁標籤。
- 在「資源」下方:
- 選取「暫時磁碟」。
- 從選單指定暫時磁碟大小。
- 輸入掛接路徑。
- 在「資源」下方:
按一下 [Create] (建立) 或 [Deploy] (部署)。
gcloud
如要新增及掛接磁碟區,請按照下列步驟操作:
gcloud beta run services update SERVICE \
--execution-environment=gen2 \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
更改下列內容:
- SERVICE:服務名稱。
- VOLUME_NAME:您要授予磁碟區的名稱。
- SIZE:磁碟大小,例如
100Gi。ephemeral-disk磁碟區的大小至少須為10Gi。 - MOUNT_PATH:要掛接磁碟區的相對路徑,例如
/mnt/my-volume。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定的google_cloud_run_v2_service
資源中新增下列項目: resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
launch_stage = "BETA"
deletion_protection = "true"
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "DISK"
size_limit = "SIZE"
}
}
}
lifecycle {
ignore_changes = [
launch_stage,
]
}
}
更改下列內容:
- SERVICE:服務名稱。
- REGION: Google Cloud 區域。
- IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。 - VOLUME_NAME:您要授予磁碟區的名稱。
- MOUNT_PATH:要掛接磁碟區的相對路徑,例如
/mnt/my-volume。 - SIZE:磁碟大小,例如
100Gi。ephemeral-disk磁碟區的大小至少須為10Gi。
讀取及寫入磁碟區
如果您使用 Cloud Run 磁碟區掛接功能,可以透過程式設計語言中的相同程式庫存取已掛接的磁碟區,以便讀取及寫入本機檔案系統中的檔案。
如果您使用現有容器,且容器預期資料會儲存在本機檔案系統,並使用一般檔案系統作業存取資料,這個選項就特別實用。
下列程式碼片段假設磁碟區掛接點設為 /mnt/my-volume。mountPath
NodeJS
使用 File System 模組在磁碟區中建立新檔案,或附加至現有檔案,/mnt/my-volume:
var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });Python
寫入磁碟區中保留的檔案 /mnt/my-volume:
f = open("/mnt/my-volume/sample-logfile.txt", "a")Go
使用 os 套件在磁碟區中建立新檔案 /mnt/my-volume:
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")Java
使用 Java.io.File 類別在磁碟區中建立記錄檔 /mnt/my-volume:
import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");清除及移除磁碟區和磁碟區掛接
您可以清除所有磁碟區和掛接點,也可以移除個別磁碟區和磁碟區掛接點。
清除所有磁碟區和磁碟區掛接點
如要清除單一容器服務中的所有磁碟區和磁碟區掛接點,請執行下列指令:
gcloud run services update SERVICE \ --clear-volumes --clear-volume-mounts
如果您有多個容器,請按照 Sidecar CLI 慣例清除磁碟區和磁碟區掛接:
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
移除個別磁碟區和磁碟區掛接點
如要移除磁碟區,也必須移除使用該磁碟區的所有磁碟區掛接。
如要移除個別磁碟區或磁碟區掛接,請使用 remove-volume 和 remove-volume-mount 旗標:
gcloud run services update SERVICE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH
最佳做法
請遵循下列最佳做法,有效管理暫時性資料並提升儲存空間效能。
複製到永久儲存空間
如果您打算將暫時磁碟內容複製到永久儲存空間 (例如 Cloud Storage 值區),建議您採取增量複製,而非依賴 10 秒的 SIGTERM 到 SIGKILL 寬限期。如要進一步瞭解執行個體關機,請參閱容器執行階段合約。
Cloud Run 可以讀取及寫入 Cloud Storage,不必進行任何額外的網路設定。為達到最佳效能,建議您使用直接虛擬私有雲,透過虛擬私有雲網路將流量傳送至 Cloud Storage,以及從 Cloud Storage 傳送流量。
如果 Cloud Run 資源不需要存取網際網路,這個方法就適用。如果需要網際網路存取權,請設定 Cloud NAT,或參閱「Google API 的內部流量」。
如要透過服務設定直接虛擬私有雲輸出流量,請完成下列步驟:
前往 Google Cloud 控制台的 Cloud Run 頁面:
如要設定要部署的新服務,請按一下「Create Service」(建立服務)。如要設定及部署現有服務,請按一下該服務,然後點選「編輯及部署新的修訂版本」。
如要設定新服務,請視需要填寫初始服務設定頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性) 展開服務設定頁面。
按一下 [網路] 分頁標籤。
按一下「連線至虛擬私有雲,以傳出流量」。
按一下「直接將流量傳送至虛擬私有雲」。
在「Network」(網路) 欄位中,選取要傳送流量的虛擬私有雲網路。
在「Subnet」(子網路) 欄位中,選取服務接收 IP 位址的子網路。您可以在同一個子網路上部署多項服務。
在「流量轉送」部分,選取「將所有流量轉送至虛擬私有雲」,透過虛擬私有雲網路傳送所有輸出流量。
按一下 [Create] (建立) 或 [Deploy] (部署)。
如要確認服務是否位於虛擬私有雲網路上,請按一下服務,然後點選「網路」分頁標籤。網路和子網路會列在「VPC」資訊卡中。
現在,您可以根據防火牆規則,從 Cloud Run 服務將要求傳送至虛擬私有雲網路上的任何資源。
在您連線的子網路上啟用Private Google Access。
疑難排解
如果遇到問題,請檢查下列事項:- 如果容器的記憶體即將用盡,且您使用 Google Cloud 控制台部署服務的新修訂版本並附加暫時性磁碟, Google Cloud 控制台很可能已將磁碟磁區轉換為記憶體內磁區。這會導致磁碟寫入作業寫入記憶體,進而導致容器記憶體不足。如要修正這個問題,請再次使用 gcloud CLI 重新部署服務,並確認 YAML 檔案在
volumes下方指定medium: Disk。 - 如果將大量資料下載至暫時磁碟時,網路速度緩慢,請按照步驟開啟 Direct VPC。如果未啟用 Direct VPC,網路傳輸速度會較慢。