1. Présentation
Bienvenue dans l'atelier de programmation Google pour exécuter un cluster de système de fichiers parallèles Lustre sur Google Cloud Platform.

Les données sont au cœur du calcul hautes performances (HPC). L'accès à de grandes quantités de données à des vitesses extrêmement élevées et avec une faible latence a toujours été un défi majeur pour l'exécution des charges de travail HPC. Cette exigence de stockage haute performance n'a pas changé dans le cloud. En fait, la capacité à utiliser de grandes quantités de stockage rapidement et facilement est devenue primordiale.
Les centres HPC répondent depuis longtemps à ce besoin sur site à l'aide de technologies telles que le système de fichiers parallèles Lustre. Lustre est l'une des solutions de stockage hautes performances Open Source les plus populaires aujourd'hui. Depuis juin 2005, elle est constamment utilisée par au moins la moitié des dix et plus de 60 des 100 supercalculateurs les plus rapides au monde. Lustre peut évoluer jusqu'à des centaines de pétaoctets de capacité et offrir les meilleures performances possibles pour les jobs HPC, avec des systèmes offrant des téraoctets par seconde de débit dans un seul espace de noms.
Pour répondre à la demande de stockage, Google Cloud a adopté deux approches. Tout d'abord, GCP s'est associé à DDN pour proposer son logiciel DDN EXAScaler Lustre de classe entreprise compatible sur GCP Marketplace. Deuxièmement, nos ingénieurs Google Cloud ont développé et mis à disposition en Open Source un ensemble de scripts permettant de configurer et de déployer facilement un cluster de stockage Lustre sur Google Compute Engine à l'aide de Google Cloud Deployment Manager.
Lustre sur Google Cloud Platform est tout aussi capable de fournir les performances maximales de l'infrastructure sur laquelle il s'exécute. Ses performances sur GCP sont si bonnes qu'il s'est classé 8e au benchmark IO-500 des systèmes de stockage en 2019 avec notre partenaire DDN, ce qui représente le système de fichiers basé sur le cloud le mieux classé de l'IO-500. Aujourd'hui, nous allons vous expliquer comment déployer les scripts Open Source Deployment Manager pour Lustre. Si vous souhaitez bénéficier d'une expérience Lustre d'entreprise renforcée, avec une assistance d'experts Lustre pour votre cluster Lustre, ainsi que des fonctionnalités telles qu'une interface utilisateur graphique de gestion et de surveillance ou des réglages Lustre, nous vous recommandons d'examiner l'offre DDN EXAScaler sur le Marketplace.
Points abordés
- Utiliser le service GCP Deployment Manager
- Découvrez comment configurer et déployer un système de fichiers Lustre sur GCP.
- Configurer le striping et tester les E/S simples sur le système de fichiers Lustre
Prérequis
- Compte Google Cloud Platform et projet avec facturation
- Expérience Linux de base
2. Configuration
Configuration de l'environnement au rythme de chacun
Créer un projet
Si vous ne possédez pas encore de compte Google (Gmail ou G Suite), vous devez en créer un. Connectez-vous à la console Google Cloud Platform ( console.cloud.google.com) et ouvrez la page Gérer les ressources :

Cliquez sur Créer un projet.

Saisissez le nom du projet. Retenez l'ID du projet (mis en évidence en rouge dans la capture d'écran ci-dessus). L'ID du projet doit être un nom unique parmi tous les projets Google Cloud. Si le nom de votre projet n'est pas unique, Google Cloud générera un ID de projet aléatoire basé sur le nom du projet.
Vous devez ensuite activer la facturation dans la console Developers pour pouvoir utiliser les ressources Google Cloud.
Suivre cet atelier de programmation ne devrait pas vous coûter plus d'un euro. Cependant, cela peut s'avérer plus coûteux si vous décidez d'utiliser davantage de ressources ou si vous n'interrompez pas les ressources (voir la section "Conclusion" à la fin du présent document). Le simulateur de coût Google Cloud Platform est disponible sur cette page.
Les nouveaux utilisateurs de Google Cloud Platform peuvent bénéficier d'un essai sans frais avec 300$de crédits.
Google Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Lancer Google Cloud Shell
Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

