使用 Filestore Multishares for GKE 优化存储空间。

本指南介绍如何将 Filestore Multishares for Google Kubernetes Engine 与 GKE Filestore CSI 驱动程序搭配使用。

须知事项

  1. 在开始之前,请完成使用 Filestore 所需的设置步骤

  2. 启用 GKE Filestore CSI 驱动程序 1.23 版或更高版本:

    • 驱动程序版本 1.23 至 1.26 支持每个实例最多 10 次共享。

    • 驱动程序版本 1.27 或更高版本支持每个实例最多 80 次共享。

    如需了解最新的 GKE Filestore CSI 驱动程序要求, 请参阅使用 Filestore CSI 驱动程序访问 Filestore 实例

将 Filestore Multishares 与多个应用搭配使用

本部分介绍如何部署两个应用,即一个 Deployment 和一个 Statefulset,每个应用都使用 Filestore Multishares StorageClass。您还将了解 GKE 如何封装(一个高效地将应用打包到 GKE 节点的过程)同一底层 Filestore Enterprise 实例中的所有卷。

  1. 使用 GKE 提供的 StorageClass enterprise-multishare-rwx 创建最多支持 10 个共享的实例。

    • 如果要创建最多支持 80 个共享的实例,您需要创建自定义 StorageClass。在本指南中,您将使用具有每个实例 10 个共享限制的 StorageClass。

    启用 GKE Filestore CSI 驱动程序后,用户可以使用以下配置访问 GKE 提供的多共享 StorageClass enterprise-multishare-rwx。通过引用此 StorageClass,GKE Filestore CSI 驱动程序可使用动态卷预配自动为新的永久性卷声明 (PVC) 创建永久性卷 (PV) 以满足以下 GKE 工作负载需求:

    kubectl describe sc enterprise-multishare-rwx
    Name:                  enterprise-multishare-rwx
    IsDefaultClass:        No
    Annotations:           components.gke.io/component-name=filestorecsi,components.gke.io/component-version=0.7.2,components.gke.io/layer=addon
    Provisioner:           filestore.csi.storage.gke.io
    Parameters:            instance-storageclass-label=enterprise-multishare-rwx,multishare=true,tier=enterprise
    AllowVolumeExpansion:  True
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                <none>
    

创建自定义 StorageClass

如果您想要利用每个 Filestore 实例的最新容量限制(最多 80 个共享),请根据以下模板创建自定义 StorageClass:

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: csi-filestore-multishare-128
  provisioner: filestore.csi.storage.gke.io
  parameters:
    tier: enterprise
    multishare: "true"
    max-volume-size: "128Gi"
    network: default
  allowVolumeExpansion: true

