運用 GKE 適用的 Filestore 多共用區來最佳化儲存空間

本指南說明如何使用 GKE Filestore CSI 驅動程式,為 Google Kubernetes Engine 使用 Filestore 多重共用。

事前準備

  1. 開始操作前,請先完成設定步驟,才能使用 Filestore。

  2. 啟用 GKE Filestore CSI 驅動程式 (1.23 以上版本):

    • 驅動程式 1.23 到 1.26 版最多可支援每個執行個體 10 個共用項目。

    • 驅動程式 1.27 以上版本可支援每個執行個體最多 80 個共用項目。

    如需最新的 GKE Filestore CSI 驅動程式需求,請參閱「透過 Filestore CSI 驅動程式存取 Filestore 執行個體」。

搭配多個應用程式使用 Filestore 多共用區

本節將說明如何部署兩個應用程式,一個是部署,另一個是Statefulset,每個應用程式都使用 Filestore 多份額 StorageClass。您也會看到 GKE 如何執行 bin 封裝 (將應用程式封裝至 GKE 節點的程序),將相同基礎 Filestore Enterprise 執行個體中的所有磁碟區封裝。

  1. 使用 GKE 提供的 StorageClass enterprise-multishare-rwx,建立最多可支援 10 個共用項目的執行個體。

    • 如果您想建立可支援最多 80 個共用項目的執行個體,則需要建立自訂 StorageClass。為配合本指南的目的,您將使用 StorageClass,其中每個例項的分享上限為 10 個。

    啟用 GKE Filestore CSI 驅動程式後,使用者就能透過下列設定存取 GKE 提供的多共用區 StorageClass enterprise-multishare-rwx。參照這個 StorageClass,GKE Filestore CSI 驅動程式會使用動態磁碟區佈建,根據 GKE 工作負載需求,自動為新的永久磁碟區要求 (PVC) 建立永久磁碟區 (PV):

    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 GB 到 128 GB 之間) 對應至單一 10 TiB 企業級執行個體。

    • 這項功能與由 GKE Filestore CSI 驅動程式 1.23 到 1.26 版建立的 Filestore 執行個體相容。

    • 現有執行個體可以建立新的 PVC (或共用),且共用空間大小可擴充至 10 GB 的最低值。

    • GKE Filestore CSI 驅動程式 1.27 以上版本會辨識舊版企業執行個體,並為其指派預設的最大共用大小 1024 GiB (1 TiB)。因此,舊版執行個體的分享數上限為每個執行個體 10 個。

    詳情請參閱「GKE 適用的 Filestore 多共用區」。

  1. 使用單一 PVC 建立含有多個 Pod 備份的部署。

    建立類似下列內容的 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. 在指令列執行下列指令來編輯部署作業:

    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. 在指令列執行下列指令來編輯部署作業:

    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 與部署作業相關聯。

    在指令列中執行下列指令:

    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 與部署 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 的部署,以及一個含有九個副本 Pod 的 Statefulset,以及總共 10 個 PVC,每個大小為 100 GiB。所有磁區都會封裝至單一 Filestore 多共用區執行個體。

    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。

    PVC 由 Filestore 多共用區執行個體中的共用區支援,可擴充至 max-volume-size 參數中指定的最大大小。如要驗證這項功能,請在 Pod 使用時,展開與 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,以便容納新的共用資料夾大小 500 Gi。

  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

共用虛擬私有雲上的動態佈建

GKE 專用的 Filestore CSI 驅動程式支援共用虛擬私有雲下服務專案中的動態配置。以下章節將說明如何使用 Filestore CSI 驅動程式,在共用虛擬私有雲網路中的服務專案中,動態地在 Filestore 多用途共享儲存空間執行個體上佈建磁碟區。

  1. 完成共用虛擬私有雲網路和私人服務存取權的設定步驟

  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 是共用虛擬私有雲網路主專案的 ID 或名稱。例如:my-host-project

    • SHARED_VPC_NAME 共用虛擬私有雲網路的名稱。例如:my-shared-vpc

    如果您想在保留的 IP 位址範圍內部署資源,請在指令中使用的參數中加入下列行:

    reserved-ip-range: RESERVED_NAME
    

    其中 RESERVED_NAME 是預留 IP 位址範圍的名稱,可在該範圍內佈建 Filestore 執行個體。例如:filestore-reserved-ip-range。如果指定保留的 IP 範圍,則必須是命名的位址範圍,而非直接的 CIDR 值。

    詳情請參閱「分配 IP 位址範圍」或「設定保留的 IP 位址範圍」。如需使用 Google Cloud 控制台建立保留名稱的範例,請參閱「建立 IP 分配」。

  3. 建立部署。

    執行下列指令建立 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 多共用執行個體上代管的 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. 建立部署。

    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 多共用執行個體中,每個 PVC 都由 Filestore CSI 驅動程式在 Filestore 執行個體上代管。永久磁碟區規格的 volumeHandle 欄位會擷取主機代管磁碟區的基礎 Filestore 執行個體,以及代表 Kubernetes 磁碟區的共用區詳細資料。音量資源程式庫句柄格式如下:

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 執行個體上。

後續步驟