Speicher mit Filestore Multishares für GKE optimieren

In dieser Anleitung erfahren Sie, wie Sie Filestore Multishares für Google Kubernetes Engine mit dem CSI-Treiber von GKE Filestore verwenden.

Hinweise

  1. Führen Sie zuerst die Einrichtungsschritte aus, die für die Verwendung von Filestore erforderlich sind.

  2. Aktivieren Sie den GKE Filestore-CSI-Treiber (Version 1.23 oder höher):

    • Die Treiberversionen 1.23 bis 1.26 unterstützen bis zu 10 Freigaben pro Instanz.

    • Treiberversionen 1.27 oder höher unterstützen bis zu 80 Freigaben pro Instanz.

    Die neuesten Anforderungen an den GKE Filestore-CSI-Treiber finden Sie unter Mit dem Filestore-CSI-Treiber auf Filestore-Instanzen zugreifen.

Filestore Multishares für mehrere Anwendungen verwenden

In diesem Abschnitt erfahren Sie, wie Sie zwei Anwendungen bereitstellen: ein Deployment und ein StatefulSet, die jeweils eine Filestore Multishares-StorageClass verwenden. Außerdem erfahren Sie, wie GKE alle Volumes in derselben zugrunde liegenden Filestore-Enterprise-Instanz mit Bin-Packing (ein Prozess zum effizienten Packen von Anwendungen in Ihre GKE-Knoten) packt.

  1. Verwenden Sie die von GKE bereitgestellte StorageClass enterprise-multishare-rwx, um Instanzen zu erstellen, die bis zu 10 Freigaben unterstützen.

    • Wenn Sie Instanzen erstellen möchten, die bis zu 80 Freigaben unterstützen, müssen Sie eine benutzerdefinierte StorageClass erstellen. Für diese Anleitung verwenden Sie eine StorageClass mit einem Limit von zehn Freigaben pro Instanz.

    Nachdem der GKE Filestore-CSI-Treiber aktiviert wurde, können Nutzer auf die von GKE bereitgestellte Multishare-StorageClass enterprise-multishare-rwx mit der folgenden Konfiguration zugreifen. Unter Verweis auf diese StorageClass verwendet der GKE-Filestore-CSI-Treiber die dynamische Volume-Bereitstellung, um automatisch nichtflüchtige Volumes (PVs) für neue Ansprüche auf nichtflüchtige Volumes (PVCs) zu erstellen, wenn die GKE-Arbeitslast dies erfordert:

    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>
    

Benutzerdefinierte StorageClass erstellen

Wenn Sie das neueste Kapazitätslimit von 80 Freigaben pro Filestore-Instanz nutzen möchten, erstellen Sie anhand der folgenden Vorlage eine benutzerdefinierte 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

