為 Cloud Run 服務設定 Cloud Storage 磁碟區掛載

本頁說明如何使用 Cloud Run 磁碟區掛接,將 Cloud Storage 值區掛接為儲存空間磁碟區。

在 Cloud Run 中將值區掛接為磁碟區,可將值區內容顯示為容器檔案系統中的檔案。將值區掛接為磁碟區後,您就能存取值區,就像存取本機檔案系統中的目錄一樣,並使用程式設計語言的檔案系統作業和程式庫,而非 Google API 用戶端程式庫。

您可以將磁碟區掛接為唯讀,也可以為磁碟區指定掛接選項

記憶體需求

Cloud Storage 磁碟區掛接會使用 Cloud Run 容器記憶體執行下列活動:

  • 對於所有 Cloud Storage FUSE 快取,Cloud Run 預設會使用存留時間 (TTL) 為 60 秒的 stat 快取設定。狀態快取大小上限預設為 32 MB,型別快取大小上限預設為 4 MB。

  • 讀取時,Cloud Storage FUSE 除了會耗用 stat 和型別快取以外的記憶體,還會為每個讀取的檔案和 goroutine 耗用 1 MiB 的陣列。

  • 寫入 Cloud Storage 時,系統會先將整個檔案暫存在 Cloud Run 記憶體中,再寫入 Cloud Storage。

限制

由於 Cloud Run 使用 Cloud Storage FUSE 掛接這個磁碟區,因此將 Cloud Storage 值區掛接為磁碟區時,請注意下列事項:

  • Cloud Storage FUSE 不會針對同一檔案的多個寫入作業 (檔案鎖定) 提供並行控制。如果有多個寫入作業嘗試替換檔案,則最後一次寫入會成功,所有之前的寫入均會遺失。
  • Cloud Storage FUSE 並非完全符合 POSIX 規範的檔案系統。詳情請參閱 Cloud Storage FUSE 說明文件

不允許的路徑

Cloud Run 不允許您在 /dev/proc/sys,或其子目錄中掛接磁碟區。

事前準備

您需要Cloud Storage bucket,才能掛接為磁碟區。

如要獲得最佳的 Cloud Storage 讀取/寫入效能,請參閱「調整 Cloud Storage FUSE 網路頻寬效能」。

必要的角色

如要取得設定 Cloud Storage 磁碟區掛接所需的權限,請要求管理員授予下列 IAM 角色:

如要取得服務身分存取檔案和 Cloud Storage 值區所需的權限,請要求管理員授予服務身分下列 IAM 角色:

如要進一步瞭解 Cloud Storage 角色和權限,請參閱「Cloud Storage 的 IAM」一文。

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

掛接 Cloud Storage 磁碟區

您可以在不同掛接路徑掛接多個 bucket。您也可以使用容器間相同或不同的掛接路徑,將磁碟區掛接到多個容器。

如果您使用多個容器,請先指定磁碟區,然後為每個容器指定磁碟區掛接。

如要掛接磁碟區,必須使用第二代執行環境。如果沒有明確設定執行環境,Cloud Run 會自動為服務選取第二代執行環境。

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  4. 按一下「Volumes」(磁碟區) 分頁標籤。

    圖片

    • 按一下「新增音量」
    • 在「Volume type」(磁碟區類型) 下拉式選單中,選取 Cloud Storage bucket 做為磁碟區類型。
    • 在「磁碟區名稱」欄位中,輸入要使用的磁碟區名稱。
    • 瀏覽並選取要用於磁碟區的 Cloud Storage bucket,或視需要建立新的 bucket。
    • 如要將 bucket 設為唯讀,請選取「唯讀」核取方塊。
    • 按一下 [完成]
    • 按一下「容器」分頁標籤:
      • 按一下「Volume Mounts」分頁標籤。
      • 按一下「掛接磁碟區」
      • 從選單中選取儲存空間磁碟區。
      • 指定要掛接磁碟區的路徑。
      • 然後按一下 [完成]
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

  • 如要新增磁碟區並掛接,請按照下列步驟操作:

    gcloud run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    取代:

    • SERVICE 改為您的服務名稱。
    • MOUNT_PATH,例如 /mnt/my-volume
    • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
    • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • 如要將磁碟區掛接為唯讀磁碟區,請按照下列步驟操作:

    --add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • 如果您使用多個容器,請先指定磁碟區,然後為每個容器指定磁碟區掛接:

    gcloud run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --container CONTAINER_1 \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH \
    --container CONTAINER_2 \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

  1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 視需要更新。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME

    取代

    • IMAGE_URL,並參照容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • MOUNT_PATH,例如 /mnt/my-volume
    • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
    • IS_READ_ONLY,並使用 True 將磁碟區設為唯讀,或使用 False 允許寫入。
    • BUCKET_NAME 改成 Cloud Storage bucket 的名稱。
  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列項目新增至 google_cloud_run_v2_service 資源:

  resource "google_cloud_run_v2_service" "default" {
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
          bucket = google_storage_bucket.default.name
          read_only = IS_READ_ONLY
        }
      }
    }
  }

  resource "google_storage_bucket" "default" {
    name     = "BUCKET_NAME"
    location = "REGION"
  }

