Optimiser le stockage avec Filestore Multishares pour GKE

Ce guide explique comment utiliser les multipartages Filestore pour Google Kubernetes Engine avec le pilote CSI GKE Filestore.

Avant de commencer

  1. Avant de commencer, suivez les étapes de configuration requises pour utiliser Filestore.

  2. Activez la version 1.23 ou ultérieure du pilote CSI GKE Filestore :

    • Les versions 1.23 à 1.26 du pilote acceptent jusqu'à 10 partages par instance.

    • Les versions 1.27 ou ultérieures du pilote acceptent jusqu'à 80 partages par instance.

    Pour connaître les dernières exigences concernant le pilote CSI Filestore de GKE, consultez Accéder aux instances Filestore avec le pilote CSI Filestore.

Utiliser les multipartages Filestore avec plusieurs applications

Cette section vous explique comment déployer deux applications, un Deployment et un Statefulset, chacune utilisant une ressource StorageClass définie sur des multipartages Filestore. Vous verrez également comment GKE applique le bin packing (un processus permettant d'empaqueter efficacement les applications dans vos nœuds GKE) à tous les volumes dans la même instance Filestore entreprise sous-jacente.

  1. Utilisez la ressource StorageClass fournie par GKE, enterprise-multishare-rwx, pour créer des instances acceptant jusqu'à dix partages.

    • Si vous souhaitez créer des instances acceptant jusqu'à 80 partages, vous devez créer une ressource StorageClass personnalisée. Pour les besoins de ce guide, vous utiliserez une ressource StorageClass avec une limite de dix partages par instance.

    Une fois le pilote CSI GKE Filestore activé, les utilisateurs peuvent accéder à la ressource StorageClass multipartage enterprise-multishare-rwx fournie par GKE avec la configuration suivante. En faisant référence à cette StorageClass, le pilote CSI GKE Filestore utilise le provisionnement dynamique de volumes pour créer automatiquement des volumes persistants (PV, Persistent Volume) pour les nouvelles revendications de volume persistant (PVC, Persistent Volume Claim) en fonction de ce que nécessite la demande de charge de travail 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>
    

Créer une ressource StorageClass personnalisée

Si vous souhaitez bénéficier de la dernière limite de capacité, soit 80 partages par instance Filestore, créez une ressource StorageClass personnalisée basée sur le modèle suivant :

  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

Lorsque vous renommez la ressource StorageClass, tenez compte des exigences suivantes :

  • Le nom StorageClass doit être un nom de sous-domaine DNS valide.

  • Le nom de la StorageClass multipartage est également utilisé comme libellé d'instance et doit suivre les consignes concernant le noms des libellés.

  • Si votre application nécessite un provisionnement de volumes immédiat, incluez le mode de liaison de volume Immediate :

    volumeBindingMode: Immediate

    Utilisez cette spécification, par exemple, si vous ne souhaitez pas que le provisionnement de volumes dépende de la création de pod dans le cluster GKE.

  • Depuis la version 1.27 du pilote, si vous souhaitez attribuer plus de dix partages par instance, incluez le paramètre max-volume-size et attribuez-lui l'une des valeurs acceptées, spécifiées dans la première colonne :

    Taille maximale de volume (taille du partage) Nombre maximal de partages par instance
    128 Gio 80
    256 Gio 40
    512 Gio 20
    1 024 Gio 10

    Ainsi, par exemple, l'ajout de la paire clé-valeur max-volume-size: "128Gi" garantit que la ressource StorageClass mappe jusqu'à 80 partages, dont la taille de chacun va de 10 Gio à 128 Gio, sur une seule instance de niveau entreprise de 10 Tio.

    • Cette fonctionnalité est rétrocompatible avec les instances Filestore créées par les versions 1.23 à 1.26 des pilotes CSI GKE.

    • Les instances existantes peuvent créer des PVC, ou des partages, en appliquant la taille de partage minimale étendue de 10 Gio.

    • La version 1.27 ou ultérieure du pilote CSI Filestore GKE reconnaît les anciennes instances entreprise et leur attribue une taille de partage maximale par défaut de 1 024 Gio (1 Tio). Par conséquent, les anciennes instances sont limitées à un maximum de dix partages par instance.

    Pour en savoir plus, consultez la page Multipartages Filestore pour GKE.

  1. Créez un déploiement avec plusieurs instances répliquées de pods à l'aide d'un seul PVC.

    Créez un fichier de configuration YAML semblable à celui-ci :

    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. Vérifiez les instances répliquées des pods.

    a. À partir de la ligne de commande, exécutez la commande suivante pour vérifier l'état du PVC :

    kubectl get pvc
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. À partir de la ligne de commande, exécutez la commande suivante pour vérifier l'état du pod :

    kubectl get pod
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. Effectuez le scaling des instances répliquées.

    a. À partir de la ligne de commande, exécutez la commande suivante pour modifier le déploiement :

    kubectl edit deployment web-server-multishare
    

    b. Le fichier s'ouvre dans la ligne de commande. Recherchez le champ spec.replicas et remplacez la valeur par 10.

    c. À partir de la ligne de commande, exécutez la commande suivante pour voir la modification appliquée :

    kubectl get pod
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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
    

    Notez que dix pods sont en cours d'exécution.

    d. À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get deployment
    

    Un résultat semblable à la réponse suivante doit s'afficher :

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

    e. À partir de la ligne de commande, exécutez la commande suivante pour vérifier l'état d'association du PVC :

    kubectl get pvc
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. À partir de la ligne de commande, exécutez la commande suivante pour modifier le déploiement :

    kubectl edit deployment web-server-multishare
    

    g. Le fichier s'ouvre dans la ligne de commande. Recherchez le champ spec.replicas et remplacez la valeur par 2.

    h. À partir de la ligne de commande, exécutez la commande suivante pour voir la modification appliquée :

    kubectl get pod
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. Déployez un StatefulSet.

    Déployez une deuxième application qui partage l'instance Filestore sous-jacente.

    Pour ce faire, provisionnez 200 Gio d'espace et vérifiez qu'il utilise la même instance Filestore sous-jacente que la première application.

    Vous allez ensuite effectuer le scaling de l'application vers neuf instances répliquées utilisant 900 Gio au total (9 instances répliquées utilisant 100 Gio chacune) et vérifier que GKE utilise la même instance Filestore en partageant l'instance.

    Créez un fichier de configuration YAML semblable à celui-ci :

    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. Vérifiez les instances répliquées et les volumes Statefulset.

    À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get pod
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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
    

    Notez que les deux premiers pods sont associés au StatefulSet. Les deux derniers pods sont associés au déploiement.

    À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get statefulset
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    NAME   READY   AGE
    web    2/2     2m8s
    

    À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get pvc
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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
    

    Le PVC test-pvc-fs est associé au déploiement web-server-multishare.

    Les PVC test-pvc-multishare-web-0 et test-pvc-multishare-web-1 sont associés au Statefulset.

  6. Effectuez le scaling des instances répliquées Statefulset.

    Augmentez le nombre d'instances répliquées à neuf. À mesure que le nombre augmente, les PVC correspondants sont créés.

    a. À partir de la ligne de commande, exécutez la commande suivante :

    kubectl  edit statefulset web
    

    b. Le fichier s'ouvre dans la ligne de commande. Recherchez le champ spec.replicas et remplacez la valeur par 9.

    c. À partir de la ligne de commande, exécutez la commande suivante pour voir la modification appliquée :

    kubectl get statefulset
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    NAME   READY   AGE
    web    9/9     13m
    

    d. À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get deployment
    

    Un résultat semblable à la réponse suivante doit s'afficher :

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

    e. À partir de la ligne de commande, exécutez la commande suivante :

    kubectl get pvc
    

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. Vérifiez l'état de l'instance Filestore.

    Vous disposez maintenant d'un déploiement avec deux pods d'instances répliquées, et d'un StatefulSet avec neuf pods d'instances répliquées et un total de dix PVC, chacun d'une taille de 100 Gio. Tous les volumes sont regroupés sur une seule instance de multipartages Filestore.

    a. À partir de la ligne de commande, exécutez la commande instances list suivante :

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

    où :

    • YOUR_PROJECT_ID est le nom du projet utilisé. Par exemple, my-project.

    • REGION est le nom de la région utilisée. Par exemple, us-central1.

    Un résultat semblable à la réponse suivante doit s'afficher :

    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. À partir de la ligne de commande, exécutez la commande instances describe suivante :

    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
    
    

    où :

    • YOUR_PROJECT_ID est le nom du projet utilisé. Par exemple, my-project.

    • REGION est le nom de la région utilisée. Par exemple, us-central1.

Développer un PVC et vérifier l'instance Filestore

Cette section explique comment développer un PVC existant et vérifier la taille de l'instance Filestore.

  1. Développez un PVC.

    Les PVC, qui reposent sur des partages dans une instance de multipartages Filestore, peuvent atteindre la taille maximale spécifiée dans le paramètre max-volume-size. Pour vérifier cela, développez l'un des volumes associés au StatefulSet lorsque le pod l'utilise.

    À partir de la ligne de commande, exécutez la commande suivante pour vérifier la taille actuelle du PVC de l'instance répliquée 0 :

    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. À partir de la ligne de commande, exécutez la commande suivante pour augmenter la taille à 500 Gio :

    kubectl edit pvc test-pvc-multishare-web-0
    
  3. Le fichier s'ouvre dans la ligne de commande. Recherchez le champ spec.resources.requests.storage et remplacez la valeur par 500Gi.

  4. À partir de la ligne de commande, exécutez la commande suivante pour voir la modification appliquée :

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

    Un résultat semblable à la réponse suivante doit s'afficher :

    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
    

    Le pilote CSI Filestore a accepté la requête, en développant d'abord l'instance Filestore sous-jacente, puis en développant le partage qui sauvegarde le PVC.

    Plus précisément, le pilote CSI Filestore a automatiquement étendu l'instance à 1 536 Gi pour prendre en charge la nouvelle taille de partage de 500 Gi.

  5. À partir de la ligne de commande, exécutez la commande instances describe suivante pour vérifier la capacité de l'instance 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
    

    où :

    • YOUR_PROJECT_ID est le nom du projet utilisé. Par exemple, my-project.

    • REGION est le nom de la région utilisée. Par exemple, us-central1.

Provisionnement dynamique sur un VPC partagé

Le pilote CSI Filestore pour GKE permet le provisionnement dynamique des volumes dans un projet de service sous un VPC partagé. La section suivante montre comment utiliser le pilote CSI Filestore pour provisionner des volumes de manière dynamique sur des instances de multipartages Filestore, dans un projet de service et dans le cadre d'un réseau VPC partagé.

  1. Suivez les étapes de configuration pour l'accès privé aux services et un réseau VPC partagé.

  2. Créez une ressource StorageClass pour provisionner de manière dynamique, sur un VPC partagé, des volumes reposant sur une instance de multipartages Filestore.

    Exécutez la commande suivante pour déployer une ressource 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
    

    où :

    • HOST_PROJECT_ID est l'ID ou le nom du projet hôte du réseau VPC partagé. Par exemple, my-host-project.

    • SHARED_VPC_NAME est le nom du réseau VPC partagé. Par exemple, my-shared-vpc.

    Si vous souhaitez déployer votre ressource dans une plage d'adresses IP réservée, ajoutez la ligne suivante aux paramètres utilisés dans la commande :

    reserved-ip-range: RESERVED_NAME
    

    RESERVED_NAME est le nom de la plage d'adresses IP réservée dans laquelle une instance Filestore peut être provisionnée. Exemple : filestore-reserved-ip-range. Si une plage d'adresses IP réservée est spécifiée, elle doit être une plage d'adresses nommée et non une valeur CIDR directe.

    Pour en savoir plus, consultez les sections Allouer des plages d'adresses IP ou Configurer une plage d'adresses IP réservée. Pour consulter un exemple de création d'un nom réservé à l'aide de la console Google Cloud, consultez la section Créer une allocation d'adresses IP.

  3. Créez un déploiement.

    Exécutez la commande suivante pour créer une ressource 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
    

Instances Filestore compatibles avec CMEK

Vous pouvez créer des volumes GKE hébergés sur des instances de multipartages Filestore exploitant le chiffrement CMEK. Dans cette section, vous allez apprendre à configurer une clé de chiffrement gérée par le client (CMEK) pour votre instance Filestore.

Les détails de la clé gérée par le client peuvent être fournis dans la StorageClass. La fonctionnalité CMEK est activée sur toutes les instances créées dynamiquement par le pilote CSI Filestore, qui fait référence à cette StorageClass.

  1. Créez une StorageClass activée par CMEK.

    a. Exécutez la commande suivante :

    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
    

    où :

    • KEY_PROJECT_ID correspond au nom du projet dans lequel se trouve la clé. Par exemple, my-key-project.

    • REGION est le nom de la région utilisée. Par exemple, us-central1.

    • RING_NAME est le nom du trousseau de clés. Par exemple, my-key-ring-name.

    • KEY_NAME est le nom de la clé. Par exemple, my-key-name.

  2. Créez un déploiement.

    b. Exécutez la commande suivante pour créer une ressource 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
    

Mapper des PVC à des instances Filestore

Dans cette section, vous allez apprendre à mapper les PVC à vos instances Filestore.

Avec les instances de multipartages Filestore, chaque PVC est hébergé sur une instance Filestore par le pilote CSI Filestore. Les détails de l'instance Filestore sous-jacente hébergeant le volume et le partage représentant le volume Kubernetes sont capturés dans le champ volumeHandle de la spécification de volumes persistants. Le format de la valeur du champ est le suivant :

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

La commande kubectl suivante permet de déterminer rapidement les mappages entre un PVC, un PV, une instance Filestore et un partage Filestore.

À partir de la ligne de commande, exécutez la commande suivante :

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

Un résultat semblable à la réponse suivante doit s'afficher :

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

où :

  • YOUR_PROJECT_ID est le nom du projet utilisé. Par exemple, my-project.

Notez que deux volumes persistants du cluster sont hébergés sur une seule instance Filestore.

Étapes suivantes