Beachten Sie beim Umbenennen der StorageClass die folgenden Anforderungen:

  • Der Name der StorageClass muss ein gültiger Name der DNS-Subdomain sein.

  • Der Name der StorageClass mit mehreren Freigaben wird auch als Instanzlabel verwendet und sollte den Benennungsrichtlinien für Labels folgen.

  • Wenn für Ihre Anwendung eine sofortige Bereitstellung von Volumes erforderlich ist, schließen Sie den Volume-Bindungsmodus Immediate ein:

    volumeBindingMode: Immediate

    Verwenden Sie diese Spezifikation beispielsweise, wenn Sie nicht möchten, dass die Volume-Bereitstellung vom GKE-Cluster abhängig ist.

  • Wenn Sie ab Treiberversion 1.27 mehr als zehn Freigaben pro Instanz zuweisen möchten, fügen Sie den Parameter max-volume-size ein und weisen Sie ihm einen der akzeptierten Werte aus der ersten Spalte zu:

    Maximale Volume-Größe (Freigabegröße) Maximale Anzahl Freigaben pro Instanz
    128 GiB 80
    256 GiB 40
    512 GiB 20
    1024 GiB 10

    Wenn Sie beispielsweise das Schlüssel/Wert-Paar max-volume-size: "128Gi" hinzufügen, werden mit der StorageClass bis zu 80 Freigaben (von jeweils 10 GiB bis 128 GiB) zu einer einzelnen 10-TiB-Enterprise-Instanz zugeordnet.

    • Diese Funktion ist abwärtskompatibel mit Filestore-Instanzen, die von GKE Filestore-CSI-Treiberversionen 1.23 bis 1.26 erstellt wurden.

    • Vorhandene Instanzen können neue PVCs oder Freigaben mit einer erweiterten Mindestfreigabegröße von 10 GiB erstellen.

    • Die GKE Filestore-CSI-Treiberversion 1.27 oder höher erkennt Legacy-Enterprise-Instanzen und weist ihnen eine standardmäßige maximale Freigabegröße von 1.024 GiB (1 TiB) zu. Daher sind Legacy-Instanzen auf maximal zehn Freigaben pro Instanz beschränkt.

    Weitere Informationen finden Sie unter Filestore Multishares für GKE.

  1. Erstellen Sie ein Deployment mit mehreren Pod-Replikaten über einen einzelnen PVC.

    Erstellen Sie eine YAML-Konfigurationsdatei, die in etwa so aussieht:

    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-Replikate prüfen.

    a. Führen Sie in der Befehlszeile den folgenden Befehl aus, um den PVC-Status zu prüfen:

    kubectl get pvc
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Führen Sie in der Befehlszeile den folgenden Befehl aus, um den Pod-Status zu prüfen:

    kubectl get pod
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Replikate skalieren.

    a. Führen Sie in der Befehlszeile den folgenden Befehl aus, um das Deployment zu bearbeiten:

    kubectl edit deployment web-server-multishare
    

    b. Die Datei wird in der Befehlszeile geöffnet. Suchen Sie das Feld spec.replicas und aktualisieren Sie den Wert auf 10.

    c. Führen Sie in der Befehlszeile den folgenden Befehl aus, um die angewendete Änderung zu sehen:

    kubectl get pod
    

    Die Ausgabe sollte in etwa so aussehen:

    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
    

    Beachten Sie, dass 10 Pods ausgeführt werden.

    d. Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get deployment
    

    Die Ausgabe sollte in etwa so aussehen:

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

    e. Führen Sie in der Befehlszeile den folgenden Befehl aus, um den PVC-gebundenen Status zu prüfen:

    kubectl get pvc
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Führen Sie in der Befehlszeile den folgenden Befehl aus, um das Deployment zu bearbeiten:

    kubectl edit deployment web-server-multishare
    

    g. Die Datei wird in der Befehlszeile geöffnet. Suchen Sie das Feld spec.replicas und aktualisieren Sie den Wert auf 2.

    h. Führen Sie in der Befehlszeile den folgenden Befehl aus, um die angewendete Änderung zu sehen:

    kubectl get pod
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Stellen Sie ein StatefulSet bereit.

    Stellen Sie eine zweite Anwendung bereit, die die zugrunde liegende Filestore-Instanz nutzt.

    Stellen Sie dazu 200 GiB Speicherplatz bereit und achten Sie darauf, dass die Anwendung dieselbe zugrunde liegende Filestore-Instanz wie die erste Anwendung verwendet.

    Anschließend skalieren Sie die Anwendung auf neun Replikate mit insgesamt 900 GiB (9 Replikate mit jeweils 100 GiB) und prüfen, dass GKE dieselbe Filestore-Instanz verwendet, Geben Sie dazu die Instanz frei.

    Erstellen Sie eine YAML-Konfigurationsdatei, die in etwa so aussieht:

    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. Prüfen Sie die zustandsorientierten Replikate und Volumes.

    Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get pod
    

    Die Ausgabe sollte in etwa so aussehen:

    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
    

    Beachten Sie, dass die ersten beiden Pods dem StatefulSet zugeordnet sind. Die letzten beiden Pods sind dem Deployment zugeordnet.

    Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get statefulset
    

    Die Ausgabe sollte in etwa so aussehen:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get pvc
    

    Die Ausgabe sollte in etwa so aussehen:

    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
    

    Der PVC test-pvc-fs ist dem Deployment web-server-multishare zugeordnet.

    Die PVCs test-pvc-multishare-web-0 und test-pvc-multishare-web-1 sind dem StatefulSet zugeordnet.

  6. Die StatefulSet-Replikate skalieren.

    Erhöhen Sie die Replikatanzahl auf neun. Wenn die Anzahl zunimmt, werden die entsprechenden PVCs erstellt.

    a. Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl  edit statefulset web
    

    b. Die Datei wird in der Befehlszeile geöffnet. Suchen Sie das Feld spec.replicas und aktualisieren Sie den Wert auf 9.

    c. Führen Sie in der Befehlszeile den folgenden Befehl aus, um die angewendete Änderung zu sehen:

    kubectl get statefulset
    

    Die Ausgabe sollte in etwa so aussehen:

    NAME   READY   AGE
    web    9/9     13m
    

    d. Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get deployment
    

    Die Ausgabe sollte in etwa so aussehen:

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

    e. Führen Sie in der Befehlszeile folgenden Befehl aus:

    kubectl get pvc
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Den Status der Filestore-Instanz prüfen.

    Sie haben jetzt ein Deployment mit zwei Pod-Replikaten und einem StatefulSet mit neun Pod-Replikaten und insgesamt zehn PVCs mit jeweils 100 GiB. Alle Volumes werden auf einer einzelnen Filestore Multishare-Instanz verpackt.

    a. Führen Sie in der Befehlszeile den folgenden instances list-Befehl aus:

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

    Dabei gilt:

    • YOUR_PROJECT_ID ist der Name des verwendeten Projekts. Beispiel: my-project

    • REGION ist der Name der verwendeten Region. Beispiel: us-central1

    Die Ausgabe sollte in etwa so aussehen:

    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. Führen Sie in der Befehlszeile den folgenden instances describe-Befehl aus:

    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
    
    

    Dabei gilt:

    • YOUR_PROJECT_ID ist der Name des verwendeten Projekts. Beispiel: my-project

    • REGION ist der Name der verwendeten Region. Beispiel: us-central1

