Transfiere datos hacia o desde Cloud Storage

Google Cloud Managed Lustre puede importar datos desde Cloud Storage y exportar datos a este servicio. Las transferencias de datos son incrementales, ya que solo copian los archivos que aún no existen en el destino o que cambiaron desde que se transfirieron.

Los buckets de Cloud Storage con el espacio de nombres jerárquico habilitado proporcionan velocidades de transferencia más rápidas hacia y desde Managed Lustre en comparación con los buckets estándar.

Rendimiento

Las transferencias entre Managed Lustre y Cloud Storage pueden alcanzar las siguientes velocidades:

  • Para archivos de más de 32 MB, hasta 100 GBps. La velocidad de transferencia está limitada por el rendimiento máximo de una instancia (capacidad de la instancia multiplicada por el nivel de rendimiento).

Consideraciones sobre el ancho de banda de salida de Cloud Storage

Cloud Storage proporciona un ancho de banda de salida predeterminado de hasta 200 Gbps por región y por proyecto. Si tienes varias instancias de Managed Lustre en el mismo proyecto y región, puedes solicitar un aumento del límite de ancho de banda de salida. Para obtener más información, consulta las cuotas de ancho de banda de Cloud Storage.

Permisos necesarios

Permisos para iniciar la transferencia

La cuenta de usuario o de servicio que se usa para iniciar la transferencia requiere los siguientes permisos:

  • lustre.instances.exportData para transferir datos de Managed Lustre a Cloud Storage
  • lustre.instances.importData para transferir datos desde Cloud Storage

Ambos permisos se otorgan con el rol roles/lustre.admin. Puedes crear un rol personalizado para otorgar permisos de forma independiente.

Permisos para el agente de servicio de Managed Lustre

Obtén el agente de servicio de Managed Lustre

Un agente de servicio de Managed Lustre se crea la primera vez que creas una instancia de Managed Lustre en el proyecto. La identidad del agente de servicio tiene el formato service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.

Si aún no tienes un agente de servicio de Managed Lustre
  1. Ejecuta el services identity create comando:

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

    Reemplaza PROJECT_NUMBER_OR_ID por el número o el ID del proyecto en el que deseas crear la instancia de Managed Lustre. El resultado es similar a lo siguiente:

    Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.com
    
  2. Copia el valor de la identidad del agente de servicio para usarlo en el siguiente paso.

Si ya creaste una instancia de Managed Lustre
  1. Para construir la identidad del agente de servicio, obtén el número de tu proyecto. Un PROJECT_NUMBER no es lo mismo que un ID del proyecto:

    • Un ID del proyecto es una cadena única que puede ser una combinación de letras, números y guiones. Especificas un ID del proyecto cuando creas tu proyecto. Por ejemplo, example-project-123.
    • Un número de proyecto es un identificador único generado automáticamente para tu proyecto que consta solo de números. Por ejemplo, 1234567890.

    Para obtener el PROJECT_NUMBER de un ID del proyecto determinado, usa el gcloud projects describe comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Copia el número de proyecto que se muestra en la identidad del agente de servicio:

    service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com
    
  3. Copia la identidad del agente de servicio para usarla en el siguiente paso.

Otorgar permisos

El agente de servicio de Managed Lustre requiere uno de los siguientes roles de Cloud Storage:

  • Para transferir datos hacia y desde Cloud Storage: roles/storage.objectUser en el bucket de Cloud Storage
  • Para transferir datos solo desde Cloud Storage: roles/storage.objectViewer en el bucket de Cloud Storage

Para otorgar uno de estos roles, ejecuta el siguiente comando gcloud:

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

SERVICE_AGENT_IDENTITY es la identidad del agente de servicio de Managed Lustre del paso anterior.

Importa datos a Managed Lustre

Puedes importar datos desde un bucket de Cloud Storage. El bucket puede estar en el mismo proyecto o en uno diferente. El bucket puede estar en una zona o región diferente de tu instancia de Managed Lustre, pero las transferencias entre regiones
podrían ser más lentas que las transferencias dentro de la región.

gcloud

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

Aquí:

  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • --location es la zona de tu instancia de Managed Lustre. Por ejemplo, us-central1-a.
  • --gcs-path-uri especifica el URI a un bucket de Cloud Storage, o una ruta de acceso dentro de un bucket, con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra diagonal (/).
  • --lustre-path especifica la ruta de acceso al directorio raíz del sistema de archivos de Managed Lustre. Debe comenzar con /. El valor predeterminado es /. Si especificas un valor que no sea el predeterminado, el directorio ya debe existir en el sistema de archivos.

Los parámetros que aparecen a continuación son opcionales:

  • --request-id te permite asignar un ID único a esta solicitud. Si vuelves a intentar esta solicitud con el mismo ID de solicitud, el servidor ignorará la solicitud si ya se completó. Debe ser un UUID válido que no sea todo ceros.
  • --async muestra una respuesta de inmediato, sin esperar a que se complete la operación.

Para obtener más detalles, consulta la documentación del SDK de Cloud.

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

