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 :
- Comprenez les exigences et les limites du pilote CSI Cloud Storage FUSE.
- Créer le bucket Cloud Storage
- Activer le pilote CSI Cloud Storage FUSE
- Configurer l'accès aux buckets Cloud Storage
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 :
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.
Appel du pilote : lorsqu'une PersistentVolumeClaim demande un stockage correspondant à la spécification du PersistentVolume, GKE appelle le pilote CSI Cloud Storage FUSE.
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.
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
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
: utilisezgcsfuse.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.
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
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.
- Les champs
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
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 :
- NAMESPACE : espace de noms Kubernetes dans lequel vous souhaitez déployer votre pod.
- KSA_NAME : nom du compte de service Kubernetes que vous avez créé lors de la configuration de l'accès aux buckets Cloud Storage.
L'exemple de fichier manifeste montre les paramètres requis suivants :
metadata.annotations
: l'annotationgke-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.
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
- Découvrez comment optimiser les performances du pilote CSI Cloud Storage FUSE.
- Découvrez d'autres exemples d'utilisation du pilote CSI sur GitHub.
- En savoir plus sur Cloud Storage FUSE