Utiliser le multipartage Filestore pour Google Kubernetes Engine

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

Avant de commencer

  1. Avant de commencer, suivez la procédure de configuration nécessaire pour utiliser Filestore.

  2. Activez le pilote CSI GKE Filestore (GKE version 1.23 ou ultérieure).

Utiliser plusieurs partages Filestore avec plusieurs applications

Cette section explique comment déployer deux applications, une à l'aide d'un déploiement et d'un avec état, chacune utilisant une StorageClass Filestore multipartage. Vous verrez également comment GKE bin packs (un processus pour empaqueter efficacement les applications dans vos nœuds GKE) tous les volumes dans la même instance Filestore sous-jacente.

  1. Utilisez la StorageClass fournie par GKE ou créez une StorageClass personnalisée.

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

    Si nécessaire, les utilisateurs peuvent créer une StorageClass personnalisée basée sur ce modèle, en tenant compte des exigences de dénomination suivantes:

  2. Créer un déploiement avec plusieurs instances dupliquées de pods utilisant 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
    
  3. Vérifiez les instances dupliquées des pods.

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

      $ kubectl get pvc
    

    Vous devriez obtenir une réponse semblable à la suivante:

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

      $ kubectl get pod
    

    Vous devriez obtenir une réponse semblable à la suivante:

      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
    
  4. Effectuer le scaling des instances dupliquées

    a. Depuis 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 définissez la valeur sur 10.

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

      $ kubectl get pod
    

    Vous devriez obtenir une réponse semblable à la suivante:

      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 10 pods sont en cours d'exécution.

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

      $ kubectl get deployment
    

    Vous devriez obtenir une réponse semblable à la suivante:

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

    e. Depuis la ligne de commande, exécutez la commande suivante pour vérifier l'état lié à la PVC:

      $ kubectl get pvc
    

    Vous devriez obtenir une réponse semblable à la suivante:

      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. Depuis 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 définissez la valeur sur 2.

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

      $ kubectl get pod
    

    Vous devriez obtenir une réponse semblable à la suivante:

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

    Déployer 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 effectuerez ensuite le scaling de l'application sur neuf instances dupliquées utilisant au total 900 Gio (9 instances dupliquées utilisant chacune 100 Gio), puis vous vérifierez que GKE utilise la même instance Filestore en la partageant.

    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: k8s.gcr.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
    
    
  6. Vérifiez les instances dupliquées et les volumes avec état.

    Depuis la ligne de commande, exécutez la commande suivante:

    $ kubectl get pod
    

    Vous devriez obtenir une réponse semblable à la suivante:

    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.

    Depuis la ligne de commande, exécutez la commande suivante:

    $ kubectl get statefulset
    

    Vous devriez obtenir une réponse semblable à la suivante:

    NAME   READY   AGE
    web    2/2     2m8s
    

    Depuis la ligne de commande, exécutez la commande suivante:

    $ kubectl get pvc
    

    Vous devriez obtenir une réponse semblable à la suivante:

    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ées au Statefulset.

  7. Effectuer le scaling des instances dupliquées avec état

    Augmentez le nombre d'instances dupliquées à neuf. À mesure que le nombre augmente, les PVC correspondantes sont créées.

    a. Depuis 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 définissez la valeur sur 9.

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

    $ kubectl get statefulset
    

    Vous devriez obtenir une réponse semblable à la suivante:

    NAME   READY   AGE
    web    9/9     13m
    

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

    $ kubectl get deployment
    

    Vous devriez obtenir une réponse semblable à la suivante:

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

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

    $ kubectl get pvc
    

    Vous devriez obtenir une réponse semblable à la suivante:

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

    Vous disposez désormais d'un déploiement avec deux pods d'instances dupliquées et d'un StatefulSet comportant neuf pods d'instances dupliquées et un total de dix PVC, chacun d'une taille de 100 Gio. Tous les volumes sont empaquetés sur une seule instance Filestore multipartage.

    a. Depuis 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.

    Vous devriez obtenir une réponse semblable à la suivante:

    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. Depuis 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 vous explique comment développer un PVC existant et vérifier la taille de votre instance Filestore.

  1. Développez une PVC.

    Les PVC, reposant sur des partages dans une instance Filestore multipartage, peuvent atteindre une taille maximale de 1 Tio. Pour le vérifier, développez l'un des volumes associés au Statefulset pendant que le pod l'utilise.

    Depuis la ligne de commande, exécutez la commande suivante pour vérifier la taille actuelle du PVC de l'instance dupliqué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 définissez la valeur sur 500Gi.

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

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

    Vous devriez obtenir une réponse semblable à la suivante:

    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 étendant le partage basé sur le PVC.

    Plus précisément, le pilote CSI Filestore a automatiquement développé l'instance à 1 536 Gi pour s'adapter à la nouvelle taille de partage de 500 Gi.

  5. Depuis 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 accepte le provisionnement dynamique des volumes dans un projet de service sous un VPC partagé. La section suivante montre comment provisionner des volumes de manière dynamique sur des instances Filestore multipartage dans le projet de service d'un réseau VPC partagé à l'aide du pilote CSI Filestore.

  1. Suivez la procédure de configuration pour l'accès à un réseau VPC partagé et à un service privé.

  2. Créer une StorageClass pour provisionner de manière dynamique des volumes sauvegardés par une instance de partage de fichiers Filestore sur un VPC partagé

    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 au sein de 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, il doit s'agir d'une plage d'adresses nommée au lieu d'une valeur CIDR directe.

    Pour en savoir plus, consultez Attribuer des plages d'adresses IP ou Configurer une plage d'adresses IP réservée. Pour voir un exemple de création d'un nom réservé à l'aide de Google Cloud Console, consultez la page 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 pour lesquelles CMEK est activé

Vous pouvez créer des volumes GKE hébergés sur des instances de multipartage Filestore de 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éer une StorageClass compatible 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 est le nom du projet où 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 aux instances Filestore

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

Avec les instances multipartage 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 la part représentant le volume Kubernetes sont capturés dans le champ volumeHandle de la spécification des volumes persistants. Le format du handle de volume 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.

Depuis 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}'

Vous devriez obtenir une réponse semblable à la suivante:

   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