取代:

  • SERVICE 改為您的 Cloud Run 服務名稱。
  • 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 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • MOUNT_PATH 替換為要掛接磁碟區的相對路徑,例如 /mnt/my-volume
  • IS_READ_ONLY,使用 True 將磁碟區設為唯讀,或使用 False 允許寫入。
  • BUCKET_NAME 改成 Cloud Storage bucket 的名稱。

讀取及寫入磁碟區

如果您使用 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");

使用掛接選項設定磁碟區

您可以視需要使用掛接選項,設定磁碟區掛接的各種屬性。您可以使用可用的掛接選項設定快取、掛接特定目錄、啟用偵錯記錄等。

指定掛接選項

您可以使用 Google Cloud CLI、YAML 或 Terraform 指定掛接選項。在 Google Cloud CLI 中,掛接選項以半形分號 (;) 分隔;在 YAML 中,掛接選項則以半形逗號分隔,如下列分頁所示:

gcloud

如要新增磁碟區並使用掛接選項掛接,請按照下列步驟操作:

gcloud beta run services update SERVICE \
    --execution-environment gen2 \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="OPTION_1=VALUE_1;OPTION_N=VALUE_N" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • OPTION_1,並選擇第一個掛接選項。請注意,您可以指定任意數量的掛接選項,但每個掛接選項和值配對之間必須以半形分號分隔。
  • VALUE_1,並將第一個掛接選項設為所需設定。
  • OPTION_N 下一個掛接選項。
  • VALUE_N,並設定下一個掛接選項。
  • MOUNT_PATH,例如 /cache

YAML

  1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 視需要更新。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME
                mountOptions: OPTION_1=VALUE_1,OPTION_N=VALUE_N

    取代

    • IMAGE_URL,並參照內含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • MOUNT_PATH,例如 /cache
    • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
    • IS_READ_ONLY,並使用 True 將磁碟區設為唯讀,或使用 False 允許寫入。
    • BUCKET_NAME 改成 Cloud Storage bucket 的名稱。
    • OPTION_1,並選擇第一個掛接選項。請注意,您可以指定任意數量的掛接選項,並以半形逗號分隔每個掛接選項和值配對。
    • VALUE_1,並將第一個掛接選項設為所需設定。
    • OPTION_N 下一個掛接選項。
    • VALUE_N,並設定下一個掛接選項。
  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列項目新增至 google_cloud_run_v2_service 資源:

  resource "google_cloud_run_v2_service" "default" {
    provider = google-beta
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
            bucket = google_storage_bucket.default.name
            read_only = IS_READ_ONLY
            mount_options = ["OPTION_1=VALUE_1", "OPTION_N=VALUE_N", "OPTION_O"]
        }
      }
    }
  }

取代:

  • SERVICE 改為您的 Cloud Run 服務名稱。
  • REGION 替換成 Google Cloud 地區。
  • IMAGE_URL,並參照內含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • MOUNT_PATH 替換為要掛接磁碟區的相對路徑,例如 /mnt/my-volume
  • IS_READ_ONLY,使用 True 將磁碟區設為唯讀,或使用 False 允許寫入。
  • BUCKET_NAME 改成 Cloud Storage bucket 的名稱。
  • OPTION_1,並選擇第一個掛接選項。請注意,您可以指定任意數量的掛接選項,並以半形逗號分隔每個掛接選項和值配對。
  • VALUE_1,並將第一個掛接選項設為所需設定。
  • OPTION_N (如適用)。
  • VALUE_N,並設定第二個掛接選項。
  • OPTION_O (如適用)。部分掛接選項沒有值。

常用的掛接選項

掛接選項通常用於:

  • 設定快取
  • 只掛接 Cloud Storage bucket 中的特定目錄
  • 設定磁碟區擁有權 (uidgid)
  • 關閉隱含目錄
  • 指定偵錯記錄層級。

