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 worker 集區會使用第二代執行環境。禁止的路徑
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 worker 集區上 - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser)
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 工作人員集區與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
建立及掛接暫時磁碟
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 建立及掛接暫時性磁碟:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從選單中選取「工作站集區」,然後按一下「部署容器」,設定新的工作站集區。如要設定現有 worker 集區,請按一下該 worker 集區,然後按一下「Edit and deploy new revision」(編輯並部署新修訂版本)。
如要設定新的工作站集區,請填寫初始工作站集區頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開工作站集區設定頁面。
按一下「容器」分頁標籤。
- 在「資源」下方:
- 按一下「掛接磁碟區」。
- 選取「暫時磁碟」。
- 輸入掛接路徑。
- 從選單中指定暫時性磁碟大小。
- 在「資源」下方:
按一下 [Create] (建立) 或 [Deploy] (部署)。
gcloud
如要新增及掛接磁碟區,請按照下列步驟操作:
gcloud beta run worker-pools update WORKERPOOL \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
更改下列內容:
- WORKERPOOL:工作站集區的名稱。
- VOLUME_NAME:您要為磁碟區指定的名稱。
- SIZE:磁碟大小,例如
100Gi。ephemeral-disk磁碟區的大小至少須為10Gi。 - MOUNT_PATH:要掛接磁碟區的相對路徑,例如
/mnt/my-volume。
YAML
如要建立新的工作站集區,請略過這個步驟。 如要更新現有工作站集區,請下載 YAML 設定:
gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
設定 YAML 檔案:
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: containers: - name: CONTAINER_NAME image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME emptyDir: medium: Disk sizeLimit: SIZE更改下列內容:
- WORKER_POOL:工作站集區的名稱。
- REGION: Google Cloud 區域。
- CONTAINER_NAME:您要為容器指定的名稱。
- IMAGE_URL:包含工作站集區的容器映像檔參照,例如
us-docker.pkg.dev/cloudrun/container/worker-pool:latest。 - VOLUME_NAME:您要為磁碟區指定的名稱。
- MOUNT_PATH:要掛接磁碟區的相對路徑,例如
/mnt/my-volume。 - SIZE:磁碟大小,例如
100Gi。ephemeral-disk磁碟區的大小至少須為10Gi。
使用下列指令建立或更新工作站集區:
gcloud run worker-pools replace worker-pool.yaml
如果存在
worker-pool.yaml檔案,gcloud run worker-pools replace指令預設會使用該檔案。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
deletion_protection = "true"
launch_stage = "BETA"
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,
]
}
}
更改下列內容:
- WORKER_POOL:工作站集區的名稱。
- REGION: Google Cloud 區域。
- IMAGE_URL:包含工作站集區的容器映像檔參照,例如
us-docker.pkg.dev/cloudrun/container/worker-pool:latest。 - VOLUME_NAME:您要為磁碟區指定的名稱。
- MOUNT_PATH:要掛接磁碟區的相對路徑,例如
/mnt/my-volume。 - SIZE:磁碟大小,例如
100Gi。ephemeral-disk磁碟區的大小至少須為10Gi。
讀取及寫入磁碟區
如果您使用 Cloud Run 磁碟區掛接功能,可以透過程式設計語言中的相同程式庫存取已掛接的磁碟區,以便在本機檔案系統上讀取及寫入檔案。
如果您使用現有容器,且容器預期資料會儲存在本機檔案系統,並使用一般檔案系統作業存取資料,這個選項就特別實用。
下列程式碼片段假設磁碟區掛接點的 mountPath 設為 /mnt/my-volume。
NodeJS
使用檔案系統模組在磁碟區中建立新檔案,或附加至現有檔案,/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 worker-pools update WORKER_POOL \ --clear-volumes --clear-volume-mounts
如果您有多個容器,請按照 Sidecar CLI 慣例清除磁碟區和磁碟區掛接:
gcloud run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
移除個別磁碟區和磁碟區掛接點
如要移除磁碟區,您也必須移除使用該磁碟區的所有磁碟區掛接。
如要移除個別磁碟區或磁碟區掛接,請使用 remove-volume 和 remove-volume-mount 旗標:
gcloud run worker-pools update WORKER_POOL \ --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 頁面:
從選單中選取「工作站集區」,然後按一下「部署容器」,設定新的工作站集區。如要設定現有 worker 集區,請按一下該集區,然後按一下「Edit and deploy new revision」(編輯並部署新修訂版本)。
如要設定新的工作站集區,請填寫初始工作站集區頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性) 展開工作站集區設定頁面。
按一下 [網路] 分頁標籤。
選取「連線至虛擬私有雲」。
在「流量轉送」部分,選取「將所有流量轉送至虛擬私有雲」,透過虛擬私有雲網路傳送所有輸出流量。
按一下 [Create] (建立) 或 [Deploy] (部署)。
現在,您可以根據防火牆規則,從 Cloud Run 工作站集區將要求傳送至虛擬私有雲網路上的任何資源。
在您連線的子網路上啟用私人 Google 存取權。