Transférer des données vers ou depuis Cloud Storage

Google Cloud Managed Lustre peut importer des données depuis Cloud Storage et en exporter vers Cloud Storage. Les transferts de données sont incrémentiels : ils ne copient que les fichiers qui n'existent pas déjà dans la destination ou qui ont été modifiés depuis leur transfert.

Les buckets Cloud Storage avec l'espace de noms hiérarchique activé offrent des vitesses de transfert plus rapides vers et depuis Managed Lustre que les buckets standards.

Performances

Les transferts entre Managed Lustre et Cloud Storage peuvent atteindre les vitesses suivantes :

  • Pour les fichiers de plus de 32 Mo, jusqu'à 100 Gbit/s. La vitesse de transfert est limitée par le débit maximal d'une instance (capacité de l'instance multipliée par le niveau de performances).

Considérations sur la bande passante de sortie Cloud Storage

Cloud Storage fournit une bande passante de sortie par défaut allant jusqu'à 200 Gbit/s par région et par projet. Si vous disposez de plusieurs instances Managed Lustre dans le même projet et la même région, vous pouvez demander une augmentation de la limite de bande passante de sortie. Pour en savoir plus, consultez les quotas de bande passante Cloud Storage.

Autorisations requises

Autorisations pour lancer le transfert

Le compte utilisateur ou le compte de service utilisé pour lancer le transfert nécessite les autorisations suivantes :

  • lustre.instances.exportData pour transférer des données de Managed Lustre vers Cloud Storage.
  • lustre.instances.importData pour transférer des données depuis Cloud Storage.

Ces deux autorisations sont accordées avec le rôle roles/lustre.admin. Vous pouvez créer un rôle personnalisé pour accorder des autorisations indépendamment.

Autorisations pour l'agent de service Managed Lustre

Managed Lustre utilise un agent de service pour accéder aux buckets Cloud Storage en votre nom. Pour effectuer des transferts, vous devez accorder à l'agent de service l'accès au bucket cible.

Si vous ne connaissez pas l'identité de l'agent de service de votre projet, consultez Créer ou récupérer l'identité de l'agent de service.

Octroyer des autorisations

L'agent de service Managed Lustre nécessite l'un des rôles Cloud Storage suivants :

  • Pour transférer des données vers et depuis Cloud Storage : roles/storage.objectUser sur le bucket Cloud Storage.
  • Pour transférer des données uniquement depuis Cloud Storage : roles/storage.objectViewer sur le bucket Cloud Storage.

Pour accorder l'un de ces rôles :

Importation et exportation

Exécutez la commande gcloud suivante :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectUser

Importation uniquement

Exécutez la commande gcloud suivante :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member=serviceAccount:SERVICE_AGENT_IDENTITY \
  --role=roles/storage.objectViewer

Remplacez les éléments suivants :

  • BUCKET_NAME : nom du bucket Cloud Storage.
  • SERVICE_AGENT_IDENTITY : identité de l'agent de service Managed Lustre (service-<var>PROJECT_NUMBER</var>@gcp-sa-lustre.iam.gserviceaccount.com).

Importer des données dans Managed Lustre

Vous pouvez importer des données depuis un bucket Cloud Storage. Le bucket peut se trouver dans le même projet ou dans un autre. Il peut se trouver dans une zone ou une région différente de votre instance Managed Lustre, mais les transferts interrégionaux
peuvent être plus lents que les transferts intrarégionaux.

gcloud

gcloud lustre instances import-data INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri=gs://BUCKET_NAME/ \
  --lustre-path=PS_PATH

Où :

  • INSTANCE_ID correspond au nom de votre instance Managed Lustre.
  • --location correspond à la zone de votre instance Managed Lustre. Exemple : us-central1-a.
  • --gcs-path-uri spécifie l'URI d'un bucket Cloud Storage, ou un chemin d'accès dans un bucket, au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • --lustre-path spécifie le chemin d'accès au répertoire racine du système de fichiers Managed Lustre. Il doit commencer par /. La valeur par défaut est /. Si vous spécifiez une valeur autre que celle par défaut, le répertoire doit déjà exister dans le système de fichiers.

Les paramètres ci-dessous sont facultatifs :

  • --request-id vous permet d'attribuer un ID unique à cette requête. Si vous réessayez cette requête avec le même ID de requête, le serveur l'ignore si elle a déjà été traitée. Il doit s'agir d'un valide UUID qui ne contient pas que des zéros.
  • --async renvoie une réponse immédiatement, sans attendre la fin de l'opération.

Pour en savoir plus, consultez la documentation du Cloud SDK.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  },
  "lustrePath" : {
    "path" : "/PATH"
  }
}