重命名 StorageClass 时,请考虑以下要求:

  • StorageClass 名称必须是有效的 DNS 子域名

  • 多共享 StorageClass 名称也用作实例标签,应遵循标签命名准则

  • 如果您的应用需要立即预配卷,请包含 Immediate 卷绑定模式:

    volumeBindingMode: Immediate

    例如,如果您不希望卷预配,请使用此规范 依赖于在 GKE 集群中创建 Pod

  • 从驱动程序 1.27 版开始,如果要为每个实例分配超过 10 个共享,请包含 max-volume-size 参数并为其分配第一列中接受的值之一:

    卷大小上限(共享大小) 每个实例的共享数上限
    128 GiB 80
    256 GiB 40
    512 GiB 20
    1024 GiB 10

    例如,添加键值对 max-volume-size: "128Gi" 可以确保 StorageClass 最多可映射 80 个共享,每个共享范围从 10 GiB 到 10 GiB。 到单个 10 TiB 企业级层级 实例。

    • 此功能向后兼容 GKE Filestore CSI 驱动程序 1.23 至 1.26 版创建的 Filestore 实例。

    • 现有实例可以创建新的 PVC 或共享,扩展的最小共享大小为 10 GiB。

    • GKE Filestore CSI 驱动程序版本 1.27 或更高版本, 识别旧版企业实例,并为其分配默认上限 共享大小为 1024 GiB (1 TiB)。因此,旧版实例 每个实例的共享数量上限为 10 份。

    如需了解详情,请参阅 Filestore Multishares for GKE

  1. 使用单个 PVC 创建具有多个 pod 副本的 Deployment。

    创建一个类似如下所示的 YAML 配置文件:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: enterprise-multishare-rwx
      resources:
        requests:
          storage: 100Gi
    
    EOF
    
  2. 检查 Pod 副本。

    a. 从命令行中,运行以下命令以检查 PVC 状态:

    kubectl get pvc
    

    您应该会看到类似于以下响应的内容:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  35m
    

    b. 从命令行中,运行以下命令以检查 pod 状态:

    kubectl get pod
    

    您应该会看到类似于以下响应的内容:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          35m
    
  3. 扩缩副本。

    a. 从命令行中,运行以下命令以修改 Deployment:

    kubectl edit deployment web-server-multishare
    

    b. 文件将在命令行中打开。找到 spec.replicas 字段,并将值更新为 10

    c. 从命令行中,运行以下命令以查看应用的更改:

    kubectl get pod
    

    您应该会看到类似于以下响应的内容:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-5ctkf   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-8dwmw   1/1     Running   0          2s
    web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-lndcq   1/1     Running   0          2s
    web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-vtd6p   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-xm49s   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          36m
    

    请注意,有 10 个 Pod 正在运行。

    d. 从命令行中,运行以下命令:

    kubectl get deployment
    

    您应该会看到类似于以下响应的内容:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    web-server-multishare   10/10   10           10          36m
    

    e。 从命令行中,运行以下命令以检查 PVC 绑定状态:

    kubectl get pvc
    

    您应该会看到类似于以下响应的内容:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  37m
    

    f. 从命令行中,运行以下命令以修改 Deployment:

    kubectl edit deployment web-server-multishare
    

    g.文件将在命令行中打开。找到 spec.replicas 字段,并将值更新为 2

    h.从命令行中,运行以下命令以查看应用的更改:

    kubectl get pod
    

    您应该会看到类似于以下响应的内容:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          38m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          38m
    
  4. 部署 Statefulset。

    部署共享底层 Filestore 实例的第二个应用。

    为此,请预配 200 GiB 的空间,并验证该空间使用与第一个应用相同的底层 Filestore 实例。

    然后,使用总共 900 GiB 将应用扩容到九个副本(9 副本各使用 100 GiB),并验证 GKE 是否使用共享实例的相同 Filestore 实例。

    创建一个类似如下所示的 YAML 配置文件:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.k8s.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: test-pvc-multishare
              mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: test-pvc-multishare
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: enterprise-multishare-rwx
          resources:
            requests:
              storage: 100Gi
    
    EOF
    
    
  5. 检查 Statefulset 副本和卷。

    从命令行中,运行以下命令:

    kubectl get pod
    

    您应该会看到类似于以下响应的内容:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-0                                    1/1     Running   0          4m48s
    web-1                                    1/1     Running   0          3m32s
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          57m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          57m
    

    请注意,前两个 pod 与 Statefulset 相关联。最后两个 pod 与 Deployment 相关联。

    从命令行中,运行以下命令:

    kubectl get statefulset
    

    您应该会看到类似于以下响应的内容:

    NAME   READY   AGE
    web    2/2     2m8s
    

    从命令行中,运行以下命令:

    kubectl get pvc
    

    您应该会看到类似于以下响应的内容:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   54m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   114s
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   38s
    

    PVC test-pvc-fs 与 Deployment web-server-multishare 相关联。

    PVC test-pvc-multishare-web-0test-pvc-multishare-web-1 与 Statefulset 相关联。

  6. 扩缩 Statefulset 副本。

    将副本数量增加到九个。随着数量增加,系统会创建相应的 PVC。

    a. 从命令行中,运行以下命令:

    kubectl  edit statefulset web
    

    b. 文件将在命令行中打开。找到 spec.replicas 字段,并将值更新为 9

    c. 从命令行中,运行以下命令以查看应用的更改:

    kubectl get statefulset
    

    您应该会看到类似于以下响应的内容:

    NAME   READY   AGE
    web    9/9     13m
    

    d. 从命令行中,运行以下命令:

    kubectl get deployment
    

    您应该会看到类似于以下响应的内容:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    web-server-multishare   2/2     2            2           65m
    

    e。 从命令行中,运行以下命令:

    kubectl get pvc
    

    您应该会看到类似于以下响应的内容:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   65m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   13m
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   12m
    test-pvc-multishare-web-2   Bound    pvc-3fcbd132-939f-4364-807a-7c8ac6a3e64e   100Gi      RWX            enterprise-multishare-rwx   5m12s
    test-pvc-multishare-web-3   Bound    pvc-5894afa5-2502-4ee7-9d5c-b7378cb85479   100Gi      RWX            enterprise-multishare-rwx   4m57s
    test-pvc-multishare-web-4   Bound    pvc-ebbe452b-bc8f-4624-a830-a2094cce0d67   100Gi      RWX            enterprise-multishare-rwx   4m36s
    test-pvc-multishare-web-5   Bound    pvc-5a73a698-d174-44cb-a3a1-e767966c3417   100Gi      RWX            enterprise-multishare-rwx   4m20s
    test-pvc-multishare-web-6   Bound    pvc-102da6a9-2ca6-4f9e-9896-8fe14709db7a   100Gi      RWX            enterprise-multishare-rwx   3m55s
    test-pvc-multishare-web-7   Bound    pvc-160e81cd-c5bf-4ae6-966e-518e8249e02d   100Gi      RWX            enterprise-multishare-rwx   3m38s
    test-pvc-multishare-web-8   Bound    pvc-9b52d773-2e9a-40de-881c-dc06945ba3d7   100Gi      RWX            enterprise-multishare-rwx   118s
    
  7. 验证 Filestore 实例状态。

    您现在有一个具有两个副本 pod 的 Deployment、一个具有九个副本 pod 的 Statefulset,以及总共 10 个 PVC,每个 PVC 大小为 100 GiB。所有卷都打包到单个 Filestore Multishare 实例上。

    a. 从命令行中,运行以下 instances list 命令:

    gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGION
    

    其中:

    • YOUR_PROJECT_ID 是所使用的项目的名称。例如 my-project

    • REGION 是所使用的区域的名称。例如 us-central1

    您应该会看到类似于以下响应的内容:

    INSTANCE_NAME                            LOCATION     TIER        CAPACITY_GB  FILE_SHARE_NAME  IP_ADDRESS   STATE  CREATE_TIME
    fs-a767cef8-738e-4c8e-b70b-09cbb872d016  us-central1  ENTERPRISE  1024         N/A              10.192.53.2  READY  2022-06-21T21:15:30
    

    b. 从命令行中,运行以下 instances describe 命令:

    gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1024'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/REGION/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    
    

    其中:

    • YOUR_PROJECT_ID 是所使用的项目的名称。例如 my-project

    • REGION 是所使用的区域的名称。例如 us-central1

