Cloud Run 提供暫時磁碟磁碟區,僅在執行個體存續期間保留。這項功能可讓您指定所需的磁碟空間和掛接位置。Cloud Run 隨即會將該磁碟空間分配給資源。
系統會在啟動時自動佈建磁碟、預先格式化為 ext4,並使用執行個體專屬金鑰加密。暫時磁碟會建立磁碟區,讓任何使用者都能讀取或寫入。由於儲存空間是暫時性的,因此執行個體關閉時,所有資料都會永久刪除。包括因下列原因導致的關機:
- 執行個體當機
- 將流量遷移至新修訂版本
磁碟專屬於特定執行個體,不會與其他執行個體或修訂版本共用。您可以為每個磁碟區設定掛接點,控管檔案系統結構。
關閉執行個體前,Cloud Run 會向執行個體中的所有容器傳送 SIGTERM 信號,表示實際關閉前有 10 秒的時間,屆時 Cloud Run 會傳送 SIGKILL 信號。您可以在這 10 秒內執行清理作業,例如最後一次複製磁碟內容永久儲存空間。
用途
暫時磁碟可用於下列用途:
- 資料處理工作負載:在 Cloud Run 中處理大型資料檔案時,通常會將整個檔案儲存在記憶體中,或將檔案分割成較小的片段。有了臨時儲存空間,您就不必為了建立資料的臨時本機副本,而支付大量記憶體費用。您也可以處理較大的資料集。
- 快取:在網路服務用途中,將資料快取至磁碟,而非從遠端儲存空間擷取,可最佳化應用程式的延遲時間。
儲存空間和執行個體限制
適用的限制如下:
- 磁碟區大小限制:每個磁碟區的大小必須介於
1Gi至100Gi之間。 - 執行個體儲存空間限制:根據預設,每個執行個體的總空間上限為 10 GiB。如要為每個執行個體設定超過 10 GiB 的記憶體,請申請提高配額。
- 執行個體磁碟區限制:每個執行個體最多只能有 10 個暫時磁碟區。
- 專案限制:根據預設,每項專案一開始的區域分配總量限制為 0 GiB。首次在某個區域部署具有暫時磁碟的資源時,專案會自動在該區域獲得 100 GiB 的配額。在執行階段,這項區域配額會由該區域內所有執行中的執行個體共用。部署資源時,每個執行個體的暫時磁碟大小總和乘以執行個體數量上限,不得超過區域分配限制。舉例來說,如果區域限制為 100 GiB,則磁碟為 10 GiB 的資源最多可設定 10 個執行個體。如有需要,請申請提高配額。
申請提高配額
如需更多容量,請要求提高 Cloud Run worker 集區的配額。請點選下列按鈕中的連結,要求所需配額。
| 目前配額 | 配額連結 |
|---|---|
| 每個執行個體 10 GiB | 申請提高每個執行個體的配額 |
| 每項專案 100 GiB | 申請提高每項專案的配額 |
如要進一步瞭解如何要求提高配額,請參閱「如何提高配額」。
限制
只有第二代執行環境支援暫時磁碟。根據預設,Cloud Run worker 集區會使用第二代執行環境。不允許的路徑
Cloud Run 不允許您在 /dev、/proc 或 /sys 或其子目錄中掛接磁碟區。
支援的地區
所有 Cloud Run 位置都可使用暫時磁碟。
事前準備
-
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
- 查看 Cloud Run 定價頁面,瞭解 CPU、記憶體和網路輸出費用。佈建磁碟的完整大小和使用該磁碟的執行個體生命週期,都會影響費用。
必要的角色
如要取得設定臨時磁碟所需的權限,請要求管理員授予您下列 IAM 角色:
- Cloud Run worker 集區的 Cloud Run 開發人員 (
roles/run.developer) - 服務身分的服務帳戶使用者 (
roles/iam.serviceAccountUser)
如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run worker 集區與Google Cloud API (例如 Cloud 用戶端程式庫) 互動,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
建立及掛接暫時磁碟
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 建立及掛接暫時磁碟:
控制台
前往 Google Cloud 控制台的「Cloud Run」頁面:
從 Cloud Run 導覽選單中選取「Worker pools」(工作站集區):
如要設定現有 worker 集區,請按一下該集區,然後點選「Edit and deploy new revision」(編輯並部署新的修訂版本)。
如要設定新的 worker 集區,請按一下「Deploy container」(部署容器),然後填寫初始 worker 集區頁面。然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開工作站集區設定頁面。
按一下「容器」分頁標籤。
勾選「Ephemeral disk」(暫時磁碟) 核取方塊。
從選單中指定暫時磁碟大小。
輸入掛接路徑。
按一下「建立」或「更新」。
gcloud
如要新增並掛接磁碟區,請按照下列步驟操作:
gcloud 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:worker 集區的名稱。
- VOLUME_NAME:要為磁碟區指定的名稱。
- SIZE:磁碟大小,例如
10Gi。ephemeral-disk磁碟區的大小必須介於1Gi至100Gi之間。 - MOUNT_PATH:掛接磁碟區的相對路徑,例如
/mnt/my-volume。
YAML
如果您要建立新的 worker 集區,請略過這個步驟。如要更新現有 worker 集區,請下載其 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 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:worker 集區的名稱。
- REGION: Google Cloud 區域。
- CONTAINER_NAME:要為容器指定的名稱。
IMAGE_URL:參照包含 worker 集區的容器映像檔,例如us-docker.pkg.dev/cloudrun/container/worker-pool:latest。- VOLUME_NAME:要為磁碟區指定的名稱。
- MOUNT_PATH:掛接磁碟區的相對路徑,例如
/mnt/my-volume。 - SIZE:磁碟大小,例如
10Gi。ephemeral-disk磁碟區的大小必須介於1Gi至100Gi之間。
使用下列指令建立或更新 worker 集區:
gcloud run worker-pools replace worker-pool.yaml
gcloud run worker-pools replace指令預設會使用worker-pool.yaml檔案 (如有)。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
deletion_protection = "true"
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:worker 集區的名稱。
- REGION: Google Cloud 區域。
IMAGE_URL:參照包含 worker 集區的容器映像檔,例如us-docker.pkg.dev/cloudrun/container/worker-pool:latest。- VOLUME_NAME:要為磁碟區指定的名稱。
- MOUNT_PATH:掛接磁碟區的相對路徑,例如
/mnt/my-volume。 - SIZE:磁碟大小,例如
10Gi。ephemeral-disk磁碟區的大小必須介於1Gi至100Gi之間。
讀取及寫入磁碟區
如果您使用 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");清除並移除磁碟區和磁碟區掛接
您可以清除所有磁碟區和掛接,也可以移除個別磁碟區和磁碟區掛接。
清除所有磁碟區和磁碟區掛接
如要清除單一容器 worker 集區中的所有磁碟區和磁碟區掛接,請執行下列指令:
gcloud run worker-pools update WORKER_POOL \ --clear-volumes \ --clear-volume-mounts
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 bucket),建議您逐步複製,而不是依賴 10 秒的 SIGTERM 到 SIGKILL 寬限期。如要進一步瞭解執行個體關閉作業,請參閱「容器執行階段合約」。
Cloud Run 可以讀取及寫入 Cloud Storage,不需額外設定網路。為達到最佳效能,建議您使用直連虛擬私有雲,透過虛擬私有雲網路轉送往返 Cloud Storage 的流量。
如果 Cloud Run 資源不需要存取網際網路,則可採用這個方法。如果確實需要網路連線能力,請設定 Cloud NAT,或參閱「傳送至 Google API 的內部流量」。
如要設定直連虛擬私有雲輸出和 worker 集區,請完成下列步驟:
前往 Google Cloud 控制台的「Cloud Run」頁面:
從選單中選取「Worker pools」(工作站集區),然後按一下「Deploy container」(部署容器),設定新的工作站集區。如要設定現有 worker 集區,請按一下該集區,然後點選「Edit and deploy new revision」(編輯並部署新的修訂版本)。
如要設定新的 worker 集區,請填寫初始 worker 集區頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開 worker 集區設定頁面。
按一下 [網路] 分頁標籤。
選取「連線至虛擬私有雲」。
在「Traffic routing」(流量轉送) 部分,選取「Route all traffic to the VPC」(將所有流量轉送至虛擬私有雲),透過虛擬私有雲網路傳送所有傳出流量。
按一下 [Create] (建立) 或 [Deploy] (部署)。
現在,您可以從 Cloud Run worker 集區傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。
在您連線的子網路上啟用Private Google Access。