Où :

  • PROJECT_ID correspond au nom de votre Google Cloud projet.
  • LOCATION correspond à la zone de votre instance Managed Lustre. Exemple : us-central1-a.
  • INSTANCE_ID correspond au nom de votre instance Managed Lustre.
  • gcsPath contient une clé uri dont la valeur spécifie l' URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • lustrePath contient une clé path dont la valeur spécifie le chemin d'accès au répertoire racine du système de fichiers Managed Lustre. Il doit commencer par /. La valeur par défaut est /. Si vous spécifiez une valeur autre que celle par défaut, le répertoire doit déjà exister dans le système de fichiers.

Pour utiliser votre propre compte de service au lieu de l'agent de service géré par Google, la requête accepte un champ serviceAccount dans l'objet JSON :

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
  -d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'

Attributs de fichier

Lorsque vous importez des données d'un bucket Cloud Storage vers une instance Managed Lustre, les attributs de fichier de l'instance Managed Lustre sont définis de deux manières :

  • Si l'objet Cloud Storage comporte des métadonnées personnalisées, comme décrit pour l'exportation de données :
    • L'UID, le GID, le mode et le mtime du fichier sont définis en fonction des métadonnées personnalisées de l'objet.
    • Le atime du fichier est défini sur la même valeur que le mtime.
  • Si l'objet Cloud Storage ne comporte pas de métadonnées personnalisées :
    • L'UID et le GID du fichier sont définis sur 0 (root).
    • Le mode du fichier est défini sur rwxr-xr-x (755).
    • Le atime et le mtime du fichier sont définis sur l'heure de création de l'objet Cloud Storage.

Dans les deux cas :

  • Le ctime d'un fichier est défini sur l'heure à laquelle le fichier a été écrit dans l'instance.
  • Le atime, le ctime et le mtime d'un répertoire sont définis sur l'heure à laquelle le répertoire a été créé dans l'instance.

Exporter les données

Vous pouvez exporter des données de votre instance Managed Lustre vers un bucket Cloud Storage dans le même projet ou dans un autre. Le bucket peut se trouver dans une zone ou une région différente de votre instance Managed Lustre, mais les transferts interrégionaux peuvent être plus lents que les transferts intrarégionaux.

gcloud

gcloud lustre instances export-data \
  INSTANCE_ID \
  --location=LOCATION \
  --gcs-path-uri="gs://BUCKET_NAME/" \
  --lustre-path="/"

Où :

  • INSTANCE_ID correspond au nom de votre instance Managed Lustre.
  • --location correspond à la zone de votre instance Managed Lustre. Exemple : us-central1-a.
  • --gcs-path-uri spécifie l'URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).
  • --lustre-path spécifie le chemin d'accès au répertoire racine du système de fichiers Managed Lustre. Il doit commencer par /. La valeur par défaut est /.

Les paramètres ci-dessous sont facultatifs :

  • --request-id vous permet d'attribuer un ID unique à cette requête. Si vous réessayez cette requête avec le même ID de requête, le serveur l'ignore si elle a déjà été traitée. Il doit s'agir d'un valide UUID qui ne contient pas que des zéros.
  • --async renvoie une réponse immédiatement, sans attendre la fin de l'opération.

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]

