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.
Limitaciones
Solo puede haber una operación de transferencia activa por instancia a la vez. Si intentas iniciar una segunda operación de transferencia mientras se ejecuta una anterior, se producirá un error como el siguiente:
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
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 tu carga de trabajo requiere una mayor velocidad de transferencia de datos, puedes solicitar un aumento en el 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.exportDatapara transferir datos de Managed Lustre a Cloud Storage.lustre.instances.importDatapara transferir 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
Se crea un agente de servicio de Managed Lustre 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
Ejecuta el comando
services identity create:gcloud beta services identity create \ --service=lustre.googleapis.com \ --project=PROJECT_NUMBER_OR_IDReemplaza PROJECT_NUMBER_OR_ID por el número o el ID del proyecto en el que deseas crear la instancia de Lustre administrado. El resultado es similar a lo siguiente:
Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.comCopia el valor de la identidad del agente de servicio para usarlo en el siguiente paso.
Si ya creaste una instancia de Managed Lustre
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 comando
gcloud projects describe:gcloud projects describe PROJECT_ID --format="value(projectNumber)"- 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,
Copia el número de proyecto que se muestra en la identidad del agente de servicio:
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.comCopia la identidad del agente de servicio para usarla en el siguiente paso.
Otorgar permisos
El agente de servicio de Lustre administrado requiere uno de los siguientes roles de Cloud Storage:
- Para transferir datos hacia Cloud Storage y desde él, haz clic en
roles/storage.objectUseren el bucket de Cloud Storage. - Para transferir solo desde Cloud Storage, haz clic en
roles/storage.objectVieweren el bucket de Cloud Storage.
Para otorgar uno de estos roles, ejecuta el siguiente comando de 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 del servicio de Lustre administrado 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 Lustre administrada, pero las transferencias entre regiones
pueden ser más lentas que las transferencias dentro de la misma 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.
--locationes la zona de tu instancia de Managed Lustre. Por ejemplo,us-central1-a.--gcs-path-uriespecifica el URI a un bucket de Cloud Storage, o una ruta de acceso dentro de un bucket, con el formatogs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).--lustre-pathespecifica la ruta del directorio raíz al sistema de archivos Lustre administrado. 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-idte permite asignar un ID único a esta solicitud. Si reintentas 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 contenga solo ceros.--asyncdevuelve 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 proyecto de Google Cloud .
- LOCATION es la zona de tu instancia de Lustre administrado. Por ejemplo,
us-central1-a - INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
gcsPathcontiene una claveuricuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket, con el formatogs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).lustrePathcontiene una clavepathcuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos Lustre administrado. Debe comenzar con/. El valor predeterminado es/. Si especificas un valor distinto del 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 dos maneras:
- Si el objeto de Cloud Storage tiene metadatos personalizados como se describe para la exportación de datos, sucede lo siguiente:
- El UID, el GID, el modo y
mtimedel archivo se establecen según los metadatos personalizados del objeto. - El valor
atimedel archivo se establece en el mismo valor que el demtime.
- El UID, el GID, el modo y
- 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). - Los campos
atimeymtimedel archivo se establecen en la hora de creación del objeto de Cloud Storage.
- El UID y el GID del archivo se establecen en 0 (
En ambos casos, haz lo siguiente:
- El valor de
ctimede un archivo se establece en la hora en la que se escribió el archivo en la instancia. - Los valores
atime,ctimeymtimede 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 Lustre administrado 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 Lustre administrada, pero las transferencias entre regiones pueden ser más lentas que las transferencias dentro de la misma 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.
--locationes la zona de tu instancia de Lustre administrado. Por ejemplo,us-central1-a--gcs-path-uriespecifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket con el formatogs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).--lustre-pathespecifica la ruta del directorio raíz al sistema de archivos Managed Lustre. Debe comenzar con/. El valor predeterminado es/.
Los parámetros que aparecen a continuación son opcionales:
--request-idte permite asignar un ID único a esta solicitud. Si reintentas 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 contenga solo ceros.--asyncdevuelve 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 proyecto de Google Cloud .
- INSTANCE_ID es el nombre de tu instancia de Managed Lustre.
- LOCATION es la zona de tu instancia de Lustre administrado. Por ejemplo,
us-central1-a lustrePathcontiene una clavepathcuyo valor especifica la ruta de acceso al directorio raíz del sistema de archivos Lustre administrado. Debe comenzar con/. El valor predeterminado es/.gcsPathcontiene una claveuricuyo valor especifica el URI a un bucket de Cloud Storage o una ruta de acceso dentro de un bucket, con el formatogs://<bucket_name>/<optional_path_inside_bucket>/. Si se especifica una ruta de acceso dentro del bucket, debe terminar con una barra inclinada (/).
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 Lustre administrada 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
mtimedel archivo se almacena con la clavegoog-reserved-file-mtime.
Estos nombres de claves 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.
- Las vinculaciones físicas se exportan como objetos separados de Cloud Storage, lo que genera varias copias.
- No se conserva el rayado de brillo establecido de forma explícita con
lfs setstripeolfs setdirstripe. - No se conservan los atributos
atimeyctimede los archivos. - No se conserva la
mtimede 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 devuelve 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 devuelve 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