Daten in oder aus Cloud Storage übertragen

Google Cloud Managed Lustre kann Daten aus Cloud Storage importieren und Daten dorthin exportieren. Datenübertragungen sind inkrementell. Es werden nur Dateien kopiert, die noch nicht im Ziel vorhanden sind oder die sich seit der Übertragung geändert haben.

Cloud Storage-Buckets mit aktiviertem hierarchischem Namespace bieten im Vergleich zu Standard-Buckets schnellere Übertragungsgeschwindigkeiten zu und von Managed Lustre.

Beschränkungen

Pro Instanz kann jeweils nur ein Übertragungsvorgang aktiv sein. Wenn Sie versuchen, einen zweiten Übertragungsvorgang zu starten, während ein früherer noch läuft, wird ein Fehler wie der folgende angezeigt:

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

Überlegungen zur Bandbreite für ausgehenden Cloud Storage-Traffic

Cloud Storage bietet eine Standardbandbreite für ausgehenden Traffic von bis zu 200 Gbit/s pro Region und Projekt. Wenn für Ihre Arbeitslast eine höhere Datenübertragungsgeschwindigkeit erforderlich ist, können Sie eine Erhöhung des Limits für die ausgehende Bandbreite anfordern. Weitere Informationen finden Sie unter Cloud Storage – Bandbreitenkontingente.

Erforderliche Berechtigungen

Berechtigungen zum Initiieren der Übertragung

Das Nutzer- oder Dienstkonto, das zum Initiieren des Transfers verwendet wird, benötigt die folgenden Berechtigungen:

  • lustre.instances.exportData, um Daten von Managed Lustre zu Cloud Storage zu übertragen.
  • lustre.instances.importData, um Daten aus Cloud Storage zu übertragen.

Beide Berechtigungen werden mit der Rolle roles/lustre.admin gewährt. Sie können eine benutzerdefinierte Rolle erstellen, um Berechtigungen unabhängig voneinander zu erteilen.

Berechtigungen für den Managed Lustre-Dienst-Agenten

Managed Lustre-Dienst-Agent abrufen

Ein Managed Lustre-Dienst-Agent wird erstellt, wenn Sie zum ersten Mal eine Managed Lustre-Instanz im Projekt erstellen. Die Dienst-Agent-Identität hat das Format service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.

Wenn Sie noch keinen Managed Lustre-Dienst-Agent haben
  1. Führen Sie den Befehl services identity create aus:

    gcloud beta services identity create \
      --service=lustre.googleapis.com \
      --project=PROJECT_NUMBER_OR_ID
    

    Ersetzen Sie PROJECT_NUMBER_OR_ID durch die Projektnummer oder ID des Projekts, in dem Sie die Managed Lustre-Instanz erstellen möchten. Die Ausgabe sieht etwa so aus:

    Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com
    
  2. Kopieren Sie den Wert der Dienst-Agent-Identität, der im nächsten Schritt verwendet werden soll.

Wenn Sie bereits eine Managed Lustre-Instanz erstellt haben
  1. Um die Dienst-Agent-Identität zu erstellen, benötigen Sie Ihre Projektnummer. Eine PROJECT_NUMBER ist nicht dasselbe wie eine Projekt-ID:

    • Eine Projekt-ID ist ein eindeutiger String, der eine Kombination aus Buchstaben, Zahlen und Bindestrichen sein kann. Sie geben eine Projekt-ID an, wenn Sie Ihr Projekt erstellen. Beispiel: example-project-123.
    • Die Projektnummer ist eine automatisch generierte eindeutige Kennung für Ihr Projekt, die nur aus Zahlen besteht. Beispiel: 1234567890.

    Verwenden Sie den Befehl gcloud projects describe, um die PROJECT_NUMBER für eine bestimmte Projekt-ID abzurufen:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Kopieren Sie die zurückgegebene Projektnummer in die Dienst-Agent-Identität:

    service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com
    
  3. Kopieren Sie die Identität des Service-Agents, um sie im nächsten Schritt zu verwenden.

Berechtigungen erteilen

Der Managed Lustre-Dienst-Agent benötigt eine der folgenden Cloud Storage-Rollen:

  • So übertragen Sie Daten in und aus Cloud Storage: roles/storage.objectUser für den Cloud Storage-Bucket.
  • Nur aus Cloud Storage übertragen: roles/storage.objectViewer für den Cloud Storage-Bucket.

Führen Sie zum Zuweisen einer dieser Rollen den folgenden gcloud-Befehl aus:

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

SERVICE_AGENT_IDENTITY ist die Identität des Managed Lustre-Dienst-Agents aus dem vorherigen Schritt.

Daten in Managed Lustre importieren

