1. Descripción general
Te damos la bienvenida al codelab de Google para ejecutar un clúster de sistema de archivos paralelo de Lustre en Google Cloud Platform.

Los datos son fundamentales para la práctica de la computación de alto rendimiento, y acceder a grandes cantidades de datos a velocidades extremadamente altas y con latencias bajas siempre ha sido un desafío clave para ejecutar cargas de trabajo de HPC. Este requisito de almacenamiento de alto rendimiento no ha cambiado en la nube y, de hecho, la capacidad de utilizar grandes cantidades de almacenamiento de forma rápida y sencilla se ha vuelto primordial.
Los centros de HPC satisfacen esta necesidad desde hace mucho tiempo en las instalaciones con tecnologías como el sistema de archivos paralelos Lustre. Lustre es una de las soluciones de almacenamiento de alto rendimiento de código abierto más populares en la actualidad y, desde junio de 2005, la utiliza de forma constante al menos la mitad de las diez supercomputadoras más rápidas y más de 60 de las 100 más rápidas del mundo. Lustre tiene la capacidad de escalar hasta cientos de PB de capacidad y ofrecer el máximo rendimiento posible para los trabajos de HPC, con sistemas que ofrecen TB/s de capacidad de procesamiento en un solo espacio de nombres.
Para satisfacer la demanda de almacenamiento, Google Cloud adoptó dos enfoques. En primer lugar, GCP se asoció con DDN para llevar su software DDN EXAScaler Lustre compatible y de nivel empresarial a GCP Marketplace. En segundo lugar, nuestros ingenieros de Google Cloud desarrollaron y publicaron como código abierto un conjunto de secuencias de comandos para configurar y, luego, implementar con facilidad un clúster de almacenamiento de Lustre en Google Compute Engine con Google Cloud Deployment Manager.
Lustre en Google Cloud Platform es igualmente capaz de ofrecer el máximo rendimiento de la infraestructura en la que se ejecuta. Su rendimiento en GCP es tan bueno que ocupó el 8º lugar en la comparativa de sistemas de almacenamiento IO-500 en 2019 con nuestro socio DDN, lo que representa el sistema de archivos basado en la nube con la clasificación más alta en IO-500. Hoy te guiaremos por la implementación de las secuencias de comandos de Deployment Manager de código abierto para Lustre. Si te interesa tener una experiencia empresarial y reforzada de Lustre, con asistencia de expertos en Lustre para tu clúster de Lustre, así como funciones como una GUI de administración y supervisión o ajustes de Lustre, te recomendamos que investigues la oferta de DDN EXAScaler en Marketplace.
Qué aprenderás
- Cómo usar el servicio de Deployment Manager de GCP
- Cómo configurar e implementar un sistema de archivos Lustre en GCP
- Cómo configurar la segmentación y probar E/S simples en el sistema de archivos Lustre
Requisitos previos
- Una cuenta de Google Cloud Platform y un proyecto con facturación
- Experiencia básica en Linux
2. Configuración
Configuración del entorno de autoaprendizaje
Crea un proyecto
Si aún no tienes una Cuenta de Google (Gmail o G Suite), debes crear una. Accede a Google Cloud Platform Console ( console.cloud.google.com) y abre la página Administrar recursos:

Haz clic en Crear proyecto.

Ingresa un nombre para el proyecto. Recuerda el ID del proyecto (destacado en rojo en la captura de pantalla anterior). El ID del proyecto debe ser un nombre único en todos los proyectos de Google Cloud. Si el nombre de tu proyecto no es único, Google Cloud generará un ID de proyecto aleatorio basado en el nombre del proyecto.
A continuación, deberás habilitar la facturación en Developers Console para usar los recursos de Google Cloud.
Ejecutar este codelab debería costar solo unos pocos dólares, pero su costo podría aumentar si decides usar más recursos o si los dejas en ejecución (consulta la sección “Conclusión” al final de este documento). La calculadora de precios de Google Cloud está disponible aquí.
Los usuarios nuevos de Google Cloud Platform son aptos para obtener una prueba gratuita de USD 300.
Google Cloud Shell
Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
Inicia Google Cloud Shell
En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

