1. Panoramica
Ti diamo il benvenuto nel Codelab di Google per l'esecuzione di un cluster di file system parallelo Lustre su Google Cloud.

I dati sono fondamentali per la pratica del computing ad alte prestazioni e l'accesso a grandi quantità di dati a velocità estremamente elevate e con latenze basse è sempre stata una sfida chiave nell'esecuzione dei carichi di lavoro HPC. Questo requisito di archiviazione ad alte prestazioni non è cambiato nel cloud e, anzi, la possibilità di utilizzare grandi quantità di spazio di archiviazione in modo rapido e semplice è diventata fondamentale.
I centri HPC soddisfano da tempo questa esigenza on-premise utilizzando tecnologie come il file system parallelo Lustre. Lustre è una delle soluzioni di archiviazione open source ad alte prestazioni più popolari oggi e, da giugno 2005, è stato costantemente utilizzato da almeno la metà dei primi dieci e da oltre 60 dei 100 supercomputer più veloci al mondo. Lustre può fare lo scale up fino a centinaia di PB di capacità e offrire le massime prestazioni possibili per i job HPC, con sistemi che forniscono TB/s di throughput in un singolo spazio dei nomi.
Per soddisfare la domanda di spazio di archiviazione, Google Cloud ha adottato due approcci. Innanzitutto, GCP ha collaborato con DDN per portare il software DDN EXAScaler Lustre supportato e di livello enterprise sul GCP Marketplace. In secondo luogo, i nostri ingegneri di Google Cloud hanno sviluppato e reso open source un insieme di script per configurare e implementare facilmente un cluster di archiviazione Lustre su Google Compute Engine utilizzando Google Cloud Deployment Manager.
Lustre su Google Cloud Platform è ugualmente in grado di offrire le massime prestazioni dell'infrastruttura su cui è in esecuzione. Le sue prestazioni su GCP sono così buone che nel 2019 si è classificato all'ottavo posto nel benchmark del sistema di archiviazione IO-500 con il nostro partner DDN, rappresentando il file system basato sul cloud con il ranking più alto su IO-500. Oggi ti guideremo nel deployment degli script di Deployment Manager open source per Lustre. Se ti interessa un'esperienza Lustre aziendale e protetta, con il supporto di esperti Lustre per il tuo cluster Lustre, nonché funzionalità come una GUI di gestione e monitoraggio o ottimizzazioni di Lustre, ti consigliamo di esaminare l'offerta DDN EXAScaler Marketplace.
Obiettivi didattici
- Come utilizzare il servizio GCP Deployment Manager
- Come configurare ed eseguire il deployment di un file system Lustre su GCP.
- Come configurare lo striping e testare I/O semplici nel file system Lustre.
Prerequisiti
- Account Google Cloud Platform e un progetto con fatturazione
- Esperienza di base con Linux
2. Configurazione
Configurazione dell'ambiente autonomo
Crea un progetto
Se non hai già un Account Google (Gmail o G Suite), devi crearne uno. Accedi alla console di Google Cloud ( console.cloud.google.com) e apri la pagina Gestisci risorse:

Fai clic su Crea progetto.

Inserisci un nome per il progetto. Ricorda l'ID progetto (evidenziato in rosso nello screenshot sopra). L'ID progetto deve essere un nome univoco tra tutti i progetti Google Cloud. Se il nome del progetto non è univoco, Google Cloud genererà un ID progetto casuale basato sul nome del progetto.
Successivamente, devi abilitare la fatturazione in Developers Console per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costarti più di qualche dollaro, ma potrebbe essere più cara se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "Conclusione" alla fine di questo documento). Il Calcolatore prezzi di Google Cloud Platform è disponibile qui.
I nuovi utenti di Google Cloud Platform possono beneficiare di una prova senza costi di 300$.
Google Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzeremo Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Avvia Google Cloud Shell
Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Quindi, fai clic su Avvia Cloud Shell:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni della rete e semplificando l'autenticazione. Gran parte del lavoro per questo lab, se non tutto, può essere svolto semplicemente con un browser web o un Google Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID:
$ gcloud auth list
Output comando:
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
$ gcloud config list project
Output comando:
[core]
project = <PROJECT_ID>
Se l'ID progetto non è impostato correttamente, puoi impostarlo con questo comando:
$ gcloud config set project <PROJECT_ID>
Output comando:
Updated property [core/project].
3. Prepara e rivedi la configurazione del deployment di Lustre
Scarica gli script di Deployment Manager per Lustre
Nella sessione di Cloud Shell, esegui questo comando per clonare (scaricare) il repository Git che contiene i file di deployment manager di Lustre per Google Cloud:
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
Passa alla directory di configurazione del deployment di Lustre eseguendo il seguente comando:
cd deploymentmanager-samples/community/lustre/
Configura il file YAML di deployment di Lustre
Deployment Manager utilizza un file YAML per fornire la configurazione del deployment. Questo file YAML descrive in dettaglio la configurazione del deployment, ad esempio la versione di Lustre di cui eseguire il deployment e i tipi di istanza macchina di cui eseguire il deployment. Il file è configurato per il deployment in un nuovo progetto senza aumenti di quota, ma puoi modificare il tipo di macchina o la capacità in base alle tue esigenze per questo codelab. Questo codelab è scritto per utilizzare questi valori predefiniti, quindi se apporti modifiche, devi riportarle in tutto il codelab per evitare errori. In produzione, consigliamo almeno un'istanza con 32 vCPU per il nodo MDS e almeno un'istanza con 8 o 16 vCPU per i nodi OSS, a seconda della capacità e del tipo di archiviazione.
Per esaminare o modificare il file YAML nella sessione Cloud Shell, apri il file YAML di configurazione del deployment Lustre-cluster.yaml. Puoi utilizzare l'editor della riga di comando che preferisci (vi, nano, emacs e così via) oppure l'editor di codice Cloud Console per visualizzare i contenuti del file:

