使用 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 到 128 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 Multishares 实例提供支持的卷。

    运行以下命令以部署 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 实例上。

后续步骤