{
  "lustrePath" : {
    "path" : "/"
  },
  "gcsPath" : {
    "uri" : "gs://BUCKET_NAME/"
  }
}

Où :

  • PROJECT_ID correspond au nom de votre Google Cloud projet.
  • INSTANCE_ID correspond au nom de votre instance Managed Lustre.
  • LOCATION correspond à la zone de votre instance Managed Lustre. Exemple : us-central1-a.
  • lustrePath contient une clé path dont la valeur spécifie le chemin d'accès au répertoire racine du système de fichiers Managed Lustre. Il doit commencer par /. La valeur par défaut est /.
  • gcsPath contient une clé uri dont la valeur spécifie l' URI d'un bucket Cloud Storage ou un chemin d'accès dans un bucket au format gs://<bucket_name>/<optional_path_inside_bucket>/. Si un chemin d'accès dans le bucket est spécifié, il doit se terminer par une barre oblique (/).

Pour utiliser votre propre compte de service au lieu de l'agent de service géré par Google, la requête accepte un champ serviceAccount dans l'objet JSON :

"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json"
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
  -d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'

Attributs de fichier

Lorsque vous exportez des données d'une instance Managed Lustre vers un bucket Cloud Storage, les attributs de fichier suivants sont conservés en tant que métadonnées personnalisées dans Cloud Storage :

  • L'UID du fichier est stocké avec la clé goog-reserved-posix-uid.
  • Le GID du fichier est stocké avec la clé goog-reserved-posix-gid.
  • Le mode numérique du fichier est stocké avec la clé goog-reserved-posix-mode.
  • Le mtime du fichier est stocké avec la clé goog-reserved-file-mtime.

Ces noms de clés de métadonnées personnalisées sont identiques à ceux utilisés par le service de transfert de stockage pour les transferts avec des systèmes de fichiers POSIX.

Les attributs de fichier suivants ne sont pas conservés :

  • Les liens symboliques ne sont pas conservés.
  • Les liens physiques sont exportés en tant qu'objets Cloud Storage distincts, ce qui génère plusieurs copies.
  • Le striping Lustre défini explicitement à l'aide de lfs setstripe ou lfs setdirstripe n'est pas conservé.
  • Le atime et le ctime des fichiers ne sont pas conservés.
  • Le mtime des répertoires n'est pas conservé.
  • Les répertoires vides ne sont pas conservés.

Opération Get

Pour afficher l'état d'une opération d'importation ou d'exportation, vous avez besoin de l'ID de l'opération. Cet ID est renvoyé par le service lorsque vous effectuez une requête d'importation ou d'exportation, et utilise le format suivant :

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

REST

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]

Voici un exemple de commande curl :

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

Annuler l'opération

Pour annuler une opération d'importation ou d'exportation, vous avez besoin de l'ID de l'opération. Cet ID est renvoyé par le service lorsque vous effectuez une requête d'importation ou d'exportation, et utilise le format suivant :

  • operation-1234567890123-6127783ad26ea-88913969-02748053

gcloud

gcloud lustre operations cancel OPERATION_ID \
  --location=LOCATION

REST

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]

Voici un exemple de commande curl :

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel

Limites

Les limites suivantes s'appliquent :

  • Une seule opération de transfert par instance peut être active à la fois. Si vous démarrez un deuxième transfert avant la fin du premier, l'erreur suivante s'affiche :

    ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
    

Dépannage

Lorsque vous importez des données depuis Cloud Storage ou que vous en exportez vers Cloud Storage, vous pouvez rencontrer des blocages de transfert, des problèmes d'autorisation ou des fichiers ignorés. Suivez ces étapes pour diagnostiquer et résoudre les problèmes courants de transfert de données.

Blocages de transfert ou vitesses de sortie lentes