Sie können Daten aus einem Cloud Storage-Bucket importieren. Der Bucket kann sich im selben oder in einem anderen Projekt befinden. Der Bucket kann sich in einer anderen Zone oder Region als Ihre verwaltete Lustre-Instanz befinden. Interregionale Übertragungen
sind jedoch möglicherweise langsamer als intraregionale Übertragungen.

gcloud

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

Wobei:

  • INSTANCE_ID ist der Name Ihrer Managed Lustre-Instanz.
  • --location ist die Zone Ihrer Managed Lustre-Instanz. Beispiel: us-central1-a.
  • Mit --gcs-path-uri wird der URI zu einem Cloud Storage-Bucket oder ein Pfad innerhalb eines Buckets im Format gs://<bucket_name>/<optional_path_inside_bucket>/ angegeben. Wenn ein Pfad innerhalb des Bucket angegeben wird, muss er mit einem Schrägstrich (/) enden.
  • --lustre-path gibt den Pfad zum Stammverzeichnis des verwalteten Lustre-Dateisystems an. Muss mit / beginnen. Der Standardwert ist /. Wenn Sie einen anderen Wert als den Standardwert angeben, muss das Verzeichnis bereits im Dateisystem vorhanden sein.

Folgende Parameter sind optional:

  • Mit --request-id können Sie dieser Anfrage eine eindeutige ID zuweisen. Wenn Sie diese Anfrage mit derselben Anfrage-ID noch einmal senden, ignoriert der Server die Anfrage, falls sie bereits abgeschlossen wurde. Muss eine gültige UUID sein, die nicht nur aus Nullen besteht.
  • --async gibt sofort eine Antwort zurück, ohne auf den Abschluss des Vorgangs zu warten.

Weitere Informationen finden Sie in der Cloud SDK-Dokumentation.

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"
  }
}

Wobei:

  • PROJECT_ID ist der Name Ihres Google Cloud Projekts.
  • LOCATION ist die Zone Ihrer verwalteten Lustre-Instanz. Beispiel: us-central1-a.
  • INSTANCE_ID ist der Name Ihrer Managed Lustre-Instanz.
  • gcsPath enthält einen uri-Schlüssel, dessen Wert den URI zu einem Cloud Storage-Bucket oder einen Pfad innerhalb eines Buckets im Format gs://<bucket_name>/<optional_path_inside_bucket>/ angibt. Wenn ein Pfad innerhalb des Bucket angegeben wird, muss er mit einem Schrägstrich (/) enden.
  • lustrePath enthält einen path-Schlüssel, dessen Wert den Stammverzeichnispfad zum verwalteten Lustre-Dateisystem angibt. Muss mit / beginnen. Der Standardwert ist /. Wenn Sie einen anderen Wert als den Standardwert angeben, muss das Verzeichnis bereits im Dateisystem vorhanden sein.

Wenn Sie Ihr eigenes Dienstkonto anstelle des von Google verwalteten Dienstkontos verwenden möchten, unterstützt die Anfrage das Feld serviceAccount im JSON-Objekt:

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

Ein Beispiel für einen curl-Befehl:

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":"/"}}'

Dateiattribute

Wenn Sie Daten aus einem Cloud Storage-Bucket in eine Managed Lustre-Instanz importieren, werden die Dateiattribute in der Managed Lustre-Instanz auf eine von zwei Arten festgelegt:

  • Wenn das Cloud Storage-Objekt benutzerdefinierte Metadaten wie für den Export von Daten beschrieben hat, gilt Folgendes:
    • Die UID, GID, der Modus und mtime der Datei werden basierend auf den benutzerdefinierten Metadaten des Objekts festgelegt.
    • Der atime-Wert der Datei ist auf denselben Wert wie der mtime-Wert festgelegt.
  • Wenn das Cloud Storage-Objekt die benutzerdefinierten Metadaten nicht enthält, gilt Folgendes:
    • Die UID und GID der Datei sind auf 0 (root) gesetzt.
    • Der Modus der Datei ist auf rwxr-xr-x (755) festgelegt.
    • Die atime und mtime der Datei werden auf die Erstellungszeit des Cloud Storage-Objekts festgelegt.

In beiden Fällen gilt:

  • Der ctime für eine Datei wird auf den Zeitpunkt festgelegt, zu dem die Datei in die Instanz geschrieben wurde.
  • Die atime-, ctime- und mtime-Werte für ein Verzeichnis werden auf die Zeit festgelegt, zu der das Verzeichnis auf der Instanz erstellt wurde.

Daten exportieren

Sie können Daten aus Ihrer Managed Lustre-Instanz in einen Cloud Storage-Bucket im selben oder in einem anderen Projekt exportieren. Der Bucket kann sich in einer anderen Zone oder Region als Ihre verwaltete Lustre-Instanz befinden. Interregionale Übertragungen sind jedoch möglicherweise langsamer als intraregionale Übertragungen.