Aquí:

  • PROJECT_ID es el nombre de tu Google Cloud proyecto.
  • LOCATION es la zona de tu instancia de Managed Lustre. Por ejemplo, us-central1-a.
  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • gcsPath contiene una clave uri cuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra diagonal (/).
  • lustrePath contiene una clave path cuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos de Managed Lustre. Debe comenzar con /. El valor predeterminado es /. Si especificas un valor que no sea el predeterminado, el directorio ya debe existir en el sistema de archivos.

Para usar tu propia cuenta de servicio en lugar del agente de servicio administrado por Google, la solicitud admite un campo serviceAccount en el objeto JSON:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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

Atributos de archivo

Cuando importas datos de un bucket de Cloud Storage a una instancia de Managed Lustre, los atributos de archivo de la instancia de Managed Lustre se configuran de una de las siguientes maneras:

  • Si el objeto de Cloud Storage tiene metadatos personalizados como se describe para exportar datos, entonces:
    • El UID, el GID, el modo y el mtime del archivo se establecen en función de los metadatos personalizados del objeto.
    • El atime del archivo se establece en el mismo valor que el mtime.
  • Si el objeto de Cloud Storage no tiene los metadatos personalizados, entonces:
    • El UID y el GID del archivo se establecen en 0 (root).
    • El modo del archivo se establece en rwxr-xr-x (755).
    • El atime y el mtime del archivo se establecen en la hora de creación del objeto de Cloud Storage.

En cualquier caso:

  • El ctime de un archivo se establece en la hora en que se escribió el archivo en la instancia.
  • El atime, el ctime y el mtime de un directorio se establecen en la hora en que se creó el directorio en la instancia.

Exportar datos

Puedes exportar datos de tu instancia de Managed Lustre a un bucket de Cloud Storage en el mismo proyecto o en uno diferente. El bucket puede estar en una zona o región diferente de tu instancia de Managed Lustre, pero las transferencias entre regiones podrían ser más lentas que las transferencias dentro de la región.

gcloud

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

Aquí:

  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • --location es la zona de tu instancia de Managed Lustre. Por ejemplo, us-central1-a.
  • --gcs-path-uri especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra diagonal (/).
  • --lustre-path especifica la ruta de acceso al directorio raíz del sistema de archivos de Managed Lustre. Debe comenzar con /. El valor predeterminado es /.

Los parámetros que aparecen a continuación son opcionales:

  • --request-id te permite asignar un ID único a esta solicitud. Si vuelves a intentar esta solicitud con el mismo ID de solicitud, el servidor ignorará la solicitud si ya se completó. Debe ser un UUID válido que no sea todo ceros.
  • --async muestra una respuesta de inmediato, sin esperar a que se complete la operación.

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

Aquí:

  • PROJECT_ID es el nombre de tu Google Cloud proyecto.
  • INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
  • LOCATION es la zona de tu instancia de Managed Lustre. Por ejemplo, us-central1-a.
  • lustrePath contiene una clave path cuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos de Managed Lustre. Debe comenzar con /. El valor predeterminado es /.
  • gcsPath contiene una clave uri cuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket con el formato gs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra diagonal (/).

Para usar tu propia cuenta de servicio en lugar del agente de servicio administrado por Google, la solicitud admite un campo serviceAccount en el objeto JSON:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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

Atributos de archivo

Cuando exportas datos de una instancia de Managed Lustre a un bucket de Cloud Storage, los siguientes atributos de archivo se conservan como metadatos personalizados en Cloud Storage:

  • El UID del archivo se almacena con la clave goog-reserved-posix-uid.
  • El GID del archivo se almacena con la clave goog-reserved-posix-gid.
  • El modo numérico del archivo se almacena con la clave goog-reserved-posix-mode.
  • El mtime del archivo se almacena con la clave goog-reserved-file-mtime.

Estos nombres de clave de metadatos personalizados son los mismos que usa el Servicio de transferencia de almacenamiento para las transferencias con sistemas de archivos POSIX.

No se conservan los siguientes atributos de archivo:

  • No se conservan los vínculos simbólicos.
  • Los vínculos físicos se exportan como objetos de Cloud Storage separados, lo que genera varias copias.
  • No se conserva la segmentación de Lustre establecida de forma explícita con lfs setstripe o lfs setdirstripe.
  • No se conservan el atime ni el ctime de los archivos.
  • No se conserva el mtime de los directorios.
  • No se conservan los directorios vacíos.

Obtener operación

Para ver el estado de una operación de importación o exportación, necesitarás el ID de la operación. El servicio muestra este ID cuando realizas una solicitud de importación o exportación, y usa el siguiente formato:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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

Cancelar operación

Para cancelar una operación de importación o exportación, necesitarás el ID de la operación. El servicio muestra este ID cuando realizas una solicitud de importación o exportación, y usa el siguiente formato:

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

Un comando curl de ejemplo se ve de la siguiente manera:

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

Limitaciones

Se aplica la siguiente limitación:

  • Solo puede haber una operación de transferencia por instancia activa a la vez. Si inicias una segunda transferencia antes de que se complete la primera, se muestra el siguiente error:

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