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, es decir, 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 la capacidad de procesamiento máxima 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

Managed Lustre usa un agente de servicio para acceder a los buckets de Cloud Storage en tu nombre. Para realizar transferencias, debes otorgar acceso al agente de servicio al bucket de destino.

Si no conoces la identidad del agente de servicio de tu proyecto, consulta Crea o recupera la identidad del agente de servicio.

Otorga 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, haz lo siguiente:

Importación y exportación

Ejecuta el siguiente comando gcloud:

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

Solo importación

Ejecuta el siguiente comando gcloud:

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

Reemplaza lo siguiente:

  • BUCKET_NAME: Es el nombre de tu bucket de Cloud Storage.
  • SERVICE_AGENT_IDENTITY: Es la identidad del agente de servicio de Managed Lustre (service-<var>PROJECT_NUMBER</var>@gcp-sa-lustre.iam.gserviceaccount.com).

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 la ignorará 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 establecen de una de las siguientes maneras:

  • Si el objeto de Cloud Storage tiene metadatos personalizados como se describe para exportar datos, sucede lo siguiente:
    • 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, sucede lo siguiente:
    • 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, sucede lo siguiente:

  • 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 la ignorará 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
    

Soluciona problemas

Cuando importas datos desde Cloud Storage o los exportas a este servicio, es posible que encuentres bloqueos de transferencia, problemas de permisos o archivos omitidos. Sigue estos pasos para diagnosticar y resolver problemas comunes de transferencia de datos.

Bloqueos de transferencia o velocidades de salida lentas

Si una operación de importación o exportación se bloquea o se ejecuta mucho más lento de lo esperado, verifica lo siguiente:

  • Límites de ancho de banda de salida de Cloud Storage: Cloud Storage aplica una cuota de ancho de banda de salida predeterminada de hasta 200 Gbps por región y por proyecto. Si varias instancias o cargas de trabajo de alto rendimiento transfieren datos de forma simultánea, es posible que esta cuota genere un cuello de botella. Consulta Cuotas de ancho de banda de Cloud Storage para solicitar un aumento de cuota.
  • Límites de capacidad de procesamiento de la instancia: Las velocidades de transferencia están limitadas por la capacidad de procesamiento máximo de tu instancia (capacidad de la instancia multiplicada por su nivel de rendimiento). Verifica el nivel de rendimiento de tu instancia para asegurarte de que se alinee con tus expectativas de rendimiento.

Errores de permisos durante el inicio de la transferencia

Si el inicio de una transferencia falla con un error de autorización o de permisos denegados, verifica los siguientes roles de IAM:

  • Permisos de usuario y cuenta de servicio: La identidad que inicia el comando de transferencia debe tener lustre.instances.importData (para la importación) o lustre.instances.exportData (para la exportación). Estos se incluyen en el rol roles/lustre.admin.
  • Permisos del agente de servicio: El agente de servicio de Managed Lustre administrado por Google (service-<PROJECT_NUMBER>@gcp-sa-lustre...) debe tener roles/storage.objectViewer (para las importaciones) o roles/storage.objectUser (para las exportaciones) en el bucket de Cloud Storage de destino. Consulta Otorga permisos al agente de servicio para obtener instrucciones de configuración detalladas.

Archivos omitidos o atributos faltantes

Las transferencias de datos de Managed Lustre son incrementales, es decir, solo copian los archivos que no existen en el destino o que cambiaron desde la última transferencia.

  • Si parece que se omitieron archivos, verifica si ya se transfirieron correctamente antes y no se modificaron.
  • Cuando exportas datos a Cloud Storage, los metadatos POSIX (UID, GID, modo, mtime) se conservan con claves de metadatos personalizados (p.ej., goog-reserved-posix-uid). Ten en cuenta que los vínculos simbólicos, los directorios vacíos y los diseños de segmentación de PFL explícitos no se conservan durante la exportación. Consulta Atributos de archivo de transferencia de datos para obtener detalles completos.

Inspecciona las operaciones de transferencia fallidas

Si falla una operación de transferencia, recupera el mensaje de error detallado y el motivo de la falla con el ID de la operación:

gcloud lustre operations describe OPERATION_ID \
  --location=LOCATION

Revisa el campo error en el resultado de la operación para determinar si la falla se debió a objetos faltantes, tiempos de espera de la red o autenticación.

No se puede poner en cola la operación

Si ves un error similar a cualquiera de los siguientes cuando intentas iniciar una operación:

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

Este error se produce cuando intentas iniciar una operación mientras ya hay otra operación del mismo tipo en curso en la misma instancia.

  • Importación o exportación: Managed Lustre admite solo una operación de transferencia activa por instancia a la vez. No se admite la puesta en cola para las operaciones de transferencia.
  • Actualización de instancias: Managed Lustre permite una actualización activa por instancia a la vez y permite poner en cola una operación de actualización adicional.

Para resolver este problema, espera a que se complete la operación actual antes de comenzar una nueva.

Errores FILESYSTEM_NO_SPACE_ON_DEVICE

Si tu transferencia muestra un error FILESYSTEM_NO_SPACE_ON_DEVICE, aunque las herramientas de supervisión indiquen que aún hay espacio libre agregado disponible, es posible que tengas un desequilibrio de OST, otorgamientos de espacio del cliente o agotamiento de nodos i. Consulta No space left on device errores para obtener detalles y estrategias de mitigación.