gcloud

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

Wobei:

  • INSTANCE_ID ist der Name Ihrer Managed Lustre-Instanz.
  • --location ist die Zone Ihrer verwalteten Lustre-Instanz. Beispiel: us-central1-a.
  • Mit --gcs-path-uri wird der URI zu einem Cloud Storage-Bucket oder ein Pfad innerhalb eines Buckets im Format gs://<bucket_name>/<optional_path_inside_bucket>/ angegeben. Wenn ein Pfad innerhalb des Bucket angegeben wird, muss er mit einem Schrägstrich (/) enden.
  • --lustre-path gibt den Pfad des Stammverzeichnisses für das Managed Lustre-Dateisystem an. Muss mit / beginnen. Der Standardwert ist /.

Folgende Parameter sind optional:

  • Mit --request-id können Sie dieser Anfrage eine eindeutige ID zuweisen. Wenn Sie diese Anfrage mit derselben Anfrage-ID noch einmal senden, ignoriert der Server die Anfrage, falls sie bereits abgeschlossen wurde. Muss eine gültige UUID sein, die nicht nur aus Nullen besteht.
  • --async gibt sofort eine Antwort zurück, ohne auf den Abschluss des Vorgangs zu warten.

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/"
  }
}

Wobei:

  • PROJECT_ID ist der Name Ihres Google Cloud Projekts.
  • INSTANCE_ID ist der Name Ihrer Managed Lustre-Instanz.
  • LOCATION ist die Zone Ihrer verwalteten Lustre-Instanz. Beispiel: us-central1-a.
  • lustrePath enthält einen path-Schlüssel, dessen Wert den Stammverzeichnispfad zum verwalteten Lustre-Dateisystem angibt. Muss mit / beginnen. Der Standardwert ist /.
  • gcsPath enthält einen uri-Schlüssel, dessen Wert den URI zu einem Cloud Storage-Bucket oder einen Pfad innerhalb eines Buckets im Format gs://<bucket_name>/<optional_path_inside_bucket>/ angibt. Wenn ein Pfad innerhalb des Bucket angegeben wird, muss er mit einem Schrägstrich (/) enden.

Wenn Sie Ihr eigenes Dienstkonto anstelle des von Google verwalteten Dienstkontos verwenden möchten, unterstützt die Anfrage das Feld serviceAccount im JSON-Objekt:

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

Ein Beispiel für einen curl-Befehl:

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/"}}'

Dateiattribute

Wenn Sie Daten aus einer verwalteten Lustre-Instanz in einen Cloud Storage-Bucket exportieren, werden die folgenden Dateiattribute als benutzerdefinierte Metadaten in Cloud Storage beibehalten:

  • Die UID der Datei wird mit dem Schlüssel goog-reserved-posix-uid gespeichert.
  • Die GID der Datei wird mit dem Schlüssel goog-reserved-posix-gid gespeichert.
  • Der numerische Modus der Datei wird mit dem Schlüssel goog-reserved-posix-mode gespeichert.
  • Der mtime der Datei wird mit dem goog-reserved-file-mtime-Schlüssel gespeichert.

Diese benutzerdefinierten Metadatenschlüsselnamen sind dieselben wie die, die von Storage Transfer Service für Übertragungen mit POSIX-Dateisystemen verwendet werden.

Die folgenden Dateiattribute werden nicht beibehalten:

  • Symlinks bleiben nicht erhalten.
  • Hardlinks werden als separate Cloud Storage-Objekte exportiert, was zu mehreren Kopien führt.
  • Die mit lfs setstripe oder lfs setdirstripe explizit festgelegte Lustre-Streifenbildung wird nicht beibehalten.
  • Die atime und ctime von Dateien werden nicht beibehalten.
  • Die mtime von Verzeichnissen wird nicht beibehalten.
  • Leere Verzeichnisse werden nicht beibehalten.

Vorgang abrufen

Um den Status eines Import- oder Exportvorgangs zu sehen, benötigen Sie die Vorgangs-ID. Diese ID wird vom Dienst zurückgegeben, wenn Sie eine Import- oder Exportanfrage stellen. Sie hat das folgende Format:

  • 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]

Ein Beispiel für einen curl-Befehl:

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

Vorgang abbrechen

Wenn Sie einen Import- oder Exportvorgang abbrechen möchten, benötigen Sie die Vorgangs-ID. Diese ID wird vom Dienst zurückgegeben, wenn Sie eine Import- oder Exportanfrage stellen. Sie hat das folgende Format:

  • 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]

Ein Beispiel für einen curl-Befehl:

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