Ce guide explique comment précharger de grandes quantités de données à partir d'un bucket Cloud Storage vers un volume Hyperdisk ML Google Kubernetes Engine (GKE) lors du provisionnement dynamique à l'aide de GKE Volume Populator. Pour en savoir plus, consultez À propos de GKE Volume Populator.
Ce guide s'adresse aux spécialistes du stockage qui créent et attribuent du stockage, et qui gèrent la sécurité et l'accès aux données. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenu Google Cloud , consultez Rôles utilisateur et tâches courantes de GKE Enterprise.
Gestion des pools de nœuds pour GKE Volume Populator avec Hyperdisk ML
Il est essentiel de dimensionner, provisionner et faire évoluer efficacement les pools de nœuds pour exécuter correctement les jobs de transfert de données créés par GKE Volume Populator afin de remplir les volumes Hyperdisk ML. Vous utilisez une classe de calcul pour définir les exigences des nœuds, telles que le type et la taille de la machine, pour ces tâches de transfert de données spécifiques. Une classe de calcul vous permet de contrôler le coût et les performances du processus de transfert de données. Pour en savoir plus, consultez Avantages des classes de calcul personnalisées.
Pour choisir le cluster le mieux adapté à vos jobs de transfert de données, découvrez comment les classes de calcul fonctionnent avec différents types de clusters pour Hyperdisk ML.
Objectifs
Dans ce guide, vous allez effectuer les tâches suivantes :
- Configurez l'environnement de votre cluster GKE pour qu'il accepte les transferts de données à l'aide de GKE Volume Populator, y compris la création de clusters, la définition de classes de calcul et la configuration des autorisations.
- Créez une ressource personnalisée
GCPDataSource
pour spécifier le bucket Cloud Storage source. - Définissez un
StorageClass
pour Hyperdisk ML. - Créez un
PersistentVolumeClaim
qui fait référence àGCPDataSource
pour déclencher le remplissage des données dans un volume Hyperdisk ML. - Vérifiez le transfert de données.
- Utilisez le volume rempli dans un pod.
- Nettoyez les ressources.
Avant de commencer
Assurez-vous d'avoir effectué les tâches suivantes :
Activez les API GKE et Cloud Storage.
Assurez-vous que la facturation est activée pour votre projetGoogle Cloud .
Téléchargez et installez l'outil de ligne de commande Google Cloud CLI, ou utilisez Cloud Shell pour exécuter les commandes
gcloud CLI
etkubectl
. Cloud Shell est un environnement shell permettant de gérer les ressources hébergées sur Google Cloud. Il est préinstallé avec les outils de ligne de commande gcloud et kubectl.Créez ou utilisez un bucket Cloud Storage. Ce guide suppose que vous disposez déjà d'un bucket Cloud Storage contenant les données d'entraînement de votre modèle.
Activez le pilote CSI de disque persistant Compute Engine sur les clusters standards existants pour lesquels le pilote peut avoir été explicitement désactivé. Sur les nouveaux clusters Autopilot et Standard, GKE active le pilote par défaut. Le stockage Hyperdisk ML de destination que vous créez doit être géré par le pilote CSI de disque persistant Compute Engine.
Activez la fédération d'identité de charge de travail pour GKE sur votre cluster. Cela permet au compte de service Kubernetes utilisé par GKE Volume Populator d'accéder au bucket Cloud Storage source. Pour en savoir plus, consultez Configurer les autorisations nécessaires.
Conditions requises
Pour transférer des données à l'aide de GKE Volume Populator, vous devez remplir les conditions suivantes :
- Votre cluster GKE doit exécuter la version
1.33.2-gke.4780000
ou ultérieure. - Votre ressource personnalisée
GCPDataSource
doit se trouver dans le même espace de noms que votre charge de travail GKE. Les sources de données qui couvrent différents espaces de noms ne sont pas acceptées. - Sélectionnez une VM compatible lorsque vous créez votre classe de calcul. Vérifiez que votre projet dispose d'un quota suffisant pour le type de machine que vous sélectionnez.
- Le nom de classe de calcul
gcs-to-hdml-compute-class
est prédéfini pour le job de transfert. Vous devez le spécifier exactement lorsque vous créez votre classe de calcul.
Coûts
Bien que l'utilisation de GKE Volume Populator ne soit pas directement payante, le stockage et les transferts de données sont facturés. Les coûts indirects associés incluent les éléments suivants :
- Instances Compute Engine utilisées par GKE : coût des nœuds utilisés pour exécuter les jobs de transfert de données. La gestion des nœuds et les implications en termes de coûts varient selon les types de clusters. Pour en savoir plus, consultez les types de clusters respectifs dans Créer votre cluster GKE.
- Taille du nœud de job de transfert : pour des performances de transfert optimales, un job de transfert augmente par défaut la taille d'un nœud avec 24 processeurs virtuels. Cela s'applique à tous les types de clusters. Si vous souhaitez ajuster la taille et le type de nœud pour des optimisations spécifiques en termes de coûts ou de performances, vous pouvez le faire lorsque vous créez votre classe de calcul.
- Stockage utilisé dans votre bucket Cloud Storage : pour en savoir plus, consultez les tarifs de Cloud Storage.
- Coûts des volumes Hyperdisk ML : ils incluent la capacité de stockage et les performances (IOPS/débit) des volumes Hyperdisk ML que vous créez. Pour en savoir plus, consultez la page Tarifs d'Hyperdisk.
Préparer votre environnement
Dans cette section, vous allez créer votre infrastructure de cluster GKE avec le matériel approprié et configurer les autorisations nécessaires pour accéder à vos données dans Cloud Storage.
Avant de créer votre cluster pour utiliser GKE Volume Populator avec Hyperdisk ML, comprenez comment une classe de calcul est appliquée à différents types de clusters et qui est responsable de la gestion des nœuds (GKE ou vous).
Fonctionnement des classes de calcul avec différents types de clusters pour Hyperdisk ML
GKE Volume Populator utilise une classe de calcul personnalisée pour déterminer les types de nœuds à utiliser pour les jobs de transfert de données. Le tableau suivant décrit le comportement de votre classe de calcul en fonction de la configuration de votre cluster :
Considération | GKE Autopilot et GKE Standard avec le provisionnement automatique des nœuds | GKE Standard sans provisionnement automatique des nœuds |
---|---|---|
Paramètre de classe de calcul | nodePoolAutoCreation activé |
nodePoolAutoCreation désactivé |
Gestion des nœuds | GKE crée et gère automatiquement les nœuds. | Vous créez et gérez manuellement les nœuds. |
Scaling des nœuds | Automatique | Manuel |
Libellés des nœuds | Non applicable | Vous devez attribuer le libellé cloud.google.com/compute-class=gcs-to-hdml-compute-class aux nœuds. |
En savoir plus | Provisionnement automatique des nœuds et classes de calcul | Configurer des pools de nœuds créés manuellement |
GKE lance le job de transfert de données après avoir provisionné le PersistentVolume
pour PersistentVolumeClaim
. Pour remplir le volume Hyperdisk ML, ce PersistentVolumeClaim
doit faire référence à GCPDataSource
, qui définit les données sources dans Cloud Storage.
Créer votre cluster GKE
Vous pouvez choisir de déployer votre pipeline de transfert de données à l'aide d'un cluster Standard ou Autopilot avec GKE version 1.33.2-gke.4780000
ou ultérieure. Chaque type de cluster présente ses propres avantages et différents modèles de tarification.
- Choisissez Autopilot pour une gestion plus facile des clusters, une meilleure rentabilité et l'autoscaling.
- Choisissez Standard avec provisionnement automatique des nœuds activé si vous avez besoin de l'autoscaling avec un contrôle plus précis du provisionnement des nœuds.
- Choisissez le mode Standard sans provisionnement automatique des nœuds activé si vous avez besoin d'un contrôle maximal et que vous êtes à l'aise avec la gestion de tous les aspects du provisionnement, du scaling et de la maintenance des nœuds.
Autopilot
Dans les clusters GKE Autopilot, GKE gère automatiquement la création et la suppression des nœuds requis pour les jobs de transfert de données. Une fois le job de transfert terminé, les ressources de nœud sont automatiquement réduites. Vous n'avez pas besoin de supprimer manuellement les pods de transfert ni les nœuds sur lesquels ils s'exécutaient.
Pour créer un cluster Autopilot, exécutez la commande suivante :
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --cluster-version=CLUSTER_VERSION
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster que vous créez.LOCATION
: région de calcul de votre cluster. Exemple :us-central1
CLUSTER_VERSION
: version de GKE pour le cluster. Utilisez1.33.2-gke.4780000
dans ce guide.
Standard (avec provisionnement automatique des nœuds)
Dans les clusters GKE Standard avec le provisionnement automatique de nœuds activé, GKE gère automatiquement la création et la suppression des nœuds requis pour les jobs de transfert de données. Une fois le job de transfert terminé, les ressources de nœud sont automatiquement réduites. Vous n'avez pas besoin de supprimer manuellement les pods de transfert ni les nœuds sur lesquels ils s'exécutaient.
Pour créer un cluster Standard avec le provisionnement automatique des nœuds activé, exécutez la commande suivante :
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=LOCATION \ --project=PROJECT_ID \ --workload-pool=PROJECT_ID.svc.id.goog \ --enable-autoprovisioning \ --min-cpu MINIMUM_CPU \ --min-memory MINIMUM_MEMORY \ --max-cpu MAXIMUM_CPU \ --max-memory MAXIMUM_MEMORY \ --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster que vous créez avec le provisionnement automatique des nœuds activé.CLUSTER_VERSION
: version de GKE pour le cluster. Utilisez1.33.2-gke.4780000
dans ce guide.LOCATION
: zone ou région de calcul de votre cluster. Par exemple,us-central1-a
ouus-central1
.PROJECT_ID
: ID de votre projet Google Cloud .MINIMUM_CPU
: nombre minimal de processeurs virtuels à provisionner automatiquement. Exemple :10
MINIMUM_MEMORY
: quantité minimale de mémoire en Gio pour le provisionnement automatique. Exemple :200
MAXIMUM_CPU
: nombre maximal de processeurs virtuels à provisionner automatiquement. Exemple :100
Cette limite correspond au total des ressources de processeur de tous les pools de nœuds existants créés manuellement et de tous les pools de nœuds que GKE peut créer automatiquement.MAXIMUM_MEMORY
: quantité maximale de mémoire à provisionner automatiquement. Exemple :1000
Cette limite correspond au total des ressources mémoire de tous les pools de nœuds existants créés manuellement et de tous les pools de nœuds que GKE peut créer automatiquement.
Standard (sans provisionnement automatique des nœuds)
Pour utiliser GKE Volume Populator sur un cluster Standard où le provisionnement automatique des nœuds n'est pas activé, vous pouvez utiliser un pool de nœuds existant ou créer un pool de nœuds de transfert dédié. Les nœuds doivent avoir la capacité d'exécuter les tâches de transfert et les libellés correspondant à compute-class
.
Spécifiez la classe de calcul gcs-to-hdml-compute-class
en tant qu'étiquette de nœud lorsque vous créez votre cluster et votre pool de nœuds. Notez que le nom de la classe de calcul, gcs-to-hdml-compute-class
, est prédéfini pour le job de transfert et doit être spécifié exactement.
Pour créer un cluster Standard sans provisionnement automatique des nœuds et un pool de nœuds dans ce cluster, exécutez les commandes suivantes :
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=LOCATION \ --num-nodes=1 \ --project=PROJECT_ID \ --workload-pool=PROJECT_ID.svc.id.goog gcloud container node-pools create NODE_POOL_NAME\ --cluster=CLUSTER_NAME \ --location=LOCATION \ --num-nodes=1 \ --machine-type=c3-standard-44 \ --node-labels="cloud.google.com/compute-class=gcs-to-hdml-compute-class" \ --node-taints="cloud.google.com/compute-class=gcs-to-hdml-compute-class:NoSchedule"
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster que vous créez sans provisionnement automatique des nœuds activé.CLUSTER_VERSION
: version de GKE pour le cluster. Utilisez1.33.2-gke.4780000
dans ce guide.LOCATION
: région de calcul de votre cluster. Par exemple,us-central1-a
ouus-central1
.PROJECT_ID
par l'ID de votre projet Google Cloud .NODE_POOL_NAME
: nom du pool de nœuds que vous créez dans votre nouveau cluster. Ce pool de nœuds est utilisé par GKE Volume Populator pour déployer les tâches de transfert de données temporaires.
Pour éviter des coûts inutiles, exécutez la commande gcloud container node-pools delete
afin de supprimer les pools de nœuds de transfert créés manuellement une fois le transfert de données terminé.
Créer votre classe de calcul
Pour créer une classe de calcul permettant de spécifier et de hiérarchiser les types de VM pouvant être utilisés comme nœuds dans votre cluster, procédez comme suit :
- Enregistrez le manifeste suivant sous le nom
computeclass.yaml
:Avec le provisionnement automatique des nœuds
Pour les clusters Autopilot et les clusters Standard avec provisionnement automatique des nœuds activé, définissez votre classe de calcul avec la section
nodePoolAutoCreation
comme suit. Lorsque le provisionnement automatique des nœuds est activé, GKE crée automatiquement des pools de nœuds avec le libellé de classe de calculgcs-to-hdml-compute-class
.apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: gcs-to-hdml-compute-class spec: priorities: - machineFamily: c3 - machineFamily: c3d nodePoolAutoCreation: enabled: true whenUnsatisfiable: DoNotScaleUp
Sans provisionnement automatique des nœuds
Pour les clusters Standard sans provisionnement automatique des nœuds activé, définissez votre classe de calcul sans la section
nodePoolAutoCreation
comme suit. Assurez-vous d'avoir déjà créé un pool de nœuds avec le libellé de classe de calculgcs-to-hdml-compute-class
.apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: gcs-to-hdml-compute-class spec: priorities: - machineFamily: c3 - machineFamily: c3d whenUnsatisfiable: DoNotScaleUp
Vous pouvez spécifier n'importe quel
machineFamily
compatible pour répondre à vos besoins de transfert de données. Pour en savoir plus sur la sélection d'un type de machine approprié, consultez Compatibilité des séries de machines avec Hyperdisk ML. - Pour créer la classe de calcul, appliquez le fichier manifeste :
kubectl apply -f computeclass.yaml
Configurer les autorisations nécessaires
Pour transférer des données depuis un bucket Cloud Storage, configurez les autorisations requises pour la fédération d'identité de charge de travail pour GKE. Avec les autorisations appropriées, le job de transfert créé par GKE Volume Populator peut accéder à votre bucket Cloud Storage. Ce guide suppose que vous disposez déjà d'un bucket Cloud Storage contenant les données d'entraînement du modèle que vous souhaitez transférer.
Créez un espace de noms Kubernetes :
kubectl create namespace NAMESPACE
Remplacez
NAMESPACE
par l'espace de noms sur lequel vous souhaitez que vos charges de travail s'exécutent.Ignorez cette étape si vous utilisez un espace de noms existant.
Créez un compte de service Kubernetes :
kubectl create serviceaccount KSA_NAME \ --namespace=NAMESPACE
Remplacez les éléments suivants :
KSA_NAME
: nom du compte de service Kubernetes que vous spécifierez dans la ressourceGCPDataSource
. Le job de transfert créé par GKE Volume Populator utilise ce compte de service pour s'authentifier auprès des API Google Cloud .NAMESPACE
: espace de noms Kubernetes que vous avez créé à l'étape précédente.
Accordez à votre compte de service IAM le rôle approprié pour accéder à votre bucket Cloud Storage :
gcloud storage buckets \ add-iam-policy-binding gs://GCS_BUCKET \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE"
Remplacez les éléments suivants :
GCS_BUCKET
: nom de votre bucket Cloud Storage.PROJECT_NUMBER
: identifiant numérique de votre projet Google Cloud dans lequel vous avez créé le cluster. Pour trouver votre numéro de projet, consultez Identifier des projets.PROJECT_ID
: ID de votre projet Google Cloud .NAMESPACE
: espace de noms que vous avez créé précédemment et dans lequel vos charges de travail seront exécutées.KSA_NAME
: nom du compte de service Kubernetes que vous avez spécifié dans la ressourceGCPDataSource
. Le job de transfert créé par GKE Volume Populator utilise ce compte de service pour s'authentifier auprès des API Google Cloud .ROLE
: rôle IAM à attribuer à votre compte de service. Pour les besoins de ce guide, accordez le rôleroles/storage.objectViewer
pour autoriser la lecture à partir du bucket.
PROJECT_NUMBER
,PROJECT_ID
,NAMESPACE
etKSA_NAME
sont utilisés pour construire l'identifiant principal de la fédération d'identité de charge de travail pour GKE pour votre projet.
Créer un volume Hyperdisk ML avec des données préchargées
Suivez les étapes ci-dessous pour configurer l'infrastructure et la configuration GKE requises pour créer un volume Hyperdisk ML, et pour déclencher et gérer le processus de transfert de données automatisé à l'aide de GKE Volume Populator :
- Créez une ressource personnalisée
GCPDataSource
pour définir la source des données. - Créez une StorageClass pour définir le type de stockage persistant à utiliser (un volume Hyperdisk ML).
- Créez un PersistentVolumeClaim pour activer le provisionnement dynamique du stockage et l'accès au volume Hyperdisk ML nouvellement provisionné.
- (Facultatif) Consultez la progression du transfert de données.
- Créez et déployez un pod qui utilise le volume Hyperdisk ML.
Créer une ressource personnalisée GCPDataSource
Créez une ressource personnalisée GCPDataSource
dans GKE pour spécifier l'emplacement du bucket Cloud Storage source et le compte de service disposant des autorisations nécessaires pour accéder à ce bucket. Cette définition de ressource personnalisée (CRD) est spécifique au Volume Populator GKE.
Enregistrez le fichier manifeste suivant sous le nom
gcpdatasource.yaml
.apiVersion: datalayer.gke.io/v1 kind: GCPDataSource metadata: name: GCP_DATA_SOURCE namespace: NAMESPACE spec: cloudStorage: serviceAccountName: KSA_NAME uri: gs://GCS_BUCKET/
Remplacez les valeurs suivantes :
- GCP_DATA_SOURCE : nom du CRD
GCPDataSource
qui contient une référence à votre bucket Cloud Storage. Pour en savoir plus, consultez la documentation de référence sur les CRDGCPDataSource
. - NAMESPACE : le même espace de noms dans lequel vos charges de travail sont exécutées. La ressource personnalisée
GCPDataSource
est créée dans cet espace de noms. - KSA_NAME : nom du compte de service Kubernetes que vous avez spécifié dans la ressource
GCPDataSource
. Le job de transfert créé par GKE Volume Populator utilise ce compte de service pour s'authentifier auprès des API Google Cloud . La valeurcloudStorage.serviceAccountName
correspond au compte de service Kubernetes que vous avez configuré pour la fédération d'identité de charge de travail pour GKE dans la section Configurer les autorisations nécessaires. - GCS_BUCKET : nom de votre bucket Cloud Storage. Le champ
uri
spécifie les données sources.- Pour copier l'intégralité du bucket, utilisez
gs://GCS_BUCKET/
. - Pour copier des données à partir d'un dossier spécifique du bucket, utilisez le format
gs://GCS_BUCKET/PATH_INSIDE_BUCKET/
. Par exemple, pour copier des données du dossiergemma/v1.0/weights/
dans le bucketmy-project-llm-models
, l'URI seraitgs://my-project-llm-models/gemma/v1.0/weights/
. Assurez-vous que le chemin d'accès se termine par une barre oblique pour indiquer un dossier.
- Pour copier l'intégralité du bucket, utilisez
- GCP_DATA_SOURCE : nom du CRD
Pour créer la ressource
GCPDataSource
, appliquez le manifeste :kubectl apply -f gcpdatasource.yaml
Créer une StorageClass Hyperdisk ML
Créez une StorageClass qui utilise l'approvisionneur pd.csi.storage.gke.io pour provisionner un volume Hyperdisk ML dans la zone de votre choix. Si vous souhaitez que des copies de vos données soient accessibles dans plusieurs zones, vous pouvez créer une StorageClass multizone. Voici un exemple de StorageClass multizone.
Enregistrez le fichier manifeste suivant sous le nom
hdml-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hyperdisk-ml-single-zone parameters: type: hyperdisk-ml provisioned-throughput-on-create: "2400Mi" provisioner: pd.csi.storage.gke.io allowVolumeExpansion: false reclaimPolicy: Delete volumeBindingMode: Immediate allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE
Remplacez
ZONE
par la zone cible dans laquelle vous souhaitez créer le volume Hyperdisk ML :- Pour un cluster GKE Standard sans provisionnement automatique des nœuds, la valeur de
ZONE
doit correspondre à l'emplacement où vous avez créé vos nœuds. - Pour les clusters GKE Autopilot ou Standard avec provisionnement automatique de nœuds, la valeur de
ZONE
doit correspondre à l'emplacement où votre cluster peut évoluer et créer des nœuds si nécessaire.
- Pour un cluster GKE Standard sans provisionnement automatique des nœuds, la valeur de
(Facultatif) Pour lister les emplacements des nœuds de votre cluster, exécutez la commande suivante :
gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(locations)"
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterLOCATION
: zone ou région de calcul de votre cluster. Par exemple,us-central1-a
ouus-central1
.
Pour créer la StorageClass, appliquez le fichier manifeste :
kubectl apply -f hdml-class.yaml
Créer un PersistentVolumeClaim pour accéder au volume
Le manifeste suivant montre un exemple de création d'un PersistentVolumeClaim en mode d'accès ReadOnlyMany qui référence la StorageClass que vous avez créée précédemment.
Enregistrez le manifeste suivant sous le nom
volume-populator-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: PVC_NAME namespace: NAMESPACE spec: accessModes: - ReadOnlyMany storageClassName: hyperdisk-ml-single-zone resources: requests: storage: DISK_SIZE dataSourceRef: apiGroup: datalayer.gke.io kind: GCPDataSource name: GCP_DATA_SOURCE
Remplacez les valeurs suivantes :
PVC_NAME
: nom du PersistentVolumeClaim vers lequel vous souhaitez transférer vos données.NAMESPACE
: espace de noms dans lequel vos charges de travail seront exécutées.DISK_SIZE
: taille du disque, en gigaoctets, qui sera créé pour remplir les données. Pour que les données soient correctement insérées, assurez-vous que la taille de disque demandée est supérieure à la taille des données de votre modèle dans le bucket Cloud Storage. Pour respecter la plage acceptée pour les volumes Hyperdisk ML, la valeur deDISK_SIZE
doit être supérieure à 4 Gi. Pour en savoir plus, consultez Limites de taille des volumes Hyperdisk.GCP_DATA_SOURCE
: nom du CRDGCPDataSource
qui contient une référence à votre bucket Cloud Storage.
Vous pouvez personnaliser le transfert de données en ajoutant des annotations facultatives à votre PVC. Ces annotations influencent le comportement du job de transfert sous-jacent qui copie les données dans votre volume Hyperdisk ML.
volume-populator.datalayer.gke.io/cpu-request
: utilisez cette annotation pour spécifier une autre demande de ressources de processeur pour le transfertJob
. Si vous ne spécifiez pas de demande de ressources de processeur différente, le PVC demande 24 vCPU par défaut pour optimiser les performances de transfert.volume-populator.datalayer.gke.io/transfer-path
: utilisez cette annotation pour spécifier le chemin de destination dans le nouveau volume qui stockera les données copiées à partir de votre ressourceGCPDataSource
. Si vous ne spécifiez pas un autre chemin, les données sont copiées dans le chemin racine du volume Hyperdisk ML.
Pour créer le PVC, appliquez le fichier manifeste :
kubectl apply -f volume-populator-pvc.yaml
Notez les points suivants :
- Si vous définissez le champ
volumeBindingMode
de votre StorageClass surimmediate
, le transfert de données est déclenché immédiatement lors du déploiement du PVC. - Si vous définissez le champ
volumeBindingMode
de votre StorageClass surWaitForFirstConsumer
, le transfert de données n'est déclenché qu'après le déploiement d'un pod qui demande la PVC et que ce pod est correctement planifié sur un nœud. Bien que votre pod puisse être planifié, ses conteneurs attendront que le transfert de données soit terminé et que le volume soit prêt à l'emploi avant de démarrer.
Pour vérifier la progression de votre transfert de données, consultez Afficher la progression du transfert de données. Si vous rencontrez des erreurs lors du provisionnement des ressources ou du transfert de données, consultez Résoudre les problèmes de transfert de données liés à GKE Volume Populator.
(Facultatif) Afficher la progression du transfert de données
Cette section explique comment suivre la progression et la réussite de vos transferts de données d'un bucket Cloud Storage vers un volume Hyperdisk ML.
Pour vérifier l'état de votre PersistentVolumeClaim, exécutez la commande suivante. Vous pouvez également exécuter cette commande si l'opération de liaison PersistentVolumeClaim prend trop de temps.
kubectl describe pvc PVC_NAME -n NAMESPACE
Remplacez les éléments suivants :
PVC_NAME
: nom de votre PVC que vous avez créé dans la section Créer un PersistentVolumeClaim pour accéder au volume.NAMESPACE
: espace de noms utilisé tout au long de ce guide, que vous avez créé dans la section Configurer les autorisations nécessaires.
Dans le résultat, examinez les événements PersistentVolumeClaim pour surveiller la progression du transfert de données. GKE consigne les événements environ une fois par minute. Le résultat ressemble à ce qui suit :
Name: vp-pvc Namespace: default StorageClass: hyperdisk-ml-single-zone Status: Bound Volume: pvc-f7ae2ee2-106d-4b87-b458-481a3ff82b62 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io volume.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io Finalizers: [kubernetes.io/pvc-protection] Capacity: 200Gi Access Modes: ROX VolumeMode: Filesystem DataSource: APIGroup: datalayer.gke.io Kind: GCPDataSource Name: vp-gds Used By: verify-data-665cfd4dbf-mwc7t verify-data-665cfd4dbf-n7xw9 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 9m8s persistentvolume-controller Error saving claim: Operation cannot be fulfilled on persistentvolumeclaims "vp-pvc": the object has been modified; please apply your changes to the latest version and try again Normal Provisioning 9m5s pd.csi.storage.gke.io_gke-f110123a1cbd44cdaa7a-921b-b1f4-vm_1a100bd9-5231-4f20-8e65-1f8e995a03c0 External provisioner is provisioning volume for claim "default/vp-pvc" Normal Provisioning 9m5s external-provisioner Assuming an external populator will provision the volume Normal PopulateOperationStartSuccess 8m58s gkevolumepopulator-populator populateFn: Populate operation started for zone us-central1-c Normal TransferInProgress 8m58s (x2 over 8m58s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f in zone us-central1-c waiting for pod to get created Normal TransferInProgress 6m10s (x14 over 8m57s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job in zone us-central1-c with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f is still active with pod status as - Phase: Pending Normal ExternalProvisioning 3m35s (x24 over 9m5s) persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'pd.csi.storage.gke.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. Normal TransferJobCompleted 3m24s (x2 over 3m26s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, job with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f for zone us-central1-c completed successfully Normal TransferJobCompleted 3m24s (x2 over 3m26s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job for all zones have completed successfully Normal PopulateOperationFinished 3m24s (x2 over 3m26s) gkevolumepopulator-populator Populate operation finished Normal PopulatorFinished 3m19s (x3 over 3m20s) gkevolumepopulator-populator Populator finished
L'opération de remplissage peut prendre plusieurs minutes, en fonction de la taille des données. Si aucune progression du transfert de données ne s'affiche après plusieurs minutes, consultez Dépannage des problèmes de transfert de données liés à GKE Volume Populator pour obtenir de l'aide.
Pour les transferts de données de volumes Hyperdisk ML multizones, la tâche n'est marquée comme terminée que si les données sont transférées avec succès vers toutes les zones spécifiées dans la StorageClass. Si le transfert échoue pour une ou plusieurs zones, le GKE Volume Populator tente de transférer les données indéfiniment tant que le PVC existe.
Créer et déployer un pod qui consomme le volume
Pour créer un pod permettant de vérifier le contenu d'un PVC qui a été rempli de données :
Enregistrez le manifeste suivant sous le nom
verify-data.yaml
:apiVersion: v1 kind: Pod metadata: name: verify-data namespace: NAMESPACE spec: nodeSelector: cloud.google.com/compute-class: gcs-to-hdml-compute-class containers: - name: verify-data image: busybox command: - sleep - infinity volumeMounts: - mountPath: /models name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: PVC_NAME
Remplacez les éléments suivants :
NAMESPACE
: espace de noms dans lequel se trouve votre PVC et dans lequel vous souhaitez créer le podverify-data
.PVC_NAME
: nom du PVC que vous avez créé pour le remplissage des données dans la section Créer un PersistentVolumeClaim pour accéder au volume.
Créez le pod à l'aide de la commande suivante :
kubectl create -f verify-data.yaml
Pour lister les fichiers, exécutez la commande suivante :
kubectl exec -it verify-data -- /bin/sh # cd /models && ls
Si la commande aboutit, vous trouverez les données renseignées dans le répertoire /models
de votre bucket Cloud Storage.
Effectuer un nettoyage
Pour éviter des coûts inutiles et supprimer les ressources mal configurées ou orphelines, suivez les étapes permettant de supprimer correctement le PersistentVolumeClaim.
Supprimer la PersistentVolumeClaim lors du provisionnement dynamique
Si vous devez supprimer votre PersistentVolumeClaim alors que des données sont encore en cours de transfert lors du provisionnement dynamique, suivez les étapes ci-dessous pour une suppression progressive. La suppression progressive peut prendre un certain temps.
Remplacez les variables pertinentes suivantes lors du processus de suppression :
POD_NAME
: nom du pod que vous avez créé dans la section Créer et déployer un pod qui consomme le volume.NAMESPACE
: espace de noms où se trouve votre PVC.PVC_NAME
: nom du PVC que vous avez créé dans la section Créer un PersistentVolumeClaim pour accéder au volume.GCP_DATA_SOURCE
: nom de la ressource personnaliséeGCPDataSource
que vous avez créée dans la section Créer une ressource personnaliséeGCPDataSource
.
Supprimez le pod de charge de travail :
kubectl delete pod POD_NAME -n NAMESPACE
Recherchez le nom de l'objet PersistentVolumeClaim temporaire :
# Store the relevant environment variables export PVC_NAME=PVC_NAME export NAMESPACE=NAMESPACE
# Check the status export PVC_UID=$(kubectl get pvc ${PVC_NAME} -n ${NAMESPACE} -o jsonpath='{.metadata.uid}') export TEMP_PVC=prime-${PVC_UID} echo ${TEMP_PVC}
Supprimez le PVC créé dans l'espace de noms :
kubectl delete pvc PVC_NAME -n NAMESPACE
Le PVC est peut-être bloqué dans l'état
Terminating
:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE vp-pvc Terminating hyperdisk-ml <unset> 7m23s
Si c'est le cas, nettoyez manuellement le PVC en supprimant ses finaliseurs :
kubectl patch pvc PVC_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
Ne supprimez la ressource
GCPDataSource
qu'une fois la PVC supprimée. Si vous supprimez d'abord la ressourceGCPDataSource
, la suppression du PVC sera bloquée.kubectl delete gcpdatasource GCP_DATA_SOURCE -n NAMESPACE
Vérifiez que les ressources temporaires ont été supprimées.
Étapes suivantes
- En savoir plus sur GKE Volume Populator
- Pour obtenir de l'aide concernant les problèmes de transfert de données, consultez Résoudre les problèmes de transfert de données liés à GKE Volume Populator.
- Pour obtenir un exemple avancé de charge de travail Hyperdisk ML, consultez Accélérer le chargement des données d'IA/ML avec Hyperdisk ML.