扩展 PVC 并验证 Filestore 实例

本部分介绍如何扩展现有 PVC 并验证 Filestore 实例的大小。

  1. 扩展 PVC。

    由 Filestore Multishare 实例中的共享提供支持的 PVC 可以增加到 max-volume-size 参数中指定的大小上限。如需对此进行验证,请在 Pod 使用 Statefulset 时扩展与 Statefulset 关联的其中一个卷。

    从命令行中,运行以下命令以检查副本 0 的当前 PVC 大小:

    kubectl get pvc test-pvc-multishare-web-0 -o json
    {
        "apiVersion": "v1",
        "kind": "PersistentVolumeClaim",
        "metadata": {
            "annotations": {
                "pv.kubernetes.io/bind-completed": "yes",
                "pv.kubernetes.io/bound-by-controller": "yes",
                "volume.beta.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io",
                "volume.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io"
            },
            "creationTimestamp": "2022-06-21T22:07:42Z",
            "finalizers": [
                "kubernetes.io/pvc-protection"
            ],
            "labels": {
                "app": "nginx"
            },
            "name": "test-pvc-multishare-web-0",
            "namespace": "default",
            "resourceVersion": "48395",
            "uid": "7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "spec": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "resources": {
                "requests": {
                    "storage": "100Gi"
                }
            },
            "storageClassName": "enterprise-multishare-rwx",
            "volumeMode": "Filesystem",
            "volumeName": "pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "status": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "capacity": {
                "storage": "100Gi"
            },
            "phase": "Bound"
        }
    }
    
    
  2. 从命令行中,运行以下命令以将大小增加到 500 GiB:

    kubectl edit pvc test-pvc-multishare-web-0
    
  3. 文件将在命令行中打开。找到 spec.resources.requests.storage 字段,并将值更新为 500Gi

  4. 从命令行中,运行以下命令以查看应用的更改:

    kubectl get pvc test-pvc-multishare-web-0
    

    您应该会看到类似于以下响应的内容:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   500Gi      RWX            enterprise-multishare-rwx   28m
    

    Filestore CSI 驱动程序接受请求,首先扩展底层 Filestore 实例,然后扩展为 PVC 提供支持的共享。

    具体来说,Filestore CSI 驱动程序会自动将实例扩展到 1536 Gi,以适应 500Gi 的新共享大小。

  5. 从命令行中,运行以下命令以 instances describe 命令来验证 Filestore 实例的容量:

    gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1536'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/us-central1/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    

    其中:

    • YOUR_PROJECT_ID 是所使用的项目的名称。例如 my-project

    • REGION 是所使用的区域的名称。例如 us-central1

在共享 VPC 上动态预配