Luego, haz clic en Iniciar Cloud Shell:

El aprovisionamiento y la conexión al entorno debería llevar solo unos minutos:

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y simplificar la autenticación. Gran parte de tu trabajo en este lab, si no todo, se puede hacer simplemente con un navegador web o una Chromebook de Google.
Una vez que te conectes a Cloud Shell, deberías ver que ya te autenticaste y que el proyecto ya se configuró con tu PROJECT_ID:
$ gcloud auth list
Resultado del comando:
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
$ gcloud config list project
Resultado del comando:
[core]
project = <PROJECT_ID>
Si el ID del proyecto no está configurado correctamente, puedes establecerlo con este comando:
$ gcloud config set project <PROJECT_ID>
Resultado del comando:
Updated property [core/project].
3. Prepara y revisa la configuración de implementación de Lustre
Descarga las secuencias de comandos de Deployment Manager de Lustre
En la sesión de Cloud Shell, ejecuta el siguiente comando para clonar (descargar) el repositorio de Git que contiene los archivos de deployment-manager de Lustre para Google Cloud:
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
Ejecuta el siguiente comando para cambiar al directorio de configuración de la implementación de Lustre:
cd deploymentmanager-samples/community/lustre/
Configura el archivo YAML de implementación de Lustre
Deployment Manager usa un archivo YAML para proporcionar la configuración de la implementación. Este archivo YAML detalla la configuración de la implementación, como la versión de Lustre que se implementará y los tipos de instancias de máquinas que se implementarán. De forma predeterminada, el archivo está configurado para implementarse en un proyecto nuevo sin aumentos de cuota. Sin embargo, puedes cambiar el tipo o la capacidad de la máquina según lo desees para este codelab. Este codelab se escribió para usar estos valores predeterminados, por lo que, si realizas algún cambio, debes mantenerlo a lo largo de todo el codelab para evitar errores. En producción, recomendamos al menos una instancia de 32 CPU virtuales para el nodo de MDS y al menos una instancia de 8 o 16 CPU virtuales para los nodos de OSS, según la capacidad y el tipo de almacenamiento.
Para revisar o editar el archivo YAML en la sesión de Cloud Shell, abre el archivo YAML de configuración de la implementación Lustre-cluster.yaml. Puedes usar tu editor de línea de comandos preferido (vi, nano, emacs, etc.) o el editor de código de Cloud Console para ver el contenido del archivo:

