本文說明如何使用 Google Kubernetes Engine (GKE) 上的 Cloud Storage FUSE 設定檔,自動調整 Cloud Storage FUSE CSI 驅動程式的效能,並加快 AI/機器學習工作負載的資料存取速度。
Cloud Storage FUSE 設定檔可自動執行重要的效能調整程序。您可以套用預先定義的設定檔,讓系統為您設定 CSI 驅動程式,不必手動調整設定。對於 AI/機器學習應用程式,使用這些設定檔可加快訓練和推論速度,並減少作業負擔。
本文適用於應用程式開發人員和機器學習 (ML) 工程師,他們希望提升應用程式效能,但沒有深厚的儲存空間調整專業知識。如要進一步瞭解常見角色,請參閱常見 GKE 使用者角色和工作。
閱讀本文前,請務必先熟悉 Cloud Storage、Kubernetes 和 Cloud Storage FUSE CSI 驅動程式的基本概念。此外,請參閱使用 Cloud Storage FUSE CSI 驅動程式的規定。
使用 Cloud Storage FUSE 設定檔的優點
如要自動調整 AI/機器學習工作負載的效能,Cloud Storage FUSE 設定檔會使用預先定義的 Cloud Storage FUSE 設定,並套用其他 GKE 專屬設定。這些設定的依據為 Cloud Storage FUSE 效能調整最佳做法。使用預先定義的設定檔有下列好處:
- 簡化效能調整:使用預先定義的 Cloud Storage FUSE 設定檔,為常見的 AI/機器學習工作負載套用最佳化設定,例如訓練、服務和檢查點。
- 動態資源感知最佳化:使用 Cloud Storage FUSE 設定檔時,CSI 驅動程式會根據 bucket 或子目錄的特徵 (例如大小、物件數量和位置類型)、附屬應用程式限制,以及節點的可用資源,自動調整快取大小並選取最佳快取媒介 (例如 RAM 或本機 SSD)。
- 提升讀取效能:使用
gcsfusecsi-serving設定檔時,GKE 會自動啟用快速快取,提升服務工作負載的讀取效能。 - 效能調整深入分析:透過結構化記錄,深入瞭解自動調整決策,包括環境的輸入信號,以及驅動程式套用的設定。詳情請參閱「查看最佳化建議洞察資料」一文。
隨著 Cloud Storage FUSE 最佳做法不斷演進,這些設定檔也會透過新的 GKE 版本更新。
限制
- 您無法將 Cloud Storage FUSE 剖析檔用於 Cloud Storage FUSE CSI 暫時性磁碟區。
- 設定檔不支援動態掛接,也就是指定底線 (_ ) 來掛接 Kubernetes ServiceAccount 可存取的所有值區。
- 系統不支援使用自訂私人 Sidecar 映像檔覆寫 Sidecar 映像檔。詳情請參閱「為 Sidecar 容器設定私人映像檔」。
需求條件
- GKE 叢集必須執行 1.35.1-gke.1616000 以上版本。
- 叢集必須啟用 Cloud Storage FUSE CSI 驅動程式。如果您要建立新叢集,或在現有叢集上啟用驅動程式,請參閱文件中的下列步驟,為 GKE 設定 Cloud Storage FUSE CSI 驅動程式:
費用
除了與 Cloud Storage FUSE CSI 驅動程式相關的標準 GKE 和 Cloud Storage 費用外,使用 Cloud Storage FUSE 設定檔還會產生下列費用。
值區掃描費用
Cloud Storage FUSE 設定檔會對 bucket 或子目錄執行背景掃描。這項掃描預設每七天執行一次。掃描值區會產生列出物件的 Cloud Storage A 級作業費用。
Rapid Cache 費用
gcsfusecsi-serving 設定檔會自動啟用 Rapid Cache,並根據 Cloud Storage Rapid Cache 定價計費。如要避免在不再需要快取執行個體時產生費用,請參閱「費用控管」。
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Cloud Storage API 和 Google Kubernetes Engine API。 啟用 API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 選擇符合需求的 Cloud de Confiance by S3NS 區域。雖然我們建議在相同區域中建立 GKE 叢集和 Cloud Storage bucket,以提升效能並節省成本,但如果您使用
gcsfusecsi-serving設定檔或打算啟用快速快取,就必須這麼做。 - 請確認您有現成的 Cloud Storage bucket,其中包含 AI/ML 工作負載的資料集、模型或檢查點。如需建立 bucket,請參閱「建立 bucket」。
選取效能設定檔
選擇最符合工作負載需求的設定檔。每個設定檔都對應叢集上預先安裝的 StorageClass。如要詳細瞭解 Cloud Storage FUSE 設定檔的定義,請參閱對應的 StorageClass 設定參考資料。
| 設定檔 | StorageClass 名稱 | 適合用途 | 主要功能與特色 |
|---|---|---|---|
| 訓練 | gcsfusecsi-training |
高處理量讀取 | 在大型資料集上訓練時,最佳化 GPU 和 TPU 的資料延遲。 |
| 查核點機制 | gcsfusecsi-checkpointing |
高處理量寫入 | 盡可能縮短儲存大型檢查點所需的時間,減少訓練暫停時間。 |
| 供應 | gcsfusecsi-serving |
資料存取和快取 | 預設啟用 Rapid Cache,加快讀取作業。 |
如要驗證叢集中安裝的 StorageClass,請執行下列指令:
kubectl get sc -l gke-gcsfuse/profile=true
設定 IAM 權限
授予 GKE 服務代理權限,以便分析 Cloud Storage bucket 及管理 Rapid Cache。
在本節中執行指令時,請替換下列預留位置:
GCS_PROJECT:包含 Cloud Storage bucket 的專案 ID。PROJECT_NUMBER:GKE 叢集專案的專案編號。BUCKET_NAME:Cloud Storage bucket 的名稱。
請根據您的個人資料和使用需求,選擇下列其中一個選項。
選項 A:自訂角色 (建議)
如果使用 Rapid Cache,或使用「放送」設定檔,則必須選取這個選項。如果您使用放送設定檔,或打算為其他設定檔手動啟用快速快取,就必須授予管理該快取的權限。
建立自訂 IAM 角色,允許掃描物件及建立 Rapid Cache 快取:
gcloud iam roles create gke.gcsfuse.profileUser \ --project=GCS_PROJECT \ --title="GKE GCSFuse Profile User" \ --description="Allows scanning Cloud Storage buckets for objects, retrieving bucket metadata, and creating caches." \ --permissions="storage.objects.list,storage.buckets.get,storage.anywhereCaches.create,storage.anywhereCaches.get,storage.anywhereCaches.list,storage.anywhereCaches.update"將自訂角色繫結至特定 bucket 的 GKE 服務代理:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --project=GCS_PROJECT \ --member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com" \ --role="projects/GCS_PROJECT/roles/gke.gcsfuse.profileUser"
選項 B:訓練和檢查點設定檔的標準角色
如果您只使用「訓練」或「檢查點」設定檔,且不打算使用 Rapid Cache,請執行下列指令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--project=GCS_PROJECT \
--member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com" \
--role="roles/storage.legacyBucketReader"
使用 Cloud Storage FUSE 設定檔部署工作負載
請按照下列步驟,使用 Cloud Storage FUSE 設定檔部署工作負載。
建立 PersistentVolume (PV) 資訊清單,參照其中一個 Cloud Storage FUSE 設定檔 StorageClass:
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi persistentVolumeReclaimPolicy: Retain storageClassName: STORAGECLASS_NAME mountOptions: - only-dir=BUCKET_DIR_PATH # Optional csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME更改下列內容:
STORAGECLASS_NAME:要使用的設定檔 StorageClass 名稱。這個值必須是gcsfusecsi-training、gcsfusecsi-checkpointing或gcsfusecsi-serving。BUCKET_DIR_PATH:(選用) Cloud Storage bucket 中的路徑,用於掛接特定目錄。如果指定了路徑,GKE 會掃描這個路徑以進行最佳化。如果省略,GKE 會掃描整個 bucket。BUCKET_NAME:您在設定 Cloud Storage bucket 存取權時指定的 Cloud Storage bucket 名稱。
建立 PersistentVolumeClaim (PVC),要求與 PV 相同的 StorageClass:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: my-pv storageClassName: STORAGECLASS_NAME更改下列內容:
NAMESPACE:要部署 Pod 的命名空間。STORAGECLASS_NAME:PV 中列出的 StorageClass 名稱。
在 Deployment 中使用 PVC:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment namespace: NAMESPACE spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: gke-gcsfuse/volumes: "true" spec: serviceAccountName: KSA_NAME containers: - name: my-container image: busybox volumeMounts: - name: my-gcs-volume mountPath: "/data" volumes: - name: my-gcs-volume persistentVolumeClaim: claimName: my-pvc更改下列內容:
NAMESPACE:要部署 Pod 的命名空間。KSA_NAME:您在設定 Cloud Storage bucket 存取權時建立的 Kubernetes ServiceAccount 名稱。
部署後,CSI 驅動程式會根據節點的資源 (例如 GPU 或 TPU、記憶體、本機 SSD、bucket 或子目錄大小,以及 Sidecar 資源限制),自動計算最佳快取大小和掛接選項。
驗證自動最佳化
GKE 背景程序會自動分析儲存空間,並同步處理快速快取 (如已啟用)。
檢查值區掃描和快取的狀態
建立 PV 後,請按照下列步驟檢查 bucket 掃描和快取狀態。不必等待 Pod 部署完成。
檢查 PV 狀態:
kubectl describe pv my-pv在輸出內容中,確認
ScanOperationSucceeded事件是否出現。輸出內容類似於下列內容:Normal ScanOperationSucceeded gke-gcsfuse-scanner Bucket scan completed successfully for bucket "my-bucket", directory "my-dir": "526893" objects, "57690897566" bytes如果您使用
gcsfusecsi-serving設定檔,請確認快取層準備就緒後,會顯示AnywhereCacheSyncSucceeded事件。輸出結果會與下列內容相似:Normal AnywhereCacheSyncSucceeded gke-gcsfuse-scanner Anywhere Cache sync succeeded for PV "my-pv": us-central1-c:running確認 PV 註解已根據掃描結果更新:
gke-gcsfuse/bucket-scan-status: completed gke-gcsfuse/bucket-scan-num-objects: 526893 gke-gcsfuse/bucket-scan-total-size-bytes: 57690897566 gke-gcsfuse/bucket-scan-location-type: multi-region gke-gcsfuse/bucket-scan-hns-enabled: true gke-gcsfuse/bucket-scan-last-updated-time: 2025-12-10T22:48:38Z
檢查 Pod 狀態
部署 Pod 後,請執行下列指令:
kubectl get pods -n NAMESPACE
將 NAMESPACE 替換為部署 Pod 的命名空間。
現在,您的 Pod 應該會處於 RUNNING 狀態,並自動套用最佳成效最佳做法。如果 Pod 顯示 SchedulingGated 狀態,表示 GKE 仍在掃描你的 bucket 或子目錄。CSI 控制器完成掃描並更新 PV 前,Pod 會維持這種狀態。
如要瞭解驅動程式在 Pod 啟動後記錄的特定調整決策,請參閱「查看建議深入分析」。
如有任何錯誤,請參閱「疑難排解」一節。
StorageClass 設定參考資料
本節提供預先安裝的 Cloud Storage FUSE 設定檔的 StorageClass 資訊清單,以及設定檔使用的掛接選項和參數的詳細參考資料。這些設定可讓 gcsfuse.csi.storage.gke.io 驅動程式自動調整效能,並管理 AI/機器學習工作負載的資源。
訓練
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-training
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-training
parameters:
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
查核點機制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-checkpointing
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-checkpointing
- read_ahead_kb=1024
parameters:
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
供應
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcsfusecsi-serving
labels:
gke-gcsfuse/profile: "true"
provisioner: gcsfuse.csi.storage.gke.io
mountOptions:
- profile:aiml-serving
- read_ahead_kb=131072
- file-cache:max-size-mb:0
- read:enable-buffered-read:true
- read:global-max-blocks:80
parameters:
anywhereCacheZones: "*"
anywhereCacheAdmissionPolicy: "admit-on-first-miss"
anywhereCacheTTL: "1h"
skipCSIBucketAccessCheck: "true"
gcsfuseMetadataPrefetchOnMount: "true"
fuseFileCacheMediumPriority: "gpu:ram|lssd,tpu:ram,general_purpose:ram|lssd"
fuseMemoryAllocatableFactor: "0.7"
fuseEphemeralStorageAllocatableFactor: "0.85"
bucketScanResyncPeriod: "168h"
bucketScanTimeout: "2m"
設定檔會使用下列掛接選項和參數,適用於 gcsfuse.csi.storage.gke.io 驅動程式:
mountOptions:profile:套用預先定義的 Cloud Storage FUSE 最佳化設定,專為 AI/機器學習工作負載量身打造。預先安裝設定檔的有效值為aiml-training、aiml-checkpointing和aiml-serving。read_ahead_kb:指定預先讀取緩衝區的大小 (以 KB 為單位)。這個選項可讓 Cloud Storage FUSE 從 Cloud Storage 預先擷取資料,進而提升循序存取模式的讀取效能。file-cache:max-size-mb:針對服務設定檔,指定檔案快取的最大大小 (以 MiB 為單位)。在服務工作負載中,模型通常只會載入 GPU 或 TPU 記憶體一次,因此這個參數會設為0,停用本機 Cloud Storage FUSE 檔案快取,避免多餘的磁碟 I/O,並節省本機儲存空間。read:enable-buffered-read:針對 Serving 設定檔,啟用 Cloud Storage FUSE 來管理自己的內部緩衝區,有助於減少應用程式與核心之間的小型昂貴系統呼叫次數。read:global-max-blocks:針對 Serving 設定檔,限制用於緩衝讀取的並行記憶體區塊總數。這個選項有助於防止 FUSE 程序在處理多個要求時耗用所有可用 RAM。
parameters:skipCSIBucketAccessCheck:設為"true"時,CSI 驅動程式會略過初始值區存取檢查。這個參數有助於減少對安全權杖服務的呼叫次數,避免發生配額問題。gcsfuseMetadataPrefetchOnMount:設為"true"時,會指示 CSI 驅動程式在掛接磁碟區後,立即從 Cloud Storage 將物件中繼資料prefetching到本機快取。這個參數可加快檔案的首次存取速度。fuseFileCacheMediumPriority:定義 Cloud Storage FUSE 檔案快取使用的儲存媒體優先順序。您可以為搭載 GPU、TPU 或一般用途的節點指定不同偏好設定。媒體選項包括ram和lssd(本機 SSD,如有啟用)。fuseMemoryAllocatableFactor:以字串格式指定分數,限制 Cloud Storage FUSE 快取可使用的記憶體上限,相對於節點可分配的記憶體總量和 Sidecar 的記憶體限制。fuseEphemeralStorageAllocatableFactor:限制節點上臨時儲存空間的 Cloud Storage FUSE 快取用量 (例如用於檔案快取的本機 SSD),相對於節點可分配的臨時儲存空間,或側車的臨時儲存空間限制用於快取。bucketScanResyncPeriod:設定重新掃描 PV 的時間間隔,以偵測 Cloud Storage 值區的變更。bucketScanTimeout:單一 bucket 掃描作業允許的最長時間。如果掃描時間超過此上限,系統可能會使用部分結果。anywhereCacheZones:指定以半形逗號分隔的支援區域清單,系統會在這些區域中建立快速快取快取,例如"us-central1-a,us-central1-b"。如要使用叢集可用的所有區域,請將值設為"*"。如果將這項政策設為"none"或不指定,系統會停用 Rapid Cache。anywhereCacheTTL:儲存在 Rapid Cache 快取中的資料存留時間 (TTL),從上次存取時間開始計算。如果變更這個值,現有的快速快取執行個體就會更新為新的存留時間。anywhereCacheAdmissionPolicy:決定在讀取遺漏 (在快取中找不到要求的資料時) 後,何時將資料存入 Rapid Cache 快取。選項包括"admit-on-first-miss"(在第一次讀取失敗時允許資料) 或"admit-on-second-miss"(僅在第二次讀取同一物件失敗時允許資料)。如果您變更這個值,現有的 Rapid Cache 執行個體就會更新為新政策。
選用:微調設定檔設定
您可以在設定檔中自訂特定設定,同時仍可享有基本設定的優點。使用下列選項調整設定檔,不必建立新的 StorageClass。
覆寫掛接選項和參數
如要修改特定行為,請在 PV 的 spec.mountOptions 欄位中新增掛接選項,或在 spec.csi.volumeAttributes 欄位中新增 CSI 參數。GKE 會在設定檔的預設值之上套用手動設定。
以下範例說明如何覆寫 read_ahead_kb 掛接選項,並在 Serving 設定檔中停用 gcsfuseMetadataPrefetchOnMount 參數。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-override
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: gcsfusecsi-serving
mountOptions:
- read_ahead_kb=2048 # Overrides the profile's default.
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: my-gcs-bucket
volumeAttributes:
gcsfuseMetadataPrefetchOnMount: "false" # Overrides the profile's default.
常見用途包括:
- 如要為訓練設定檔啟用 Rapid Cache,請直接將
anywhereCacheZones參數新增至 PV 規格。 - 調整特定 Cloud Storage FUSE 行為,例如增加
read_ahead_kb大小,以滿足特定工作負載的獨特需求。
手動設定快取大小時,請考量下列事項:
- 指定手動快取大小只會覆寫該特定元件的自動動態大小。在剩餘的資源預算內,所有其他元件會繼續盡力動態調整大小。
- 設定
metadata-cache或file-cache選項 (例如metadata-cache:stat-cache-max-size-mb),不會停用其他快取類型的自動計算功能。 - 如果手動指定
file-cache:max-size-mb,也必須設定自訂讀取快取磁碟區。這有助於確保為自訂快取大小明確定義容量充足的儲存媒體。
使用註解略過值區掃描
您可以使用註解提供自己的物件計數和大小指標,略過自動掃描儲存空間的程序。CSI 驅動程式會使用這些值計算最佳效能設定,而不掃描 bucket。
以下範例說明如何將 gke-gcsfuse/bucket-scan-status:
"override" 註解新增至 PV,以及新增特定指標註解。
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-override
annotations:
gke-gcsfuse/bucket-scan-status: "override"
gke-gcsfuse/bucket-scan-num-objects: 19238
gke-gcsfuse/bucket-scan-total-size-bytes: 94837465
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: STORAGECLASS_NAME
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: BUCKET_NAME
常見用途包括:
- 如果您已瞭解 bucket 的大小和物件數量,特別是資料很少變更的推論工作負載,可以在啟動時略過掃描時間。
- 如果 Cloud Storage API 暫時無法使用,在修正基礎服務期間,這些註解可協助您維持效能。
疑難排解
請參閱下列資訊,監控 Cloud Storage FUSE 設定檔的狀態,並解決在 bucket 掃描和快取同步期間遇到的常見問題。
設定參數無效 (InvalidArgument)
資訊清單中有一或多個無效參數,導致背景最佳化工作無法啟動。
症狀
PV 會顯示 ScanOperationStartError 或 AnywhereCacheSyncError 事件,並附上含有 rpc error: code = InvalidArgument 的訊息。例如:
Bucket scan timeout configuration error: rpc error: code = InvalidArgument desc = invalid duration format for "INVALID_DURATION".Anywhere Cache sync failed for PV "PV_NAME": rpc error: code = InvalidArgument desc = failed to get anywhere cache "CACHE_NAME" ... invalid anywhere cache "CACHE_NAME" provided.
原因
PV 的 spec.csi.volumeAttributes 欄位中有一或多個參數格式錯誤,或含有系統無法剖析的值。
解決方法
修正 PV 資訊清單中的無效參數值,然後重新部署 PV。
請確認所有時間長度值 (例如 bucketScanTimeout) 都使用正確格式 (例如 2m 或 10m),且所有設定檔專屬設定都符合有效支援的值。
掃描 Cloud Storage bucket 時權限遭拒
GKE 無法存取指定的 Cloud Storage bucket,因此無法執行必要的效能分析。
症狀
PV 會顯示 ScanOperationStartError 事件,並附上 Error 403: Forbidden 訊息,指出呼叫者沒有 storage.buckets.get 存取權。
原因
GKE 服務代理缺少必要的 IAM 權限,或是 bucket 名稱不正確。
解決方法
- 確認 PV 的
volumeHandle欄位中的 bucket 名稱正確無誤,且 bucket 存在。 - 請確保已將 GKE 服務代理程式權限授予特定 bucket 的身分。
service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com詳情請參閱「設定 IAM 權限」。
Rapid Cache 位置不符
要求的可用區與 bucket 的位置不相容,因此無法建立 Rapid Cache 快取。
症狀
PV 會顯示 AnywhereCacheSyncWarning 事件,並附上以下訊息:Invalid
zone. Rapid Cache isn't available in the requested zone.
原因
Rapid Cache 快取必須在 bucket 區域位置內的可用區中建立。如果 GKE 叢集和 Cloud Storage bucket 位於不同區域,通常就會發生這個錯誤。
解決方法
將 Cloud Storage 值區移至與 GKE 叢集位置相符的區域,然後重新部署 PV。
值區掃描作業逾時
分析 Cloud Storage bucket 所需的時間超過設定的逾時時間,因此只產生部分最佳化結果。
症狀
PV 會顯示 ScanOperationTimedOut 事件。PV 會註解物件數量和總大小的部分結果。
原因
值區包含極大量的物件 (通常是數百萬個),無法在預設的兩分鐘逾時時間內完整列出。
解決方法
- 在 PV 的
spec.csi.volumeAttributes區段中,為bucketScanTimeout欄位設定較大的值,例如10m。 - 如果 bucket 大小是靜態的,請手動提供物件數量和大小,略過掃描。
中繼資料快取受記憶體預算限制
驅動程式將中繼資料快取大小限制在節點的可用資源內,這可能會降低效能。
症狀
記錄檔包含一則訊息,指出必要的中繼資料狀態快取大小已達到可用的 Cloud Storage FUSE 記憶體預算上限。
原因
bucket 中的物件數量中繼資料快取超過分配給 Cloud Storage FUSE Sidecar 或節點可用記憶體的記憶體。
解決方法
- 使用
only-dir掛接選項,將磁碟區範圍縮小至物件較少的子目錄。 - 提高 Cloud Storage FUSE Sidecar 容器的記憶體上限。
- 如果附屬應用程式的限制已足夠,請使用可分配記憶體較多的節點類型。
由於資源限制,檔案快取已停用
GKE 找不到足夠空間的合適儲存媒體,因此停用了本機檔案快取。
症狀
記錄會顯示警告:No suitable file cache medium found or requirement
exceeded limits for all options。
原因
計算出的檔案快取大小超過可用節點的 RAM 和可用本機 SSD 儲存空間。
解決方法
- 使用
only-dir掛接選項,將磁碟區範圍縮小至物件較少的子目錄。 - 增加 Cloud Storage FUSE Sidecar 的資源限制。
- 使用記憶體較多的節點類型,或在節點集區中啟用本機 SSD。
使用 PersistentVolume 事件監控狀態
GKE 會將重要設定事件和錯誤記錄到 PV。如要檢查這些事件,請執行下列指令:
kubectl describe pv PV_NAME
bucket 掃描成功後,您會看到 ScanOperationSucceeded 事件。如果您使用 gcsfusecsi-serving 設定檔,快取層運作後會看到 AnywhereCacheSyncSucceeded 事件。
使用 CSI 驅動程式記錄檔監控狀態
Cloud Storage FUSE CSI 驅動程式會記錄詳細的設定決策和效能洞察。如要在 Cloud Logging 中查看這些記錄,請使用下列查詢:
resource.type="k8s_container"
resource.labels.pod_name=~"gcsfusecsi-node-.*"
查看建議洞察
如要瞭解自動調整邏輯使用的特定輸入信號和做出的決策,請搜尋 CSI 驅動程式記錄中的 GCSFuseCSIRecommendation 字串。產生的 JSON 酬載會提供詳細指標,包括:
inputSignals:值區物件計數、資料總大小,以及可用的節點資源 (RAM 和暫時儲存空間)。decision:最終計算的快取大小和所選儲存媒體 (ram或lssd)。
{
"insertId": "INSERT_ID",
"jsonPayload": {
"decision": {
"fileCacheBytes": 300000000,
"fileCacheMedium": "lssd",
"metadataStatCacheBytes": 4500,
},
"target": {
"nodeName": "NODE_NAME",
"pvName": "PV_NAME",
"podName": "POD_NAME"
},
"message": "GCSFuseCSIRecommendation: Recommended cache configs for PV PV_NAME and Pod POD_NAME: FileCache: 287MiB (lssd) | MetadataStatCache: 1MiB | Expand for full details",
"inputSignals": {
"requiredFileCacheBytes": 300000000,
"fuseBudgetMemoryBytes": 187904819,
"sidecarLimitMemoryBytes": 268435456,
"nodeType": "gpu",
"bucketTotalObjects": 3,
"nodeAllocatableMemoryBytes": 191291998208,
"bucketTotalDataSizeBytes": 300000000,
"bucketLocationType": "multi-region",
"bucketHNSEnabled": true,
"sidecarLimitEphemeralStorageBytes": 0,
"requiredMetadataStatCacheBytes": 4500,
"nodeAllocatableEphemeralStorageBytes": 1317908854882,
"nodeHasEphemeralStorageLSSD": true,
"fuseBudgetEphemeralStorageBytes": 1120222526649
}
},
...
}
清除所用資源
如要避免系統向您的 Cloud de Confiance by S3NS 帳戶收取本指南所建立資源的費用,請按照下列步驟操作:
刪除部署作業:
kubectl delete deployment my-deployment -n NAMESPACE將
NAMESPACE替換為您建立 Deployment 的 Kubernetes 命名空間。刪除 PersistentVolumeClaim:
kubectl delete pvc my-pvc -n NAMESPACE將
NAMESPACE替換為您建立 PVC 的 Kubernetes 命名空間。刪除 PersistentVolume:
kubectl delete pv my-pv如果您使用
gcsfusecsi-serving設定檔或手動啟用快速快取,請按照停用快取的說明操作,以免產生快取執行個體費用。