設定快取

您可以設定與快取相關的掛接選項,變更磁碟區的快取設定。下表列出設定和預設 Cloud Run 值:

快取設定 說明 預設
metadata-cache-ttl-secs 快取中繼資料項目的存留時間 (以秒為單位)。例如,metadata-cache-ttl-secs=120s。如要使用最新檔案,請指定 0 值。如要一律使用快取版本,請指定 -1 值。詳情請參閱「設定快取撤銷」。 60
stat-cache-max-size-mb 狀態快取可使用的最大大小 (以 MiB 為單位)。狀態快取一律會完全保留在記憶體中,因此會影響記憶體用量。如果工作負載涉及最多 20,000 個檔案,請指定 32 的值。如果工作負載使用的檔案超過 20,000 個,請每增加 6,000 個檔案,就將大小增加 10,其中每個檔案的 stat 快取平均使用 1,500 MiB。

如要讓 stat 快取視需要使用記憶體,請指定 -1 值。如要停用統計資料快取,請指定 0 值。
32
type-cache-max-size-mb 型別快取可使用的每個目錄大小上限 (以 MiB 為單位)。類型快取一律完全保留在記憶體中,因此會影響記憶體用量。

如果掛接的 bucket 中,單一目錄內最多有 20,000 個檔案,請指定 4 值。如果掛接的單一目錄內檔案數量超過 20,000 個,每增加 5,000 個檔案,請將值增加 1,也就是每個檔案平均約 200 個位元組。

如要讓型別快取使用所需記憶體,請指定 -1 值。

如要停用型別快取,請指定 0 值。
4

下列 Google Cloud CLI 指令會將 metadata-cache-ttl-secs 設為 120 秒,並將統計資料和型別快取容量分別增加至 527 MiB:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="metadata-cache-ttl-secs=120;stat-cache-max-size-mb=52;type-cache-max-size-mb=7" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • MOUNT_PATH,例如 /cache

啟用偵錯記錄功能

根據預設,Cloud Storage FUSE 會記錄 Info 以上的事件。您可以透過下列任一記錄嚴重程度層級變更記錄設定,依序從最低到最高:

  • trace
  • debug
  • info
  • warning
  • error
  • 如要關閉所有記錄,請指定值 off

指定嚴重性等級後,Cloud Storage FUSE 會針對嚴重性等級等於或高於指定等級的事件產生記錄。舉例來說,如果您指定 warning 層級,Cloud Storage FUSE 會產生警告和錯誤的記錄。

將記錄檔嚴重程度設為高於 info 的層級可能會影響效能,並產生大量記錄資料,因此建議您只在必要時這麼做。

下列指令列會開啟偵錯記錄:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="log-severity=debug" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • MOUNT_PATH,例如 /cache

停用隱含目錄

為讓 Cloud Storage 更像標準檔案系統,掛接 Cloud Storage bucket 時,Cloud Run 預設會啟用隱含目錄。您可以使用 implicit-dirs 掛接選項關閉隱含目錄。停用隱含目錄可提升效能並降低成本,但會影響相容性。

有了隱含目錄功能,Cloud Run 就能辨識檔案名稱模仿目錄結構的現有 Cloud Storage 檔案,例如 /mydir/myfile.txt。如果停用隱含目錄,Cloud Run 就無法列出或讀取這類檔案。

關閉隱含目錄可減少對 Cloud Storage 的要求次數,進而提升應用程式效能並降低費用。詳情請參閱 Cloud Storage FUSE 檔案和目錄說明文件。

下列指令列會停用隱含目錄:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="implicit-dirs=false" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • MOUNT_PATH,例如 /cache

掛接 Cloud Storage bucket 內的特定目錄

根據預設,Cloud Run 會掛接整個 Cloud Storage 值區,讓 Cloud Run 服務存取所有內容。在某些情況下,您可能只想掛接特定目錄。舉例來說,如果 bucket 包含大量檔案,掛接特定目錄可以提升效能。

您也可以基於隔離目的實作這項功能,讓不同服務存取儲存空間 bucket 中的不同目錄。

下列指令列指定要掛接的目錄:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="only-dir=images" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • MOUNT_PATH,例如 /cache

設定音量 UIDGID

使用 uidgid 掛接選項,變更磁碟區的使用者 ID 和群組 ID。如果您想將檔案擁有權設為與一或多個執行中容器身分相符的特定使用者或群組,這項功能就非常實用。根據預設,磁碟區是由根目錄擁有。

下列指令列會設定 uidgid

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="uid=UID;gid=GID" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