适用于 GKE 的 Filestore CSI 驱动程序支持动态 预配 位于共享 VPC 下的服务项目中的卷。以下部分介绍如何使用 Filestore CSI 驱动程序在共享 VPC 网络下的服务项目中的 Filestore Multishare 实例上动态预配卷。

  1. 完成共享 VPC 网络和专用服务访问通道的设置步骤

  2. 创建 StorageClass 来动态预配 共享 VPC 上的 Filestore 多共享实例。

    运行以下命令以部署 StorageClass 资源:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-sharedvpc
    provisioner: filestore.csi.storage.gke.io
    parameters:
      network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
      connect-mode: PRIVATE_SERVICE_ACCESS
      tier: enterprise
      multishare: "true"
    allowVolumeExpansion: true
    
    EOF
    

    其中:

    • HOST_PROJECT_ID 是共享 VPC 网络的宿主项目的 ID 或名称。例如 my-host-project

    • SHARED_VPC_NAME共享 VPC 网络的名称。例如 my-shared-vpc

    如果要在预留的 IP 地址范围内部署资源,请将以下行添加到命令中使用的参数中:

    reserved-ip-range: RESERVED_NAME
    

    其中 RESERVED_NAME 是可以在其中预配 Filestore 实例的预留 IP 地址范围的名称。例如 filestore-reserved-ip-range。如果指定了预留的 IP 范围,则该范围必须是已命名的地址范围,而非直接 CIDR 值。

    如需了解详情,请参阅分配 IP 地址范围配置预留的 IP 地址范围。如需查看如何使用 Google Cloud 控制台创建预留名称的示例,请参阅创建 IP 分配

  3. 创建 Deployment

    运行以下命令以创建 Deployment 资源:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs-sharedvpc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-sharedvpc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-sharedvpc
      resources:
        requests:
          storage: 100Gi
    
    EOF
    

启用了 CMEK 的 Filestore 实例

您可以创建托管在启用了 CMEK 的 Filestore Multishare 实例上的 GKE 卷。在本部分中,您将了解如何为 Filestore 实例设置客户管理的加密密钥 (CMEK)

您可以在 StorageClass 中提供客户管理的密钥详细信息。由 Filestore CSI 驱动程序动态引用的任何实例(它会引用此 StorageClass)都将启用 CMEK。

  1. 创建启用 CMEK 的 StorageClass。

    a. 运行以下命令:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-cmek
    provisioner: filestore.csi.storage.gke.io
    parameters:
      tier: enterprise
      multishare: "true"
      instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
    allowVolumeExpansion: true
    
    EOF
    

    其中:

    • KEY_PROJECT_ID 是密钥所在的项目的名称。例如 my-key-project

    • REGION 是所使用的区域的名称。例如 us-central1

    • RING_NAME 是密钥环名称。例如 my-key-ring-name

    • KEY_NAME 是密钥名称。例如 my-key-name

  2. 创建 Deployment

    b. 运行以下命令以创建 Deployment 资源:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs-cmek
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-cmek
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-cmek
      resources:
        requests:
          storage: 100Gi
    
    EOF
    

将 PVC 映射到 Filestore 实例

在本部分中,您将了解如何将 PVC 映射到 Filestore 实例。

对于 Filestore Multishare 实例,每个 PVC 都由 Filestore CSI 驱动程序托管在 Filestore 实例上。托管卷的底层 Filestore 实例以及表示 Kubernetes 卷的共享的详细信息可在永久性卷规范的 volumeHandle 字段中捕获。卷句柄格式如下:

modeMultishare/<storageclass-prefix>/<project>/<region>/<filestore-instance-name>/<filestore-share-name>

以下 kubectl 命令可用于快速确定 PVC、PV、Filestore 实例和 Filestore 共享之间的映射。

从命令行中,运行以下命令:

kubectl get pv -o jsonpath='{range .items[*]}{"pv="}{.metadata.name}{",pvc="}{.spec.claimRef.name}{",volumeHandle="}{.spec.csi.volumeHandle}{"\n"}{end}'

您应该会看到类似于以下响应的内容:

pv=pvc-67ad9abd-f25e-4130-b7ca-64d28bd29525,pvc=test-pvc-multishare,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_67ad9abd_f25e_4130_b7ca_64d28bd29525

pv=pvc-c80f4de0-9916-4957-b8ae-b21206650ac0,pvc=test-pvc-fs-sharedvpc,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_c80f4de0_9916_4957_b8ae_b21206650ac0

其中:

  • YOUR_PROJECT_ID 是所使用的项目的名称。例如 my-project

请注意,集群中的两个永久性卷托管在单个 Filestore 实例上。

后续步骤