为 GKE 设置 Cloud Storage FUSE CSI 驱动程序


本页介绍了如何设置和准备使用适用于 GKE 的 Cloud Storage FUSE CSI 驱动程序

如需使用 Cloud Storage FUSE CSI 驱动程序,请执行以下步骤:

创建 Cloud Storage 存储分区

创建 Cloud Storage 存储分区(如果您尚未创建)。您将在 GKE 集群中将这些存储分区作为卷挂载。如需提升性能,请将位置类型设置为区域,然后选择与您的 GKE 集群匹配的区域。

启用 Cloud Storage FUSE CSI 驱动程序

请根据您使用的是 GKE Autopilot 集群还是 Standard 集群,按照以下步骤操作。我们建议您使用 Autopilot 集群获得全托管式 Kubernetes 体验。如需选择最适合您的工作负载的模式,请参阅选择 GKE 操作模式

Autopilot

默认情况下,系统会为 Autopilot 集群启用 Cloud Storage FUSE CSI 驱动程序。您可以跳至配置对 Cloud Storage 存储分区的访问权限

标准

如果您的标准集群已启用 Cloud Storage FUSE CSI 驱动程序,请跳至配置对 Cloud Storage 存储分区的访问权限

如需创建启用了 Cloud Storage FUSE CSI 驱动程序的标准集群,您可以使用 gcloud container clusters create` 命令:

gcloud container clusters create CLUSTER_NAME \
    --addons GcsFuseCsiDriver \
    --cluster-version=VERSION \
    --location=LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog

替换以下内容:

  • CLUSTER_NAME:您的集群的名称。
  • VERSION:GKE 版本号。 您必须选择 1.24 或更高版本。
  • LOCATION:集群的 Compute Engine 区域或可用区
  • PROJECT_ID:您的项目 ID。

如需在现有 Standard 集群上启用该驱动程序,请使用 [gcloud container clusters update](/sdk/gcloud/reference/container/clusters/update)` 命令:

gcloud container clusters update CLUSTER_NAME \
    --update-addons GcsFuseCsiDriver=ENABLED \
    --location=LOCATION

如需验证集群上是否已启用 Cloud Storage FUSE CSI 驱动程序,请运行以下命令:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"

配置对 Cloud Storage 存储分区的访问权限

Cloud Storage FUSE CSI 驱动程序使用 适用于 GKE 的工作负载身份联合,以便您精细设置 GKE Pod 如何访问存储在 Cloud Storage 中的数据。

如需使 GKE 集群能够访问您的 Cloud Storage 存储桶,请使用适用于 GKE 的工作负载身份联合,针对您要在 Pod 规范中挂载的 Cloud Storage 存储桶进行身份验证:

  1. 如果您尚未启用适用于 GKE 的工作负载身份联合,请按照这些步骤进行启用。
  2. 获取集群的凭据:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    替换以下内容:

  3. 创建一个用于 Kubernetes ServiceAccount 的命名空间。您还可以使用 default 命名空间或任何现有命名空间。

    kubectl create namespace NAMESPACE
    

    NAMESPACE 替换为 Kubernetes ServiceAccount 的 Kubernetes 命名空间的名称。

  4. 为您的应用创建 Kubernetes 服务账号。您还可以在任何命名空间中使用任何现有的 Kubernetes ServiceAccount,包括 default Kubernetes ServiceAccount。

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    KSA_NAME 替换为您的 Kubernetes ServiceAccount 的名称。

  5. 向 Kubernetes ServiceAccount 授予一个 Cloud Storage 的 IAM 角色。请按照以下步骤操作,具体取决于您是向 Kubernetes ServiceAccount 授予对特定 Cloud Storage 存储桶的访问权限,还是向其授予对项目中所有存储分区的全局访问权限。

    特定存储桶访问权限

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    替换以下内容:

    • BUCKET_NAME:您的 Cloud Storage 存储桶名称。
    • PROJECT_NUMBER:GKE 集群的数字项目编号。如需查找项目编号,请参阅标识项目
    • PROJECT_ID:GKE 集群的项目 ID。
    • NAMESPACE:Kubernetes ServiceAccount 的 Kubernetes 命名空间的名称。
    • KSA_NAME:新 Kubernetes ServiceAccount 的名称。
    • ROLE_NAME:要分配给 Kubernetes ServiceAccount 的 IAM 角色。
      • 对于只读工作负载,请使用 Storage Object Viewer 角色 (roles/storage.objectViewer)。
      • 对于读写工作负载,请使用 Storage Object User 角色 (roles/storage.objectUser)。

    全局存储桶访问权限

    gcloud projects add-iam-policy-binding GCS_PROJECT \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    替换以下内容:

    • GCS_PROJECT:Cloud Storage 存储桶的项目 ID。
    • PROJECT_NUMBER:GKE 集群的数字项目编号。如需查找项目编号,请参阅标识项目
    • PROJECT_ID:GKE 集群的项目 ID。
    • NAMESPACE:Kubernetes ServiceAccount 的 Kubernetes 命名空间的名称。
    • KSA_NAME:新 Kubernetes ServiceAccount 的名称。
    • ROLE_NAME:要分配给 Kubernetes ServiceAccount 的 IAM 角色。
      • 对于只读工作负载,请使用 Storage Object Viewer 角色 (roles/storage.objectViewer)。
      • 对于读写工作负载,请使用 Storage Object User 角色 (roles/storage.objectUser)。

后续步骤