Installer des buckets Cloud Storage en tant que volumes persistants


Ce guide vous explique comment utiliser des volumes persistants Kubernetes basés sur 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 reposent sur ce type de ressource.

Ce guide s'adresse aux administrateurs de plate-forme et aux opérateurs qui souhaitent simplifier la gestion de l'espace de stockage de 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 basée sur des pods simplifiée 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 basé sur un bucket Cloud Storage implique les opérations suivantes:

  1. Définition de l'espace de stockage: vous définissez un PersistentVolume dans votre cluster GKE, y compris le pilote CSI à utiliser et les paramètres requis. Pour le pilote CSI FUSE Cloud Storage, vous devez spécifier 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 de 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.

    De plus, vous pouvez 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 multithreads. Vous pouvez utiliser cette fonctionnalité pour améliorer les temps de chargement du modèle, en particulier pour les lectures de plus de 1 Go.

  2. Appel du pilote: lorsqu'un objet PersistentVolumeClaim demande un espace de stockage correspondant aux spécifications du PersistentVolume, GKE appelle le pilote CSI Cloud Storage FUSE.

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

  4. Rattachement: si le pod redémarre ou est reprogrammé 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 les spécifications suivantes:

    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 présente les paramètres obligatoires 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 des attributs de volume supplémentaires à 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 ces paramètres de configuration:

    • 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 placer 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"
        gke-gcsfuse/ephemeral-storage-limit: "50Gi" 
    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 présente les paramètres obligatoires 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 les installations de volume spécifiques 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.

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 de conteneur du pilote dans le fichier YAML de déploiement. L'attribut de volume gcsfuseLoggingSeverity est alors automatiquement défini sur "trace".

Pour obtenir des conseils de dépannage supplémentaires, consultez le guide de dépannage dans la documentation du projet GitHub.

Étape suivante