PVC erweitern und Filestore-Instanz prüfen

In diesem Abschnitt erfahren Sie, wie Sie einen vorhandenen PVC erweitern und die Filestore-Instanzgröße prüfen.

  1. Einen PVC maximieren.

    PVCs, die durch Freigaben in einer Filestore Multishare-Instanz unterstützt werden, können bis zur im Parameter max-volume-size angegebene maximalen Größe wachsen. Um dies zu prüfen, erweitern Sie eines der Volumes, die dem StatefulSet zugeordnet sind, während der Pod es verwendet.

    Führen Sie in der Befehlszeile den folgenden Befehl aus, um die aktuelle PVC-Größe von Replikat 0 zu prüfen:

    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. Führen Sie in der Befehlszeile den folgenden Befehl aus, um die Größe auf 500 GiB zu erhöhen:

    kubectl edit pvc test-pvc-multishare-web-0
    
  3. Die Datei wird in der Befehlszeile geöffnet. Suchen Sie das Feld spec.resources.requests.storage und aktualisieren Sie den Wert auf 500Gi.

  4. Führen Sie in der Befehlszeile den folgenden Befehl aus, um die angewendete Änderung zu sehen:

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

    Die Ausgabe sollte in etwa so aussehen:

    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
    

    Der Filestore-CSI-Treiber akzeptierte die Anfrage und erweiterte zuerst die zugrundeliegende Filestore-Instanz und dann die Freigabe, die der PVC zugrunde liegt.

    Insbesondere hat der Filestore-CSI-Treiber die Instanz automatisch auf 1.536 GiB erweitert, um die neue Freigabegröße von 500 GiB zu berücksichtigen.

  5. Führen Sie in der Befehlszeile den folgenden instances describe-Befehl aus, um die Kapazität der Filestore-Instanz zu prüfen:

    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
    

    Dabei gilt:

    • YOUR_PROJECT_ID ist der Name des verwendeten Projekts. Beispiel: my-project

    • REGION ist der Name der verwendeten Region. Beispiel: us-central1

Dynamische Bereitstellung in einer freigegebenen VPC

