Installer des buckets Cloud Storage en tant que volumes persistants


Ce guide vous explique comment utiliser des volumes persistants Kubernetes soutenus par vos buckets Cloud Storage pour gérer les ressources de stockage de vos pods Kubernetes sur Google Kubernetes Engine (GKE). Envisagez d'utiliser cette option de stockage si vous connaissez déjà les PersistentVolumes et que vous souhaitez assurer la cohérence avec vos déploiements existants qui s'appuient sur ce type de ressource.

Ce guide s'adresse aux administrateurs et opérateurs de plate-forme qui souhaitent simplifier la gestion du stockage pour leurs applications GKE.

Avant de lire cette page, assurez-vous de connaître les volumes persistants Kubernetes, les pods Kubernetes et les buckets Cloud Storage.

Si vous souhaitez une interface simplifiée basée sur les pods qui ne nécessite aucune expérience préalable avec les volumes persistants Kubernetes, consultez Installer des buckets Cloud Storage en tant que volumes éphémères CSI.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

Fonctionnement des volumes persistants pour les buckets Cloud Storage

Le provisionnement statique vous permet de créer un ou plusieurs objets PersistentVolume contenant les détails du système de stockage sous-jacent. Les pods de vos clusters peuvent ensuite utiliser le stockage via des PersistentVolumeClaims.

L'utilisation d'un volume persistant sauvegardé par un bucket Cloud Storage implique les opérations suivantes :

  1. Définition du stockage : vous définissez un PersistentVolume dans votre cluster GKE, y compris le pilote CSI à utiliser et tous les paramètres requis. Pour le pilote CSI Cloud Storage FUSE, vous spécifiez le nom du bucket et d'autres informations pertinentes.

    Vous pouvez éventuellement affiner les performances de votre pilote CSI à l'aide de la fonctionnalité de mise en cache des fichiers. La mise en cache des fichiers peut améliorer les performances des applications GKE en mettant en cache les fichiers Cloud Storage fréquemment consultés sur un disque local plus rapide.

    Vous pouvez également utiliser la fonctionnalité de téléchargement parallèle pour accélérer la lecture de fichiers volumineux à partir de Cloud Storage pour les téléchargements multithread. Vous pouvez utiliser cette fonctionnalité pour améliorer les temps de chargement des modèles, en particulier pour les lectures de plus de 1 Go.

  2. Appel du pilote : lorsqu'une PersistentVolumeClaim demande un stockage correspondant à la spécification du PersistentVolume, GKE appelle le pilote CSI Cloud Storage FUSE.

  3. Montage du bucket : le pilote CSI monte le bucket sur le nœud sur lequel le pod demandeur est planifié. Le contenu du bucket est ainsi accessible au pod en tant que répertoire dans le système de fichiers local du pod. Pour affiner la façon dont les buckets sont installés dans le système de fichiers, vous pouvez utiliser les options de montage. Vous pouvez également utiliser des attributs de volume pour configurer le comportement spécifique du pilote CSI Cloud Storage FUSE.

  4. Rattachement : si le pod redémarre ou est replanifié sur un autre nœud, le pilote CSI remonte le même bucket sur le nouveau nœud, ce qui garantit l'accessibilité des données.

Créer un volume persistant

  1. Créez un fichier manifeste PersistentVolume avec la spécification suivante :

    Pod

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class  
      mountOptions:
        - implicit-dirs
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE  
    

    Remplacez les valeurs suivantes :

    • NAMESPACE : espace de noms Kubernetes dans lequel vous souhaitez déployer votre pod.
    • BUCKET_NAME : nom du bucket Cloud Storage que vous avez spécifié lors de la configuration de l'accès aux buckets Cloud Storage. Vous pouvez spécifier un trait de soulignement (_) pour installer tous les buckets auxquels le compte de service Kubernetes peut accéder. Pour en savoir plus, consultez la section Installation dynamique dans la documentation de Cloud Storage FUSE.

    L'exemple de fichier manifeste montre les paramètres requis suivants :

    • spec.csi.driver : utilisez gcsfuse.csi.storage.gke.io comme nom de pilote CSI.

    Vous pouvez éventuellement ajuster les variables suivantes :

    • spec.mountOptions : transmettez des options d'installation à Cloud Storage FUSE. Spécifiez les options en une seule chaîne séparée par des virgules, sans espaces.
    • spec.csi.volumeAttributes : transmettez d'autres attributs de volume à Cloud Storage FUSE.

    Pod (mise en cache de fichiers)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class 
      mountOptions:
        - implicit-dirs
        - file-cache:max-size-mb:-1
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE 
    

    Remplacez les valeurs suivantes :

    • NAMESPACE : espace de noms Kubernetes dans lequel vous souhaitez déployer votre pod.
    • BUCKET_NAME : nom du bucket Cloud Storage que vous avez spécifié lors de la configuration de l'accès aux buckets Cloud Storage. Vous pouvez spécifier un trait de soulignement (_) pour installer tous les buckets auxquels le compte de service Kubernetes peut accéder. Pour en savoir plus, consultez la section Installation dynamique dans la documentation de Cloud Storage FUSE.

    Pod (téléchargement parallèle)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class 
      mountOptions:
        - implicit-dirs
        - file-cache:enable-parallel-downloads:true
        - file-cache:max-size-mb:-1
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE 
    

    Remplacez les valeurs suivantes :

    • NAMESPACE : espace de noms Kubernetes dans lequel vous souhaitez déployer votre pod.
    • BUCKET_NAME : nom du bucket Cloud Storage que vous avez spécifié lors de la configuration de l'accès aux buckets Cloud Storage. Vous pouvez spécifier un trait de soulignement (_) pour installer tous les buckets auxquels le compte de service Kubernetes peut accéder. Pour en savoir plus, consultez la section Installation dynamique dans la documentation de Cloud Storage FUSE.
  2. Appliquez le fichier manifeste au cluster :

    kubectl apply -f PV_FILE_PATH
    

    Remplacez PV_FILE_PATH par le chemin d'accès à votre fichier YAML.