El contenido del archivo se verá de la siguiente manera:
# [START cluster_yaml]
imports:
- path: lustre.jinja
resources:
- name: lustre
type: lustre.jinja
properties:
## Cluster Configuration
cluster_name : lustre
zone : us-central1-f
cidr : 10.20.0.0/16
external_ips : True
### Use these fields to deploy Lustre in an existing VPC, Subnet, and/or Shared VPC
#vpc_net : < VPC Network Name >
#vpc_subnet : < VPC Subnet Name >
#shared_vpc_host_proj : < Shared VPC Host Project name >
## Filesystem Configuration
fs_name : lustre
### Review https://downloads.whamcloud.com/public/ to determine version naming
lustre_version : latest-release
e2fs_version : latest
## Lustre MDS/MGS Node Configuration
#mds_node_count : 1
mds_ip_address : 10.20.0.2
mds_machine_type : n1-standard-8
### MDS/MGS Boot disk
mds_boot_disk_type : pd-standard
mds_boot_disk_size_gb : 10
### Lustre MetaData Target disk
mdt_disk_type : pd-ssd
mdt_disk_size_gb : 1000
## Lustre OSS Configuration
oss_node_count : 4
oss_ip_range_start : 10.20.0.5
oss_machine_type : n1-standard-4
### OSS Boot disk
oss_boot_disk_type : pd-standard
oss_boot_disk_size_gb : 10
### Lustre Object Storage Target disk
ost_disk_type : pd-standard
ost_disk_size_gb : 5000
# [END cluster_yaml]
En este archivo YAML, hay varios campos. Los campos que se muestran a continuación con un asterisco (*) son obligatorios. Estos campos incluyen lo siguiente:
Configuración del clúster
- cluster_name*: Nombre del clúster de Lustre, antepone todos los recursos implementados
- zone* - Zona en la que se implementará el clúster
- cidr* - Rango de IP en formato CIDR
- external_ips*: Es verdadero o falso. Indica si los nodos de Lustre tienen direcciones IP externas. Si es falso, se configura Cloud NAT como una puerta de enlace de NAT.
- vpc_net: Define este campo y el campo vpc_subnet para implementar el clúster de Lustre en una VPC existente.
- vpc_subnet: Subred de VPC existente en la que se implementará el clúster de Lustre
- shared_vpc_host_proj: Define este campo, así como los campos vpc_net y vpc_subnet, para implementar el clúster en una VPC compartida.
Configuración del sistema de archivos
- fs_name: Nombre del sistema de archivos Lustre
- lustre_version: Es la versión de Lustre que se implementará. Usa "latest-release" para implementar la rama más reciente de https://downloads.whamcloud.com/public/lustre/ o lustre-X.X.X para implementar cualquier otra versión.
- e2fs_version: Versión de E2fsprogs para implementar. Usa "latest" para implementar la rama más reciente de https://downloads.whamcloud.com/public/e2fsprogs/ o X.XX.X.wcX para implementar cualquier otra versión.
Configuración de MDS/MGS
- mds_ip_address: Es la dirección IP interna que se especificará para el nodo MDS/MGS.
- mds_machine_type: Es el tipo de máquina que se usará para el nodo de MDS/MGS (consulta https://cloud.google.com/compute/docs/machine-types).
- mds_boot_disk_type: Tipo de disco que se usará para el disco de arranque de MDS/MGS (pd-standard, pd-ssd)
- mds_boot_disk_size_gb: Es el tamaño del disco de arranque de MDS en GB.
- mdt_disk_type* - Tipo de disco que se usará para el disco de destino de metadatos (MDT) (pd-standard, pd-ssd, local-ssd)
- mdt_disk_size_gb*: Tamaño del disco del MDT en GB
Configuración de OSS
- oss_node_count*: Cantidad de nodos de servidor de almacenamiento de objetos (OSS) que se crearán
- oss_ip_range_start: Es el inicio del rango de IP para los nodos de OSS. Si no se especifica, usa la asignación automática de IP.
- oss_machine_type: Tipo de máquina que se usará para los nodos de OSS
- oss_boot_disk_type: Tipo de disco que se usará para el disco de arranque del OSS (pd-standard, pd-ssd)
- oss_boot_disk_size_gb: Tamaño del disco de arranque de MDS en GB
- ost_disk_type* - Tipo de disco que se usará para el disco de destino de Object Storage (OST) (pd-standard, pd-ssd, local-ssd)
- ost_disk_size_gb* - Tamaño del disco de OST en GB
4. Implementa y verifica la configuración
Implementa la configuración
En la sesión de Cloud Shell, ejecuta el siguiente comando desde la carpeta Lustre-gcp:
gcloud deployment-manager deployments create lustre --config lustre.yaml
Este comando crea una implementación llamada Lustre. La operación puede tardar entre 10 y 20 minutos en completarse, así que ten paciencia.
Una vez que se complete la implementación, verás un resultado similar al siguiente:
Create operation operation-1572410719018-5961966591cad-e25384f6-d4c905f8 completed successfully.
NAME TYPE STATE ERRORS INTENT
lustre-all-internal-firewall-rule compute.v1.firewall COMPLETED []
lustre-lustre-network compute.v1.network COMPLETED []
lustre-lustre-subnet compute.v1.subnetwork COMPLETED []
lustre-mds1 compute.v1.instance COMPLETED []
lustre-oss1 compute.v1.instance COMPLETED []
lustre-oss2 compute.v1.instance COMPLETED []
lustre-oss3 compute.v1.instance COMPLETED []
lustre-oss4 compute.v1.instance COMPLETED []
lustre-ssh-firewall-rule compute.v1.firewall COMPLETED []
Verifica la implementación

Sigue estos pasos para ver la implementación en Google Cloud Platform Console:
- En Cloud Console, abre el menú Productos y servicios en la esquina superior izquierda de la consola (tres líneas horizontales).
- Haz clic en Deployment Manager.
- Haz clic en Lustre para ver los detalles de la implementación.
- Haz clic en Overview - Lustre. En el panel Propiedades de implementación, se muestra la configuración general de la implementación.
- Haz clic en "Ver" en la propiedad Config. En el panel Config, se muestra el contenido del archivo YAML de configuración de la implementación que se modificó anteriormente. Verifica que el contenido sea correcto antes de continuar. Si necesitas cambiar una configuración de implementación, simplemente borra la implementación según los pasos que se indican en "Limpia la implementación" y reinicia la implementación según los pasos que se indican en "Configura el archivo YAML de implementación de Lustre".
- (Opcional) En la sección Lustre-cluster, haz clic en cada uno de los recursos creados por la plantilla Lustre.jinja y revisa los detalles.
Una vez verificada la configuración de la implementación, confirmemos que se iniciaron las instancias del clúster. En el menú Productos y servicios de la consola de Cloud Platform, haz clic en Compute Engine > Instancias de VM.

En la página Instancias de VM, revisa las cinco instancias de máquinas virtuales que creó el administrador de implementaciones. Esto incluye lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 y lustre-oss4.
5. Accede al clúster de Lustre
Supervisa la instalación
En la página Instancias de VM, haz clic en lustre-mds1 para abrir la página Detalles de la instancia.

Haz clic en Puerto en serie 1 (consola) para abrir la página de salida de la consola en serie. Usaremos esta salida serial para supervisar el proceso de instalación de la instancia de MDS y esperaremos hasta que se complete la secuencia de comandos de inicio. Haz clic en el botón "Actualizar" en la parte superior de la página para actualizar la salida serial. El nodo se reiniciará una vez para iniciar el kernel de Lustre y mostrará mensajes similares a los siguientes:
Startup finished in 838ms (kernel) + 6.964s (initrd) + 49.302s (userspace) = 57.105s.
Lustre: lustre-MDT0000: Connection restored to 374e2d80-0b31-0cd7-b2bf-de35b8119534 (at 0@lo)
Esto significa que Lustre está instalado en el clúster de Lustre y que el sistema de archivos está listo para usarse.
Accede al clúster de Lustre
En la sesión de Cloud Shell, haz clic en el botón SSH junto a la instancia lustre-mds1 en la consola de Google Cloud. Como alternativa, ejecuta el siguiente comando en Cloud Shell y reemplaza <ZONE> por la zona del nodo lustre-mds1:
gcloud compute ssh lustre-mds1 --zone=<ZONE>
Este comando accede a la máquina virtual lustre-mds1. Esta es la instancia del servidor de metadatos (MDS) de Lustre, que también actúa como la instancia del servidor de administración (MGS) de Lustre. Esta instancia controla todas las solicitudes de autenticación y metadatos del sistema de archivos.
Activaremos el sistema de archivos en nuestra instancia lustre-mds1 para poder probarlo más adelante. Ejecuta los siguientes comandos:
sudo mkdir /mnt/lustre sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre cd /mnt/lustre
Estos tres comandos realizan tres acciones. El primer comando crea un directorio local que usaremos como punto de activación en “/mnt/lustre”. El segundo comando ejecuta el comando "mount" para activar el sistema de archivos de tipo "lustre", que se encuentra en el servidor lustre-mds1 y en el que el nombre del sistema de archivos es "lustre", que se ve como "/lustre". El comando mount activa el sistema de archivos Lustre en tu directorio local "/mnt/lustre". Por último, el tercer comando cambia el directorio a /mnt/lustre, donde se encuentra montado Lustre.
Ahora activaste el sistema de archivos Lustre en /mnt/lustre. Veamos qué podemos hacer con este sistema de archivos.
6. Visita guiada por las herramientas de la CLI de Lustre
Si no conoces Lustre ni sus herramientas, aquí te explicaremos algunos comandos importantes.
La herramienta de administración de clústeres de bajo nivel de Lustre es "lctl". Podemos usar lctl para configurar y administrar el clúster de Lustre, y para ver los servicios del clúster de Lustre. Para ver los servicios y las instancias en nuestro nuevo clúster de Lustre, ejecuta lo siguiente:
sudo lctl dl
Verás un resultado similar al siguiente, según los cambios que hayas realizado en el archivo de configuración YAML de Lustre:
0 UP osd-ldiskfs lustre-MDT0000-osd lustre-MDT0000-osd_UUID 11
1 UP mgs MGS MGS 12
2 UP mgc MGC10.128.15.2@tcp 374e2d80-0b31-0cd7-b2bf-de35b8119534 4
3 UP mds MDS MDS_uuid 2
4 UP lod lustre-MDT0000-mdtlov lustre-MDT0000-mdtlov_UUID 3
5 UP mdt lustre-MDT0000 lustre-MDT0000_UUID 12
6 UP mdd lustre-MDD0000 lustre-MDD0000_UUID 3
7 UP qmt lustre-QMT0000 lustre-QMT0000_UUID 3
8 UP lwp lustre-MDT0000-lwp-MDT0000 lustre-MDT0000-lwp-MDT0000_UUID 4
9 UP osp lustre-OST0000-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
10 UP osp lustre-OST0002-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
11 UP osp lustre-OST0001-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
12 UP osp lustre-OST0003-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
Podemos ver nuestro servidor de administración de Lustre (MGS) como el elemento 1, nuestro servidor de metadatos de Lustre (MDS) como el elemento 3, nuestro destino de metadatos de Lustre (MDT) como el elemento 5 y nuestros cuatro servidores de almacenamiento de objetos de Lustre (OSS) como los elementos del 8 al 12. Para comprender cuáles son los otros servicios, consulta el Manual de Lustre.
La herramienta de configuración del sistema de archivos de Lustre es "lfs". Podemos usar lfs para administrar el segmentado de archivos en nuestros servidores de almacenamiento de objetos (OSS) de Lustre y sus respectivos destinos de almacenamiento de objetos (OST), así como para ejecutar operaciones comunes del sistema de archivos, como find, df y la administración de cuotas.
El striping nos permite configurar cómo se distribuye un archivo en nuestro clúster de Lustre para ofrecer el mejor rendimiento posible. Si bien segmentar un archivo grande en la mayor cantidad posible de OSS suele ofrecer el mejor rendimiento, ya que paraleliza las E/S, segmentar un archivo pequeño puede generar un rendimiento peor que si ese archivo solo se escribiera en una sola instancia.
Para probar esto, configuremos dos directorios, uno con un recuento de bandas de un OSS y otro con un recuento de bandas de "-1", lo que indica que los archivos escritos en ese directorio deben distribuirse en tantas OSS como sea posible. Los directorios pueden contener configuraciones de bandas que heredan los archivos creados dentro de ellos, pero los subdirectorios y los archivos individuales dentro de ese directorio se pueden configurar para que tengan bandas diferentes si se desea. Para crear estos dos directorios, ejecuta los siguientes comandos mientras estás en el directorio “/mnt/lustre”:
sudo mkdir stripe_one sudo mkdir stripe_all sudo lfs setstripe -c 1 stripe_one/ sudo lfs setstripe -c -1 stripe_all/
Puedes ver la configuración de bandas de un archivo o directorio con lfs getstripe:
sudo lfs getstripe stripe_all/
Verás un resultado que muestra el recuento de bandas establecido como -1:
stripe_all/
stripe_count: -1 stripe_size: 1048576 pattern: raid0 stripe_offset: -1
Ahora, estamos listos para probar las mejoras de rendimiento que se pueden lograr escribiendo un archivo grande segmentado en varios OSS.
7. Prueba la E/S de Lustre
Ejecutaremos dos pruebas simples de E/S de Lustre para demostrar las posibles ventajas de rendimiento y capacidades de escalamiento del sistema de archivos Lustre. Primero, ejecutaremos una prueba simple con la utilidad "dd" para escribir un archivo de 5 GB en nuestro directorio "stripe_one". Ejecuta el siguiente comando:
sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000
El proceso para escribir 5 GB de datos en el sistema de archivos tarda alrededor de 27 segundos en promedio, y se escribe en un solo disco persistente (PD) en un solo servidor de Object Storage (OSS).
Para probar el fraccionamiento en varios OSS y, por lo tanto, en varios PD, solo necesitamos cambiar el directorio de salida en el que escribimos. Ejecuta el siguiente comando:
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Observa que cambiamos "of=stripe_one/test" a "of=stripe_all/test". Esto permitirá que nuestra escritura de un solo flujo distribuya sus escrituras en todos nuestros servidores de almacenamiento de objetos y complete la escritura en un promedio de 5.5 segundos, aproximadamente 4 veces más rápido con cuatro OSS.
Este rendimiento sigue aumentando a medida que agregas servidores de almacenamiento de objetos, y puedes agregar OSS con el sistema de archivos en línea y comenzar a segmentar datos en ellos para aumentar la capacidad y el rendimiento en línea. Las posibilidades son infinitas con Lustre en Google Cloud Platform, y nos entusiasma ver lo que puedes crear y los problemas que puedes resolver.
8. Conclusión
Felicitaciones. Creaste un clúster de Lustre en Google Cloud Platform. Puedes usar estas secuencias de comandos como punto de partida para compilar tu propio clúster de Lustre y para integrarlo en tu clúster de procesamiento basado en la nube.
Limpia la implementación
Sal de la sesión del nodo de Lustre:
exit
Puedes limpiar fácilmente la implementación después de que terminemos ejecutando el siguiente comando desde tu Google Cloud Shell, después de salir del clúster de Lustre:
gcloud deployment-manager deployments delete lustre
Cuando se te indique, escribe Y para continuar. Esta operación puede tardar un poco. Ten paciencia.
Borra el proyecto
Para limpiar, simplemente borraremos nuestro proyecto.
- En el menú de navegación, selecciona IAM y administración.
- Luego, haz clic en Configuración en el submenú.
- Haz clic en el ícono de la papelera con el texto "Borrar proyecto".
- Sigue las instrucciones de las indicaciones
Temas abordados
- Cómo usar el servicio de GCP Deployment Manager
- Cómo configurar e implementar un sistema de archivos Lustre en GCP
- Cómo configurar la segmentación y probar E/S simples en el sistema de archivos Lustre
Buscar asistencia
¿Estás creando algo genial con las secuencias de comandos del administrador de implementación de Lustre? ¿Tienes alguna pregunta? Chatea con nosotros en el grupo de debate de Google Cloud Lustre. Para solicitar funciones, proporcionar comentarios o informar errores, usa este formulario, o bien modifica el código y envía una solicitud de extracción. ¿Quieres hablar con un experto de Google Cloud? Comunícate hoy mismo con el equipo de Google Cloud a través del sitio web de computación de alto rendimiento de Google Cloud.
Más información
Comentarios
Envía tus comentarios sobre este codelab a través de este vínculo. Completar los comentarios lleva menos de 5 minutos. ¡Gracias!