Der Filestore-CSI-Treiber für GKE unterstützt die dynamische Bereitstellung von Volumes in einem Dienstprojekt unter einer freigegebenen VPC. Der folgende Abschnitt zeigt, wie der Filestore-CSI-Treiber zur dynamischen Bereitstellung von Volumes auf Filestore Multishare-Instanzen in einem Dienstprojekt unter einem freigegebenen VPC-Netzwerk verwendet wird.

  1. Führen Sie die Einrichtungsschritte für ein freigegebenes VPC-Netzwerk und den privaten Dienstzugriff aus.

  2. Erstellen Sie eine StorageClass, um Volumes dynamisch bereitzustellen, die von einer Filestore Multishare-Instanz in einer freigegebenen VPC unterstützt werden.

    Führen Sie den folgenden Befehl aus, um eine StorageClass-Ressource bereitzustellen:

    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
    

    Dabei gilt:

    • HOST_PROJECT_ID ist die ID oder der Name des Hostprojekts des freigegebenen VPC-Netzwerks. Beispiel: my-host-project

    • SHARED_VPC_NAME ist der Name des freigegebenen VPC-Netzwerks. Beispiel: my-shared-vpc

    Wenn Sie Ihre Ressource in einem reservierten IP-Adressbereich bereitstellen möchten, fügen Sie den im Befehl verwendeten Parametern die folgende Zeile hinzu:

    reserved-ip-range: RESERVED_NAME
    

    Dabei ist RESERVED_NAME der Name des reservierten IP-Adressbereichs, in dem eine Filestore-Instanz bereitgestellt werden kann. Beispiel: filestore-reserved-ip-range Wenn ein reservierter IP-Bereich angegeben ist, muss er ein benannter Adressbereich anstelle eines direkten CIDR-Werts sein.

    Weitere Informationen finden Sie unter IP-Adressbereiche zuweisen oder Reservierten IP-Adressbereich konfigurieren. Ein Beispiel für das Erstellen eines reservierten Namens mit der Google Cloud Console finden Sie unter IP-Zuweisung erstellen.

  3. Deployment erstellen.

    Führen Sie den folgenden Befehl aus, um eine Deployment-Ressource zu erstellen:

    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-fähige Filestore-Instanzen

Sie können GKE-Volumes erstellen, die auf CMEK-fähigen Filestore Multishare-Instanzen gehostet werden. In diesem Abschnitt erfahren Sie, wie Sie einen vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) für Ihre Filestore-Instanz einrichten.

Details zum vom Kunden verwalteten Schlüssel können in der StorageClass bereitgestellt werden. Für jede vom Filestore-CSI-Treiber dynamisch erstellte Instanz, die auf diese StorageClass verweist, wird CMEK aktiviert.

  1. CMEK-fähige StorageClass erstellen.

    a. Führen Sie dazu diesen Befehl aus:

    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
    

    Dabei gilt:

    • KEY_PROJECT_ID ist der Name des Projekts, in dem sich der Schlüssel befindet. Beispiel: my-key-project

    • REGION ist der Name der verwendeten Region. Beispiel: us-central1

    • RING_NAME ist der Name des Schlüsselbunds. Beispiel: my-key-ring-name.

    • KEY_NAME ist der Schlüsselname. Beispiel: my-key-name.

  2. Deployment erstellen.

    b. Führen Sie den folgenden Befehl aus, um eine Deployment-Ressource zu erstellen:

    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
    

PVCs Filestore-Instanzen zuordnen

In diesem Abschnitt erfahren Sie, wie Sie Ihre PVCs Ihren Filestore-Instanzen zuordnen.

Mit Filestore Multishare-Instanzen wird jedes PVC vom Filestore-CSI-Treiber auf einer Filestore-Instanz gehostet. Die Details der zugrunde liegenden Filestore-Instanz, die das Volume hostet, und die Freigabe, die das Kubernetes-Volume darstellt, werden im Feld volumeHandle der Spezifikation der nichtflüchtigen Volumes erfasst. Das Volume-Handle hat folgendes Format:

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

Mit dem folgenden kubectl-Befehl können Sie die Zuordnungen zwischen einer PVC, dem PV, der Filestore-Instanz und einer Filestore-Freigabe schnell ermitteln.

Führen Sie in der Befehlszeile folgenden Befehl aus:

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

Die Ausgabe sollte in etwa so aussehen:

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

Dabei gilt:

  • YOUR_PROJECT_ID ist der Name des verwendeten Projekts. Beispiel: my-project

Beachten Sie, dass zwei nichtflüchtige Volumes im Cluster auf einer einzigen Filestore-Instanz gehostet werden.

Nächste Schritte