Créer un objet PersistentVolumeClaim

  1. Créez un fichier manifeste PersistentVolumeClaim avec la spécification suivante :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: gcs-fuse-csi-static-pvc
      namespace: NAMESPACE
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      storageClassName: example-storage-class
    

    Remplacez NAMESPACE par l'espace de noms Kubernetes dans lequel vous souhaitez déployer votre pod.

    Pour lier votre PersistentVolume à un PersistentVolumeClaim, vérifiez les paramètres de configuration suivants :

    • Les champs spec.storageClassName de vos fichiers manifestes PersistentVolume et PersistentVolumeClaim doivent correspondre. Le storageClassName n'a pas besoin de faire référence à un objet StorageClass existant. Pour lier la revendication à un volume, vous pouvez utiliser le nom de votre choix. Toutefois, il ne peut pas être vide.
    • Les champs spec.accessModes de vos fichiers manifestes PersistentVolume et PersistentVolumeClaim doivent correspondre.
    • Le champ spec.capacity.storage de votre fichier manifeste PersistentVolume doit correspondre à spec.resources.requests.storage dans le fichier manifeste PersistentVolumeClaim. Étant donné que les buckets Cloud Storage n'ont pas de limite de taille, vous pouvez indiquer n'importe quel nombre pour la capacité. Toutefois, il ne peut pas être vide.
  2. Appliquez le fichier manifeste au cluster :

    kubectl apply -f PVC_FILE_PATH
    

    Remplacez PVC_FILE_PATH par le chemin d'accès à votre fichier YAML.

Utiliser le volume dans un pod

  1. Créez un fichier manifeste de pod avec la spécification suivante :

    apiVersion: v1
    kind: Pod
    metadata:
      name: gcs-fuse-csi-example-static-pvc  
      namespace: NAMESPACE
      annotations:
        gke-gcsfuse/volumes: "true"
    spec:
      containers:
      - image: busybox
        name: busybox
        command: ["sleep"]
        args: ["infinity"]
        volumeMounts:
        - name: gcs-fuse-csi-static
          mountPath: /data
          readOnly: true
      serviceAccountName: KSA_NAME
      volumes:
      - name: gcs-fuse-csi-static
        persistentVolumeClaim:
          claimName: gcs-fuse-csi-static-pvc
          readOnly: true  
    

    Remplacez les valeurs suivantes :

    L'exemple de fichier manifeste montre les paramètres requis suivants :

    • metadata.annotations : l'annotation gke-gcsfuse/volumes: "true" est obligatoire. Consultez la section Configurer le conteneur side-car pour obtenir des annotations facultatives.

    Vous pouvez éventuellement ajuster les variables suivantes :

    • spec.containers[n].volumeMonts[n].readOnly : spécifiez "true" si seules certaines installations de volume sont en lecture seule.
    • spec.volumes[n].persistentVolumeClaim.readOnly : spécifiez "true" si toutes les installations de volume sont en lecture seule.
  2. Appliquez le fichier manifeste au cluster :

    kubectl apply -f POD_FILE_PATH
    

    Remplacez POD_FILE_PATH par le chemin d'accès à votre fichier YAML.

(Facultatif) Montez le même bucket Cloud Storage avec différents volumes persistants {:#mount-same-bucket-different-pv}, disponible à partir de la version 1.33.0-gke.1932000 de GKE

Pour installer le même bucket Cloud Storage à l'aide de plusieurs volumes persistants différents, vous devez utiliser un volumeHandle unique pour chaque volume persistant. Dans l'objet PersistentVolume, utilisez le format BUCKET_NAME:UNIQUE_SUFFIX pour le champ volumeHandle. Remplacez BUCKET_NAME par le nom de votre bucket et UNIQUE_SUFFIX par l'identifiant unique de votre choix. Exemple : myBucket:xyz123.

Par exemple, vous pouvez monter le même bucket Cloud Storage sur le même nœud plusieurs fois, chaque fois avec un ensemble distinct d'options de montage.

Résoudre les problèmes

Si vous devez résoudre des problèmes liés à Cloud Storage FUSE, vous pouvez définir l'option log-severity sur TRACE. Vous définissez l'indicateur dans la section args de la spécification du conteneur du pilote dans le fichier YAML de déploiement. L'attribut de volume gcsfuseLoggingSeverity est alors automatiquement défini sur "trace".

Pour obtenir d'autres conseils de dépannage, consultez le guide de dépannage dans la documentation du projet GitHub.

Étapes suivantes