为 GKE 配置 Cloud Storage FUSE CSI 驱动程序边车容器


本指南介绍了如何为 Cloud Storage FUSE CSI 驱动程序边车容器配置资源,包括设置专用映像、自定义写入缓冲区和自定义读取缓存卷。通常,您无需更改这些设置。

Cloud Storage FUSE CSI 驱动程序使用可自定义的边车容器来高效地装载和访问 Cloud Storage 存储桶。通过配置边车,您可以微调应用性能和资源使用情况,从而加快数据访问速度、缩短处理时间,并可能降低应用的总体资源消耗量。

本指南适用于希望优化与 GKE 交互的应用的性能、安全性和效率的开发者、管理员和架构师。

在阅读本页面内容之前,请确保您熟悉 Cloud Storage、Kubernetes 和容器化概念的基础知识。

边车容器的工作原理

Cloud Storage FUSE CSI 驱动程序使用边车容器来装载 Cloud Storage 存储桶,以便 Kubernetes 应用可以将其作为本地文件系统进行访问。此边车容器名为 gke-gcsfuse-sidecar,与同一 Pod 中的工作负载容器一起运行。当驱动程序检测到 Pod 规范中的 gke-gcsfuse/volumes: "true" 注解时,会自动注入边车容器。这种边车容器方法有助于确保安全并有效管理资源。

边车容器可处理装载 Cloud Storage 存储桶的复杂性,并为应用提供文件系统访问权限,而无需您直接管理 Cloud Storage FUSE 运行时。您可以使用 gke-gcsfuse/cpu-limitgke-gcsfuse/memory-limit 等注解为边车容器配置资源限制。边车容器模型还可确保 Cloud Storage FUSE 实例与工作负载生命周期相关联,防止其不必要地消耗资源。这意味着,在工作负载容器退出时,边车容器会自动终止,尤其是在 Job 工作负载或 RestartPolicyNever 的 Pod 中。

Istio 兼容性

Cloud Storage FUSE CSI 驱动程序的边车容器和 Istio 可以在 Pod 中共存和并发运行。Istio 的边车代理可管理网络流量,而 CSI 边车可优化存储空间访问,从而让您的应用能够高效地与 Google Cloud Storage 进行交互,并提升性能和可观测性。

配置自定义写入缓冲区

Cloud Storage FUSE 会在本地目录中暂存写入的文件,然后在 closefsync 操作中将其上传到 Cloud Storage。

本部分介绍如何为 Cloud Storage FUSE 写入缓冲配置自定义缓冲区卷。如果您需要替换默认 emptyDir 卷以供 Cloud Storage FUSE 在写入操作中暂存文件,则此场景可能适用。如果您需要在 Autopilot 集群上写入大于 10 GiB 的文件,此操作会非常有用。

您可以指定 Cloud Storage FUSE CSI 驱动程序支持的任何类型的存储空间(例如本地 SSD、基于永久性磁盘的存储空间和 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 读取缓存配置自定义缓存卷。

如果您需要替换默认 emptyDir 卷以供 Cloud Storage FUSE 在读取操作中缓存文件,则此场景可能适用。您可以指定 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_GROUPfsGroup ID。
  • CACHE_VOLUME_PVC:预定义的 PersistentVolumeClaim 名称。

为边车容器配置私有映像

本部分介绍在您将边车容器映像托管在私有容器仓库中的情况下如何使用边车容器映像。如果您出于安全目的需要使用专用节点,则此场景可能适用。

如需配置和使用私有边车容器映像,请按照以下步骤操作:

  1. 参阅 GKE 兼容性表,查找兼容的公共边车容器映像。
  2. 将该映像拉取到本地环境,并推送到您的私有容器注册表。
  3. 在清单中,指定一个名为 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 集群):

  • 250m CPU
  • 256 MiB 内存
  • 5 GiB 临时存储

如需覆盖这些值,您可以视需要指定注解 gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request],如以下示例所示:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-gcsfuse/volumes: "true"
    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

您可以使用值 "0" 取消设置 Standard 集群上的任何资源限制或请求。例如,注解 gke-gcsfuse/memory-limit: "0" 会使用默认内存请求,将边车容器内存限制留空。如果您无法确定 Cloud Storage FUSE 为支持您的工作负载而需要的资源量,并且希望允许 Cloud Storage FUSE 使用节点上的所有可用资源,这将非常有用。根据工作负载指标计算 Cloud Storage FUSE 的资源要求后,您可以设置适当的限制。

后续步骤