本指南說明如何為 Cloud Storage FUSE CSI 驅動程式 Sidecar 容器設定資源,包括設定私人映像檔、自訂寫入緩衝區和自訂讀取快取磁碟區。一般來說,您不需要變更這些設定。
Cloud Storage FUSE CSI 驅動程式會使用可自訂的 Sidecar 容器,有效率地掛接及存取 Cloud Storage bucket。設定 Sidecar 後,您可以微調應用程式效能和資源用量,進而加快資料存取速度、縮短處理時間,並可能降低應用程式的整體資源耗用量。
本指南適用於開發人員、管理員和架構師,協助他們提升與 GKE 互動的應用程式效能、安全性和效率。
閱讀本頁內容前,請務必先熟悉 Cloud Storage、Kubernetes 和容器化概念的基本知識。
Sidecar 容器的運作方式
Cloud Storage FUSE CSI 驅動程式會使用 Sidecar 容器掛接 Cloud Storage bucket,讓 Kubernetes 應用程式可將這些 bucket 當做本機檔案系統存取。這個名為 gke-gcsfuse-sidecar
的補充容器會與同一個 Pod 中的工作負載容器並行執行。當驅動程式在 Pod 規格中偵測到 gke-gcsfuse/volumes: "true"
註解時,就會自動插入 Sidecar 容器。這種 Sidecar 容器做法有助於確保安全性,並有效管理資源。
側車容器會處理掛接 Cloud Storage bucket 的複雜作業,並為應用程式提供檔案系統存取權,您不必直接管理 Cloud Storage FUSE 執行階段。您可以使用 gke-gcsfuse/cpu-limit
和 gke-gcsfuse/memory-limit
等註解,為 Sidecar 容器設定資源限制。側車容器模型也能確保 Cloud Storage FUSE 執行個體與工作負載生命週期繫結,避免不必要地耗用資源。也就是說,當工作負載容器結束時,側車容器會自動終止,尤其是在工作負載或具有 RestartPolicy
Never
的 Pod 中。
Istio 相容性
Cloud Storage FUSE CSI 驅動程式的 Sidecar 容器和 Istio 可以共存,並在 Pod 中同時執行。Istio 的 Sidecar Proxy 會管理網路流量,而 CSI Sidecar 則會最佳化儲存空間存取權,讓應用程式能有效率地與 Google Cloud Storage 互動,同時提升效能和可觀測性。
設定自訂寫入緩衝區
Cloud Storage FUSE 會在本機目錄中暫存寫入作業,然後在 close
或 fsync
作業中上傳至 Cloud Storage。
本節說明如何為 Cloud Storage FUSE 寫入緩衝設定自訂緩衝區容量。如果您需要取代 Cloud Storage FUSE 的預設 emptyDir
磁碟區,以便在寫入作業中暫存檔案,可能就適用這個情境。如果您需要在 Autopilot 叢集上寫入大於 10 GiB 的檔案,這項功能就非常實用。
您可以指定 Cloud Storage FUSE CSI 驅動程式支援的任何類型儲存空間,用於檔案快取,例如本機 SSD、以 Persistent Disk 為基礎的儲存空間,以及 RAM 磁碟 (記憶體)。GKE 會使用指定的磁碟區做為檔案寫入緩衝區。如要進一步瞭解這些選項,請參閱「選取備份檔案快取的儲存空間」。
如要使用自訂緩衝區音量,必須指定非零的 fsGroup
。
以下範例說明如何使用預先定義的 PersistentVolumeClaim 做為緩衝區磁碟區:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-buffer
persistentVolumeClaim:
claimName: BUFFER_VOLUME_PVC
更改下列內容:
- FS_GROUP:fsGroup ID。
- BUFFER_VOLUME_PVC:預先定義的 PVC 名稱。
設定自訂讀取快取磁碟區
本節說明如何為 Cloud Storage FUSE 讀取快取設定自訂快取磁碟區。
如果您需要取代 Cloud Storage FUSE 的預設 emptyDir
磁碟區,以便在讀取作業中快取檔案,可能適用這個情境。您可以指定 GKE 支援的任何儲存空間類型,例如 PersistentVolumeClaim,GKE 會使用指定的磁碟區進行檔案快取。如果您需要在 Autopilot 叢集上快取大於 10 GiB 的檔案,這項功能就非常實用。如要使用自訂快取磁碟區,必須指定非零的 fsGroup
。
以下範例說明如何使用預先定義的 PersistentVolumeClaim 做為快取磁碟區:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-cache
persistentVolumeClaim:
claimName: CACHE_VOLUME_PVC
更改下列內容:
FS_GROUP
:fsGroup
ID。CACHE_VOLUME_PVC
:預先定義的 PersistentVolumeClaim 名稱。
設定 Sidecar 容器的私有映像檔
本節說明如何在私人容器登錄檔中託管補充資訊容器映像檔。如果您需要使用私有節點來確保安全,可能就適用這種情況。
如要設定及使用私有輔助容器映像檔,請按照下列步驟操作:
- 請參閱這份 GKE 相容性表格,找出相容的公開 Sidecar 容器映像檔。
- 將其提取至本機環境,然後推送至私人容器登錄檔。
在資訊清單中,指定名為
gke-gcsfuse-sidecar
的容器,且只包含映像檔欄位。GKE 會使用指定的補充資訊容器映像檔,準備注入補充資訊容器。範例如下:
apiVersion: v1 kind: Pod metadata: annotations: gke-gcsfuse/volumes: "true" spec: containers: - name: gke-gcsfuse-sidecar image: PRIVATE_REGISTRY/gcs-fuse-csi-driver-sidecar-mounter:PRIVATE_IMAGE_TAG - name: main # your main workload container.
更改下列內容:
PRIVATE_REGISTRY
:您的私人容器登錄檔。PRIVATE_IMAGE_TAG
:您的私有補充容器映像檔標記。
設定邊車容器資源
根據預設,系統會為 Standard 和 Autopilot 叢集的 gke-gcsfuse-sidecar
容器設定下列資源要求和限制:
要求:
- 250m CPU
- 256 MiB 記憶體
- 5 GiB 臨時儲存空間
限制 (GKE 1.29.1-gke.1670000
以上版本):
- 無限 CPU
- 無限記憶體
- 無限暫存空間
限制 (GKE 版本 1.29.1-gke.1670000
之前):
- 250m CPU
- 256 MiB 記憶體
- 5 GiB 臨時儲存空間
根據預設,系統會為 Standard 和 Autopilot 叢集的 gke-gcsfuse-metadata-prefetch
容器設定下列資源要求和限制:
要求:
- 10 分鐘 CPU
- 10 MiB 記憶體
- 10 MiB 臨時儲存空間
限制:
- 50m CPU
- 250 MiB 記憶體
- 無限暫存空間
在 Standard 和 Autopilot 叢集中,您可以覆寫預設值。GKE 處理容器資源的方式取決於叢集作業模式:
- 標準叢集:如果設定了要求或限制,但未設定另一項,系統會將 Pod 的資源限制和要求設為相同。如果同時設定要求和限制,Pod 會使用您指定的確切資源要求和限制。如未設定任何值,系統會直接套用預設資源 (如上所述)。
- Autopilot 叢集:如果設定了要求或限制,但未設定另一項,系統會將 Pod 的資源限制和要求設為相同。請參閱「在 Autopilot 中設定資源限制」,瞭解資源覆寫和預設資源值設定對 Pod 行為的影響。
如要覆寫 gke-gcsfuse-sidecar
容器的預設值,您可以選擇指定 gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request]
註解,如下列範例所示:
如要覆寫 gke-gcsfuse-metadata-prefetch
容器的預設值 (適用於 GKE 1.32.3-gke.1717000
以上版本),您可以選擇指定註解 gke-gcsfuse/[metadata-prefetch-cpu-limit|metadata-prefetch-memory-limit|metadata-prefetch-ephemeral-storage-limit|metadata-prefetch-cpu-request|metadata-prefetch-memory-request|metadata-prefetch-ephemeral-storage-request]
,如下列範例所示:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
# gke-gcsfuse-sidecar overrides
gke-gcsfuse/cpu-limit: "10"
gke-gcsfuse/memory-limit: 10Gi
gke-gcsfuse/ephemeral-storage-limit: 1Ti
gke-gcsfuse/cpu-request: 500m
gke-gcsfuse/memory-request: 1Gi
gke-gcsfuse/ephemeral-storage-request: 50Gi
# gke-gcsfuse-metadata-prefetch overrides
gke-gcsfuse/metadata-prefetch-cpu-limit: "10"
gke-gcsfuse/metadata-prefetch-memory-limit: 10Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-limit: 1Ti
gke-gcsfuse/metadata-prefetch-cpu-request: 500m
gke-gcsfuse/metadata-prefetch-memory-request: 1Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-request: 50Gi
您可以使用值 "0"
取消設定任何資源限制或要求,但請注意,gke-gcsfuse-sidecar
容器已取消設定所有限制 (cpu-limit
、memory-limit
和 ephemeral-storage-limit
),且 gke-gcsfuse-metadata-prefetch
容器已取消設定 ephemeral-storage-limit
,因此在 GKE 1.32.3-gke.1717000
以上版本的叢集上將這些限制設為 "0"
,不會有任何作用。
舉例來說,設定 gke-gcsfuse/metadata-prefetch-memory-limit: "0"
表示您要取消設定 gke-gcsfuse-metadata-prefetch
容器記憶體限制。如果您無法決定中繼資料預先擷取功能需要多少資源來處理工作負載,並希望中繼資料預先擷取功能耗用節點上的所有可用資源,這項功能就非常實用。
設定記錄詳細程度
根據預設,gke-gcsfuse-sidecar
容器會在 info
和 error
層級產生記錄。
不過,如要進行偵錯或更詳細的分析,可能需要調整記錄詳細程度。本節說明如何提高或降低記錄層級。
您可以透過掛接選項設定記錄詳細程度,也可以使用 CSI 驅動程式的功能,將磁碟區屬性值轉換為必要的 gcsfuse 設定。
在目標 Pod 資訊清單中,加入下列設定:
volumeAttributes:
bucketName: BUCKET_NAME
mountOptions: "implicit-dirs"
gcsfuseLoggingSeverity: LOGGING_SEVERITY
如要使用掛接選項,請在目標 Pod 資訊清單中加入下列設定:
mountOptions: "logging:severity:LOGGING_SEVERITY"
更改下列內容:
BUCKET_NAME
:您的 Cloud Storage bucket 名稱。LOGGING_SEVERITY
:根據您的需求,使用下列其中一個值:trace
debug
info
warning
error
部署 Pod 後,CSI 驅動程式會使用新設定的記錄層級啟動 gcsfuse。
您可以使用下列篩選器,確認是否已套用記錄嚴重性:
resource.labels.container_name="gke-gcsfuse-sidecar"
resource.type="k8s_container"
resource.labels.pod_name="POD_NAME"
"severity:"