Cliquez ensuite sur Démarrer Cloud Shell :

Le provisionnement de l'environnement et la connexion ne devraient pas prendre plus de quelques minutes :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et simplifie l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier dans un simple navigateur Web ou sur un Google Chromebook.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini sur votre PROJECT_ID :
$ gcloud auth list
Résultat de la commande :
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
$ gcloud config list project
Résultat de la commande :
[core]
project = <PROJECT_ID>
Si l'ID de projet n'est pas défini correctement, vous pouvez le définir avec cette commande :
$ gcloud config set project <PROJECT_ID>
Résultat de la commande :
Updated property [core/project].
3. Préparer et examiner la configuration du déploiement Lustre
Télécharger les scripts Deployment Manager Lustre
Dans la session Cloud Shell, exécutez la commande suivante pour cloner (télécharger) le dépôt Git contenant les fichiers Deployment Manager de Lustre pour Google Cloud Platform :
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
Passez au répertoire de configuration du déploiement Lustre en exécutant la commande suivante :
cd deploymentmanager-samples/community/lustre/
Configurer le fichier YAML de déploiement Lustre
Deployment Manager utilise un fichier YAML pour fournir la configuration du déploiement. Ce fichier YAML détaille la configuration du déploiement, comme la version de Lustre à déployer et les types d'instances de machine à déployer. Par défaut, le fichier est configuré pour être déployé dans un nouveau projet sans augmentation de quota. Toutefois, vous pouvez modifier le type de machine ou la capacité comme vous le souhaitez pour cet atelier de programmation. Cet atelier de programmation est écrit pour utiliser ces valeurs par défaut. Par conséquent, si vous apportez des modifications, vous devez les appliquer tout au long de cet atelier pour éviter les erreurs. En production, nous recommandons au moins une instance à 32 vCPU pour le nœud MDS, et au moins une instance à 8 ou 16 vCPU pour les nœuds OSS, en fonction de la capacité et du type de stockage.
Pour examiner ou modifier le fichier YAML dans la session Cloud Shell, ouvrez le fichier YAML de configuration du déploiement Lustre-cluster.yaml. Pour afficher le contenu du fichier, vous pouvez utiliser l'éditeur de ligne de commande de votre choix (vi, nano, emacs, etc.) ou l'éditeur de code de la console Cloud :