Si une opération d'importation ou d'exportation se bloque ou s'exécute beaucoup plus lentement que prévu, vérifiez les points suivants :

  • Limites de bande passante de sortie Cloud Storage : Cloud Storage applique un quota de bande passante de sortie par défaut allant jusqu'à 200 Gbit/s par région et par projet. Si plusieurs instances ou charges de travail à haut débit transfèrent des données simultanément, vous risquez d'être limité par ce quota. Consultez les quotas de bande passante Cloud Storage pour demander une augmentation de quota.
  • Limites de débit de l'instance : les vitesses de transfert sont limitées par la capacité de débit maximale de votre instance (capacité de l'instance multipliée par son niveau de performances). Vérifiez le niveau de performances de votre instance pour vous assurer qu'il correspond à vos attentes en termes de performances.

Erreurs d'autorisation lors du lancement du transfert

Si le lancement d'un transfert échoue avec une erreur d'autorisation refusée, vérifiez les rôles IAM suivants :

  • Autorisations de l'utilisateur et du compte de service : l'identité qui lance la commande de transfert doit disposer de lustre.instances.importData (pour l'importation) ou de lustre.instances.exportData (pour l'exportation). Ces autorisations sont incluses dans le rôle roles/lustre.admin.
  • Autorisations de l'agent de service : l'agent de service Managed Lustre géré par Google (service-<PROJECT_NUMBER>@gcp-sa-lustre...) doit disposer de roles/storage.objectViewer (pour les importations) ou roles/storage.objectUser (pour les exportations) sur le bucket Cloud Storage cible. Pour obtenir des instructions de configuration détaillées, consultez Accorder des autorisations à l'agent de service.

Fichiers ignorés ou attributs manquants

Les transferts de données Managed Lustre sont incrémentiels : ils ne copient que les fichiers qui n'existent pas dans la destination ou qui ont été modifiés depuis le dernier transfert.

  • Si des fichiers semblent être ignorés, vérifiez s'ils ont déjà été transférés correctement et s'ils n'ont pas été modifiés.
  • Lorsque vous exportez des données vers Cloud Storage, les métadonnées POSIX (UID, GID, mode, mtime) sont conservées à l'aide de clés de métadonnées personnalisées (par exemple, goog-reserved-posix-uid). Notez que les liens symboliques, les répertoires vides et les mises en page de striping PFL explicites ne sont pas conservés lors de l'exportation. Pour en savoir plus, consultez Attributs de fichier de transfert de données.

Inspecter les opérations de transfert ayant échoué

Si une opération de transfert échoue, récupérez le message d'erreur détaillé et le motif de l'échec à l'aide de l'ID de l'opération :

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

Examinez le champ error dans le résultat de l'opération pour déterminer si l'échec est dû à des objets manquants, à des délais d'attente réseau ou à une authentification.

Impossible de mettre l'opération en file d'attente

Si une erreur semblable à l'une des suivantes s'affiche lorsque vous tentez de démarrer une opération :

ERROR: (gcloud.lustre.instances.import-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.update) ABORTED: unable to queue the operation

Cette erreur se produit lorsque vous tentez de démarrer une opération alors qu'une autre opération du même type est déjà en cours sur la même instance.

  • Importation/exportation : Managed Lustre ne prend en charge qu'une seule opération de transfert active par instance à la fois. La mise en file d'attente n'est pas prise en charge pour les opérations de transfert.
  • Mise à jour de l'instance : Managed Lustre autorise une mise à jour active par instance à la fois et permet de mettre en file d'attente une opération de mise à jour supplémentaire.

Pour résoudre ce problème, attendez la fin de l'opération en cours avant d'en démarrer une autre.

Erreurs FILESYSTEM_NO_SPACE_ON_DEVICE

Si votre transfert renvoie une erreur FILESYSTEM_NO_SPACE_ON_DEVICE, même si les outils de surveillance indiquent que de l'espace libre agrégé est toujours disponible, vous pouvez rencontrer un déséquilibre OST, des octrois d'espace client ou une saturation des inodes. Pour en savoir plus et connaître les stratégies d'atténuation, consultez No space left on device erreurs pour en savoir plus et stratégies d'atténuation.