I contenuti del file saranno simili a questi:
# [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]
All'interno di questo file YAML sono presenti diversi campi. I campi seguenti contrassegnati con un asterisco (*) sono obbligatori. Questi campi includono:
Configurazione cluster
- cluster_name* - Nome del cluster Lustre, antepone tutte le risorse di cui è stato eseguito il deployment
- zona* - Zona in cui eseguire il deployment del cluster
- cidr* - Intervallo IP in formato CIDR
- external_ips* - True/False, i nodi Lustre hanno indirizzi IP esterni. Se false, Cloud NAT viene configurato come gateway NAT
- vpc_net: definisci questo campo e il campo vpc_subnet per eseguire il deployment del cluster Lustre in un VPC esistente
- vpc_subnet: subnet VPC esistente in cui eseguire il deployment del cluster Lustre
- shared_vpc_host_proj: definisci questo campo, nonché i campi vpc_net e vpc_subnet, per eseguire il deployment del cluster in un VPC condiviso
Configurazione del file system
- fs_name: nome del file system Lustre
- lustre_version: versione di Lustre da implementare. Utilizza "latest-release" per implementare l'ultimo ramo da https://downloads.whamcloud.com/public/lustre/ o lustre-X.X.X per implementare qualsiasi altra versione
- e2fs_version - E2fsprogs version to deploy, use "latest" to deploy the latest branch from https://downloads.whamcloud.com/public/e2fsprogs/ or X.XX.X.wcX to deploy any other versions
Configurazione MDS/MGS
- mds_ip_address - Indirizzo IP interno da specificare per il nodo MDS/MGS
- mds_machine_type - Tipo di macchina da utilizzare per il nodo MDS/MGS (vedi https://cloud.google.com/compute/docs/machine-types)
- mds_boot_disk_type: tipo di disco da utilizzare per il disco di avvio MDS/MGS (pd-standard, pd-ssd)
- mds_boot_disk_size_gb - Size of MDS boot disk in GB
- mdt_disk_type* - Tipo di disco da utilizzare per il disco di destinazione dei metadati (MDT) (pd-standard, pd-ssd, local-ssd)
- mdt_disk_size_gb* - Size of MDT disk in GB
Configurazione OSS
- oss_node_count* - Numero di nodi Object Storage Server (OSS) da creare
- oss_ip_range_start: inizio dell'intervallo IP per i nodi OSS. Se non specificato, utilizza l'assegnazione automatica dell'IP
- oss_machine_type - Tipo di macchina da utilizzare per i nodi OSS
- oss_boot_disk_type: tipo di disco da utilizzare per il disco di avvio OSS (pd-standard, pd-ssd)
- oss_boot_disk_size_gb - Size of MDS boot disk in GB
- ost_disk_type* - Tipo di disco da utilizzare per il disco Object Storage Target (OST) (pd-standard, pd-ssd, local-ssd)
- ost_disk_size_gb* - Size of OST disk in GB
4. Deployment e verifica della configurazione
Esegui il deployment della configurazione
Nella sessione di Cloud Shell, esegui questo comando dalla cartella Lustre-gcp:
gcloud deployment-manager deployments create lustre --config lustre.yaml
Questo comando crea un deployment denominato Lustre. Il completamento dell'operazione può richiedere fino a 10-20 minuti, quindi abbi pazienza.
Una volta completato il deployment, vedrai un output simile al seguente:
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 il deployment

Segui questi passaggi per visualizzare il deployment nella console Google Cloud:
- Nella console di Cloud Platform, apri il menu Prodotti e servizi nell'angolo in alto a sinistra della console (tre linee orizzontali).
- Fai clic su Deployment Manager.
- Fai clic su Lustre per visualizzare i dettagli del deployment.
- Fai clic su Panoramica - Lustre. Il riquadro Proprietà del deployment mostra la configurazione generale del deployment.
- Fai clic su "Visualizza" nella proprietà Config. Il riquadro Configurazione mostra i contenuti del file YAML di configurazione del deployment modificato in precedenza. Verifica che i contenuti siano corretti prima di procedere. Se devi modificare una configurazione di deployment, elimina il deployment seguendo i passaggi descritti in "Pulisci il deployment" e riavvialo seguendo i passaggi descritti in "Configura il file YAML di deployment di Lustre".
- (Facoltativo) Nella sezione Lustre-cluster, fai clic su ciascuna delle risorse create dal modello Lustre.jinja ed esamina i dettagli.
Una volta verificata la configurazione del deployment, confermiamo che le istanze del cluster siano avviate. Nella console Cloud Platform, nel menu Prodotti e servizi, fai clic su Compute Engine > Istanze VM.

Nella pagina Istanze VM, esamina le cinque istanze di macchine virtuali create da Deployment Manager. Sono inclusi lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 e lustre-oss4.
5. Accedere al cluster Lustre
Monitorare l'installazione
Nella pagina Istanze VM, fai clic su lustre-mds1 per aprire la pagina dei dettagli dell'istanza.

Fai clic su Porta seriale 1 (console) per aprire la pagina di output della console seriale. Utilizzeremo questo output seriale per monitorare la procedura di installazione dell'istanza MDS e attendere il completamento di startup-script. Fai clic sul pulsante "Aggiorna" nella parte superiore della pagina per aggiornare l'output seriale. Il nodo si riavvierà una volta per avviarsi nel kernel Lustre e visualizzerà messaggi simili a quelli riportati di seguito:
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)
Ciò significa che Lustre è installato sul cluster Lustre e il file system è pronto per essere utilizzato.
Accedere al cluster Lustre
Nella sessione Cloud Shell, fai clic sul pulsante SSH accanto all'istanza lustre-mds1 nella console Google Cloud. In alternativa, esegui questo comando in Cloud Shell, sostituendo <ZONE> con la zona del nodo lustre-mds1:
gcloud compute ssh lustre-mds1 --zone=<ZONE>
Questo comando accede alla macchina virtuale lustre-mds1. Si tratta dell'istanza del server di metadati (MDS) di Lustre, che funge anche da istanza del server di gestione (MGS) di Lustre. Questa istanza gestisce tutte le richieste di autenticazione e metadati per il file system.
Montiamo il file system sull'istanza lustre-mds1 per poterlo testare in un secondo momento. Esegui i seguenti comandi:
sudo mkdir /mnt/lustre sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre cd /mnt/lustre
Questi tre comandi eseguono tre operazioni. Il primo comando crea una directory locale che utilizzeremo come punto di montaggio in "/mnt/lustre". Il secondo comando esegue il comando "mount" per montare il file system di tipo "lustre", che si trova sul server lustre-mds1 e in cui il nome del file system è "lustre", visualizzato come "/lustre". Il comando mount monta il file system Lustre nella directory locale "/mnt/lustre". Infine, il terzo comando cambia la directory in /mnt/lustre, dove è montato Lustre.
Ora hai montato il file system Lustre in /mnt/lustre. Vediamo cosa possiamo fare con questo file system.
6. Tour degli strumenti CLI di Lustre
Se non hai familiarità con Lustre e i suoi strumenti, esamineremo alcuni comandi importanti.
Lo strumento di gestione dei cluster di basso livello di Lustre è "lctl". Possiamo utilizzare lctl per configurare e gestire il cluster Lustre e per visualizzare i servizi del cluster Lustre. Per visualizzare i servizi e le istanze nel nuovo cluster Lustre, esegui:
sudo lctl dl
A seconda delle modifiche apportate al file di configurazione YAML di Lustre, vedrai un output simile al seguente:
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
Possiamo vedere il nostro Lustre Management Server (MGS) come elemento 1, il nostro Lustre Metadata Server (MDS) come elemento 3, il nostro Lustre Metadata Target (MDT) come elemento 5 e i nostri quattro Lustre Object Storage Server (OSS) come elementi da 8 a 12. Per capire quali sono gli altri servizi, consulta il manuale di Lustre.
Lo strumento di configurazione del file system di Lustre è "lfs". Possiamo utilizzare lfs per gestire la suddivisione dei file nei nostri server di archiviazione di oggetti Lustre (OSS) e nei rispettivi target di archiviazione di oggetti (OST), nonché per eseguire operazioni comuni del file system come find, df e la gestione delle quote.
Lo striping ci consente di configurare la modalità di distribuzione di un file nel nostro cluster Lustre per offrire le migliori prestazioni possibili. Sebbene la suddivisione di un file di grandi dimensioni nel maggior numero possibile di OSS spesso offra le migliori prestazioni parallelizzando l'I/O, la suddivisione di un file di piccole dimensioni potrebbe comportare prestazioni peggiori rispetto a quelle ottenute se il file fosse scritto in una sola istanza.
Per testare questa funzionalità, configuriamo due directory: una con un conteggio di strisce di un OSS e una con un conteggio di strisce di "-1", che indica che i file scritti in quella directory devono essere distribuiti su quanti più OSS possibili. Le directory possono contenere configurazioni di striping ereditate dai file creati al loro interno, ma le sottodirectory e i singoli file all'interno di quella directory possono essere configurati in modo diverso, se necessario. Per creare queste due directory, esegui i seguenti comandi mentre ti trovi nella directory "/mnt/lustre":
sudo mkdir stripe_one sudo mkdir stripe_all sudo lfs setstripe -c 1 stripe_one/ sudo lfs setstripe -c -1 stripe_all/
Puoi visualizzare le impostazioni di striping di un file o di una directory utilizzando lfs getstripe:
sudo lfs getstripe stripe_all/
Vedrai un output che mostra il conteggio delle strisce impostato su -1:
stripe_all/
stripe_count: -1 stripe_size: 1048576 pattern: raid0 stripe_offset: -1
Ora siamo pronti a testare i miglioramenti delle prestazioni ottenibili scrivendo un file di grandi dimensioni distribuito su più OSS.
7. Test Lustre I/O
Eseguiamo due semplici test di I/O Lustre per dimostrare i possibili vantaggi in termini di prestazioni e le funzionalità di scalabilità del file system Lustre. Innanzitutto, eseguiamo un semplice test utilizzando l'utilità "dd" per scrivere un file di 5 GB nella directory "stripe_one". Esegui questo comando:
sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000
Il processo di scrittura di 5 GB di dati nel file system richiede in media circa 27 secondi, scrivendo su un singolo disco permanente (PD) su un singolo server Object Storage (OSS).
Per testare lo striping su più OSS e quindi su più PD, è sufficiente modificare la directory di output in cui scriviamo. Esegui questo comando:
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Nota che abbiamo modificato "of=stripe_one/test" in "of=stripe_all/test". In questo modo, la scrittura di un singolo flusso viene distribuita su tutti i nostri server di archiviazione degli oggetti e il completamento della scrittura avviene in media in 5,5 secondi, circa 4 volte più velocemente con quattro OSS.
Queste prestazioni continuano ad aumentare man mano che aggiungi server Object Storage e puoi aggiungere OSS con il file system online e iniziare a distribuire i dati per aumentare la capacità e le prestazioni online. Le possibilità sono infinite con Lustre su Google Cloud Platform e non vediamo l'ora di scoprire cosa riuscirai a creare e quali problemi riuscirai a risolvere.
8. Conclusione
Congratulazioni, hai creato un cluster Lustre su Google Cloud. Puoi utilizzare questi script come punto di partenza per creare il tuo cluster Lustre e integrarlo con il tuo cluster di computing basato sul cloud.
Pulisci il deployment
Esci dal nodo Lustre:
exit
Al termine, puoi liberare spazio nel deployment eseguendo questo comando da Google Cloud Shell, dopo aver eseguito l'uscita dal cluster Lustre:
gcloud deployment-manager deployments delete lustre
Quando viene richiesto, digita Y per continuare. Questa operazione può richiedere del tempo, quindi ti chiediamo di avere pazienza.
Elimina il progetto
Per la pulizia, eliminiamo semplicemente il progetto.
- Nel menu di navigazione, seleziona IAM e amministrazione.
- Poi fai clic su Impostazioni nel sottomenu.
- Fai clic sull'icona del cestino con il testo "Elimina progetto".
- Segui le istruzioni dei prompt.
Argomenti trattati
- Come utilizzare il servizio GCP Deployment Manager.
- Come configurare ed eseguire il deployment di un file system Lustre su GCP.
- Come configurare lo striping e testare I/O semplici nel file system Lustre.
Trova assistenza
Stai creando qualcosa di interessante utilizzando gli script di Deployment Manager di Lustre? Domande? Contattaci nel gruppo di discussione Google Cloud Lustre. Per richiedere funzionalità, fornire feedback o segnalare bug, utilizza questo modulo oppure sentiti libero di modificare il codice e inviare una richiesta di pull. Vuoi parlare con un esperto di Google Cloud? Contatta oggi stesso il team Google Cloud tramite il sito web di Google Cloud dedicato al computing ad alte prestazioni.
Scopri di più
Feedback
Invia un feedback su questo codelab utilizzando questo link. La compilazione del feedback richiede meno di 5 minuti. Grazie.