Le contenu du fichier se présente comme suit :
# [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]
Ce fichier YAML contient plusieurs champs. Les champs ci-dessous marqués d'un astérisque (*) sont obligatoires. Ces champs sont les suivants :
Configuration du cluster
- cluster_name* : nom du cluster Lustre, préfixe toutes les ressources déployées
- zone* : zone dans laquelle déployer le cluster.
- cidr* : plage d'adresses IP au format CIDR
- external_ips* : "True" ou "False" (les nœuds Lustre ont des adresses IP externes). Si la valeur est "false", une passerelle NAT Cloud NAT est configurée.
- vpc_net : définissez ce champ et le champ vpc_subnet pour déployer le cluster Lustre sur un VPC existant.
- vpc_subnet : sous-réseau VPC existant sur lequel déployer le cluster Lustre
- shared_vpc_host_proj : définissez ce champ, ainsi que les champs vpc_net et vpc_subnet, pour déployer le cluster dans un VPC partagé.
Configuration du système de fichiers
- fs_name : nom du système de fichiers Lustre
- lustre_version : version de Lustre à déployer. Utilisez "latest-release" pour déployer la dernière branche depuis https://downloads.whamcloud.com/public/lustre/ ou lustre-X.X.X pour déployer d'autres versions.
- e2fs_version : version d'e2fsprogs à déployer. Utilisez "latest" pour déployer la dernière branche depuis https://downloads.whamcloud.com/public/e2fsprogs/ ou X.XX.X.wcX pour déployer d'autres versions.
Configuration MDS/MGS
- mds_ip_address : adresse IP interne à spécifier pour le nœud MDS/MGS
- mds_machine_type : type de machine à utiliser pour le nœud MDS/MGS (voir https://cloud.google.com/compute/docs/machine-types)
- mds_boot_disk_type : type de disque à utiliser pour le disque de démarrage MDS/MGS (pd-standard, pd-ssd)
- mds_boot_disk_size_gb : taille du disque de démarrage MDS en Go
- mdt_disk_type* : type de disque à utiliser pour le disque MDT (pd-standard, pd-ssd, local-ssd)
- mdt_disk_size_gb* : taille du disque MDT en Go
Configuration OSS
- oss_node_count* : nombre de nœuds OSS (Object Storage Server) à créer
- oss_ip_range_start : début de la plage d'adresses IP pour les nœuds OSS. Si aucune valeur n'est spécifiée, utiliser l'attribution automatique d'adresses IP
- oss_machine_type : type de machine à utiliser pour les nœuds OSS
- oss_boot_disk_type : type de disque à utiliser pour le disque de démarrage OSS (pd-standard, pd-ssd)
- oss_boot_disk_size_gb : taille du disque de démarrage MDS en Go
- ost_disk_type* : type de disque à utiliser pour le disque OST (Object Storage Target) (pd-standard, pd-ssd, local-ssd)
- ost_disk_size_gb* : taille du disque OST en Go
4. Déployer et vérifier la configuration
Déployer la configuration
Dans la session Cloud Shell, exécutez la commande suivante à partir du dossier Lustre-gcp :
gcloud deployment-manager deployments create lustre --config lustre.yaml
Cette commande crée un déploiement nommé Lustre. L'opération peut prendre entre 10 et 20 minutes. Merci de patienter.
Une fois le déploiement terminé, un résultat semblable à celui-ci s'affiche :
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 []
Vérifier le déploiement

Pour afficher le déploiement dans la console Google Cloud Platform, procédez comme suit :
- Dans la console Cloud Platform, ouvrez le menu Produits et services en haut à gauche de la console (trois lignes horizontales).
- Cliquez sur Deployment Manager.
- Cliquez sur Lustre pour afficher les détails du déploiement.
- Cliquez sur Vue d'ensemble – Lustre. Le volet Propriétés du déploiement affiche la configuration globale du déploiement.
- Cliquez sur Afficher dans la propriété Config. Le volet Config affiche le contenu du fichier YAML de configuration du déploiement modifié précédemment. Vérifiez que le contenu est correct avant de continuer. Si vous devez modifier une configuration de déploiement, supprimez simplement le déploiement en suivant les étapes décrites dans "Nettoyer le déploiement", puis redémarrez le déploiement en suivant les étapes décrites dans "Configurer le fichier YAML de déploiement Lustre".
- (Facultatif) Dans la section Lustre-cluster, cliquez sur chacune des ressources créées par le modèle Lustre.jinja et examinez les détails.
Maintenant que la configuration du déploiement est vérifiée, confirmons que les instances du cluster sont démarrées. Dans la console Cloud Platform, dans le menu Produits et services, cliquez sur Compute Engine > Instances de VM.

Sur la page Instances de VM, examinez les cinq instances de machines virtuelles créées par Deployment Manager. Cela inclut lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 et lustre-oss4.
5. Accéder au cluster Lustre
Surveiller l'installation
Sur la page "Instances de VM", cliquez sur lustre-mds1 pour ouvrir la page "Détails de l'instance".

Cliquez sur Port série 1 (console) pour ouvrir la page de sortie de la console série. Nous utiliserons cette sortie série pour surveiller le processus d'installation de l'instance MDS et attendre la fin du script de démarrage. Cliquez sur le bouton "Actualiser" en haut de la page pour mettre à jour la sortie série. Le nœud redémarre une fois pour démarrer dans le noyau Lustre et affiche des messages semblables à ceux ci-dessous :
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)
Cela signifie que Lustre est installé sur le cluster Lustre et que le système de fichiers est prêt à être utilisé.
Accéder au cluster Lustre
Dans la session Cloud Shell, cliquez sur le bouton SSH à côté de l'instance lustre-mds1 dans la console Google Cloud. Vous pouvez également exécuter la commande suivante dans Cloud Shell, en remplaçant <ZONE> par la zone du nœud lustre-mds1 :
gcloud compute ssh lustre-mds1 --zone=<ZONE>
Cette commande se connecte à la machine virtuelle lustre-mds1. Il s'agit de l'instance du serveur de métadonnées (MDS) Lustre, qui fait également office d'instance du serveur de gestion (MGS) Lustre. Cette instance gère toutes les requêtes d'authentification et de métadonnées pour le système de fichiers.
Montons le système de fichiers sur notre instance lustre-mds1 pour pouvoir le tester ultérieurement. Exécutez les commandes suivantes :
sudo mkdir /mnt/lustre sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre cd /mnt/lustre
Ces trois commandes effectuent trois actions. La première commande crée un répertoire local que nous utiliserons comme point de montage à l'adresse "/mnt/lustre". La deuxième commande exécute la commande "mount" pour monter le système de fichiers de type "lustre", qui se trouve sur le serveur lustre-mds1 et dont le nom est "lustre", visible sous la forme "/lustre". La commande mount installe le système de fichiers Lustre dans votre répertoire local "/mnt/lustre". Enfin, la troisième commande permet de passer au répertoire /mnt/lustre, où Lustre est installé.
Vous avez maintenant installé le système de fichiers Lustre sur /mnt/lustre. Voyons ce que nous pouvons faire avec ce système de fichiers.
6. Visite guidée des outils CLI Lustre
Si vous ne connaissez pas Lustre et ses outils, nous allons vous présenter quelques commandes importantes.
L'outil de gestion de cluster de bas niveau de Lustre est "lctl". Nous pouvons utiliser lctl pour configurer et gérer le cluster Lustre, et pour afficher les services du cluster Lustre. Pour afficher les services et les instances de notre nouveau cluster Lustre, exécutez la commande suivante :
sudo lctl dl
Vous obtiendrez un résultat semblable à celui ci-dessous, en fonction des modifications que vous avez apportées au fichier de configuration YAML 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
Nous pouvons voir notre serveur de gestion Lustre (MGS) en tant qu'élément 1, notre serveur de métadonnées Lustre (MDS) en tant qu'élément 3, notre cible de métadonnées Lustre (MDT) en tant qu'élément 5 et nos quatre serveurs de stockage d'objets Lustre (OSS) en tant qu'éléments 8 à 12. Pour comprendre ce que sont les autres services, veuillez consulter le manuel Lustre.
L'outil de configuration du système de fichiers Lustre est "lfs". Nous pouvons utiliser lfs pour gérer le striping des fichiers sur nos serveurs de stockage d'objets (OSS) Lustre et leurs cibles de stockage d'objets (OST) respectives, ainsi que pour exécuter des opérations courantes sur le système de fichiers, comme la recherche, df et la gestion des quotas.
Le striping nous permet de configurer la façon dont un fichier est distribué sur notre cluster Lustre afin d'offrir les meilleures performances possibles. Bien que la répartition d'un fichier volumineux sur le plus grand nombre possible d'OSS offre souvent les meilleures performances en parallélisant les E/S, la répartition d'un petit fichier peut entraîner des performances inférieures à celles obtenues si ce fichier n'était écrit que sur une seule instance.
Pour tester cela, configurons deux répertoires : l'un avec un nombre de bandes OSS de 1 et l'autre avec un nombre de bandes de -1, ce qui indique que les fichiers écrits dans ce répertoire doivent être répartis sur le plus grand nombre possible d'OSS. Les répertoires peuvent contenir des configurations de bandes qui sont héritées par les fichiers créés dans ces répertoires. Toutefois, les sous-répertoires et les fichiers individuels de ce répertoire peuvent ensuite être configurés pour être mis en bandes différemment si vous le souhaitez. Pour créer ces deux répertoires, exécutez les commandes suivantes dans le répertoire "/mnt/lustre" :
sudo mkdir stripe_one sudo mkdir stripe_all sudo lfs setstripe -c 1 stripe_one/ sudo lfs setstripe -c -1 stripe_all/
Vous pouvez afficher les paramètres de bande d'un fichier ou d'un répertoire à l'aide de lfs getstripe :
sudo lfs getstripe stripe_all/
Le résultat affiche le nombre de bandes défini sur -1 :
stripe_all/
stripe_count: -1 stripe_size: 1048576 pattern: raid0 stripe_offset: -1
Nous sommes maintenant prêts à tester les améliorations de performances réalisables en écrivant un fichier volumineux réparti sur plusieurs OSS.
7. Tester les E/S Lustre
Nous allons exécuter deux tests simples des E/S Lustre pour démontrer les avantages potentiels en termes de performances et les capacités de scaling du système de fichiers Lustre. Nous allons commencer par exécuter un test simple à l'aide de l'utilitaire "dd" pour écrire un fichier de 5 Go dans notre répertoire "stripe_one". Exécutez la commande suivante :
sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000
Le processus d'écriture de 5 Go de données dans le système de fichiers prend en moyenne 27 secondes, en écrivant sur un seul disque persistant (PD) sur un seul serveur Object Storage (OSS).
Pour tester le striping sur plusieurs OSS et donc sur plusieurs, il suffit de modifier le répertoire de sortie dans lequel nous écrivons. Exécutez la commande suivante :
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Notez que nous avons remplacé "of=stripe_one/test" par "of=stripe_all/test". Cela permettra à notre écriture de flux unique de répartir ses écritures sur tous nos serveurs de stockage d'objets et de terminer l'écriture en 5, 5 secondes en moyenne, soit environ quatre fois plus rapidement avec quatre OSS.
Ces performances continuent d'augmenter à mesure que vous ajoutez des serveurs de stockage d'objets. Vous pouvez ajouter des OSS avec le système de fichiers en ligne et commencer à répartir les données sur ces serveurs pour augmenter la capacité et les performances en ligne. Les possibilités sont infinies avec Lustre sur Google Cloud Platform. Nous sommes impatients de découvrir ce que vous allez créer et les problèmes que vous allez résoudre.
8. Conclusion
Félicitations, vous avez créé un cluster Lustre sur Google Cloud Platform ! Vous pouvez utiliser ces scripts comme point de départ pour créer votre propre cluster Lustre et l'intégrer à votre cluster de calcul basé sur le cloud.
Nettoyer le déploiement
Déconnectez-vous du nœud Lustre :
exit
Une fois terminé, vous pouvez facilement nettoyer le déploiement en exécutant la commande suivante depuis votre Google Cloud Shell, après vous être déconnecté du cluster Lustre :
gcloud deployment-manager deployments delete lustre
Lorsque vous y êtes invité, saisissez Y pour continuer. Cette opération peut prendre un certain temps. Veuillez patienter.
Supprimer le projet
Pour effectuer le nettoyage, il suffit de supprimer notre projet.
- Dans le menu de navigation, sélectionnez "IAM et administration".
- Cliquez ensuite sur "Paramètres" dans le sous-menu.
- Cliquez sur l'icône en forme de corbeille avec le texte "Supprimer le projet".
- Suivez les instructions.
Points abordés
- Utiliser le service GCP Deployment Manager
- Découvrez comment configurer et déployer un système de fichiers Lustre sur GCP.
- Configurer le striping et tester les E/S simples sur le système de fichiers Lustre
Obtenir de l'aide
Vous avez créé quelque chose de génial à l'aide des scripts Deployment Manager de Lustre ? Vous avez des questions ? Discutez avec nous dans le groupe de discussion Google Cloud Lustre. Pour demander des fonctionnalités, envoyer des commentaires ou signaler des bugs, veuillez utiliser ce formulaire. Vous pouvez également modifier le code et envoyer une demande d'extraction. Vous souhaitez parler à un expert Google Cloud ? Contactez l'équipe Google Cloud dès aujourd'hui sur le site Web de Google Cloud sur le calcul hautes performances.
En savoir plus
Commentaires
Veuillez nous faire part de vos commentaires sur cet atelier de programmation en cliquant sur ce lien. Il ne vous faudra pas plus de cinq minutes pour nous faire part de vos commentaires. Merci !