取代:

  • SERVICE 改為您的服務名稱。
  • VOLUME_NAME 改成您要的磁碟區名稱。VOLUME_NAME 值用於將磁碟區對應至磁碟區掛接點。
  • BUCKET_NAME 改成您的 Cloud Storage bucket 名稱。
  • MOUNT_PATH,例如 /cache

設定其他掛接選項

以下完整列出 Cloud Run 支援的所有掛接選項。

目錄

  • implicit-dirs
  • only-dir
  • rename-dir-limit

偵錯

  • debug_fuse_errors
  • debug_fuse
  • debug_gcs
  • debug-invariants
  • debug_mutex

快取

  • stat-cache-capacity
  • stat-cache-ttl
  • type-cache-ttl
  • enable-nonexistent-type-cache

權限

  • uid
  • gid
  • file-mode
  • dir-mode

其他

  • billing-project
  • client-protocol
  • experimental-enable-json-read
  • experimental-opentelemetry-collector-address
  • http-client-timeout
  • limit-bytes-per-sec
  • limit-ops-per-sec
  • max-conns-per-host
  • max-idle-conns-per-host
  • max-retry-sleep
  • -o
  • retry-multiplier
  • sequential-read-size-mb
  • stackdriver-export-interval

如需支援的掛接選項完整說明文件,請參閱 Cloud Storage FUSE 指令列掛接選項

查看磁碟區掛接設定

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run 服務頁面:

    前往 Cloud Run

  2. 在服務清單中,按一下您感興趣的服務,開啟「Service details」(服務詳細資料) 頁面。

  3. 按一下「Volumes」(磁碟區) 分頁標籤。

  4. 在磁碟區詳細資料頁面中找到「磁碟區掛接」設定。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE_NAME
  2. 在傳回的設定中找到「磁碟區掛接」設定。

提升 Cloud Storage FUSE 網路頻寬效能

如要提升讀取和寫入效能,請使用直接虛擬私有雲將 Cloud Run 服務連線至虛擬私有雲網路,並透過虛擬私有雲網路轉送所有輸出流量。你可以透過下列任一方式執行此操作:

  • 啟用「私人 Google 存取權」,並確認將 vpc-egress 參數設為 all-traffic
  • 請使用「網路最佳做法」頁面「Google API 的內部流量」一節中說明的其中一個選項。

容器啟動時間和 Cloud Storage FUSE 掛接

使用 Cloud Storage FUSE 可能會稍微增加 Cloud Run 容器的冷啟動時間,因為 Cloud Run 會先啟動磁碟區掛接,再啟動容器。只有在成功掛接 Cloud Storage FUSE 時,容器才會啟動。

請注意,Cloud Storage FUSE 必須先建立與 Cloud Storage 的連線,才能成功掛接磁碟區。任何網路延遲都可能影響容器啟動時間。因此,如果連線嘗試失敗,Cloud Storage FUSE 就無法掛接,Cloud Run 服務也無法啟動。此外,如果 Cloud Storage FUSE 掛接時間超過 30 秒,Cloud Run 服務將無法啟動,因為 Cloud Run 執行所有掛接作業的總逾時時間為 30 秒。

Cloud Storage FUSE 效能特徵

如果您定義兩個磁碟區,分別指向不同的值區,系統就會啟動兩個 Cloud Storage FUSE 程序。掛接和程序會平行發生。

使用 Cloud Storage FUSE 時,作業會受到網路頻寬影響,因為 Cloud Storage FUSE 會透過 Cloud Storage API 與 Cloud Storage 通訊。如果網路頻寬較低,列出 bucket 內容等作業可能會比較慢。同樣地,讀取大型檔案也需要時間,因為這也受限於網路頻寬。

當您寫入 bucket 時,Cloud Storage FUSE 會在記憶體中完整暫存物件。也就是說,寫入大型檔案時,會受到容器執行個體可用記憶體量的限制 (容器記憶體上限為 32 GiB)。

只有在執行 closefsync 時,寫入作業才會排清至值區,屆時系統會將完整物件上傳至值區。只有在檔案大小為 2 MiB 以上,且內容已附加至檔案時,物件才會完全重新上傳至值區。

詳情請參閱下列資源:

清除及移除磁碟區和磁碟區掛接

您可以清除所有磁碟區和掛接點,也可以移除個別磁碟區和磁碟區掛接點。

清除所有磁碟區和磁碟區掛接點

如要清除單一容器服務中的所有磁碟區和磁碟區掛接點,請執行下列指令:

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-volumeremove-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