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:
- Découvrez les conditions requises 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 basé sur un bucket Cloud Storage implique les opérations suivantes:
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.
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.
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.
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
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
: 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 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.
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 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.
- 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" 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 :
- 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 présente les paramètres obligatoires 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 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.
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
- Découvrez comment optimiser les performances du pilote CSI Cloud Storage FUSE.
- Consultez d'autres exemples d'utilisation du pilote CSI sur GitHub.
- En savoir plus sur Cloud Storage FUSE