Beispiel eines SLURM-Clusters auf CODE-DE FRA1-1 Cloud mit ElastiCluster

In dieser Anleitung werden Sie ElastiCluster für die automatische Einrichtung eines SLURM-Clusters in einer OpenStack-Umgebung verwenden. Die Verwendung von ElastiCluster

  • ermöglicht eine schnelle Einrichtung von Rechenclustern,

  • erfordert nur ein Minimum an Konfigurationsoptionen und

  • bietet eine integrierte Unterstützung für OpenStack und SLURM.

Damit ist eine schnelle Bereitstellung eines SLURM-Clusters möglich, der aus einem Master-/Login-Knoten und der erforderlichen Anzahl von Rechenknoten besteht.

Was wir behandeln werden

  • Wie man einen Keystone-Benutzer anlegt

  • Erstellen eines neuen Schlüsselpaares namens 2468 für den SSH-Zugang zwischen den Clusterknoten

  • Erstellen der Sicherheitsgruppe elasticluster_slurm, um Port 22 für den SSH-Zugang zu aktivieren

  • Installation von ElastiCluster

  • Bereitstellen der ElastiCluster-Konfiguration

  • Bereitstellen des Clusters

Voraussetzungen

Nr. 1 Konto

Sie benötigen ein CODE-DE Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.

Nr. 2 Projektquoten und Flavor-Obergrenzen

Der Artikel Dashboard-Übersicht - Projektkontingente und Flavors enthält grundlegende Definitionen von Quotas und Flavors in OpenStack. (Kurz gesagt: Eine Quote gibt an, wie viele Instanzen Sie insgesamt haben können, während ein Flavor angibt, wie groß eine Instanz sein soll).

Cluster verwenden voll ausgestattete Instanzen (virtuelle Maschinen) mit z.B. 4 CPUs und 32 GB RAM. Wenn Ihr Kontingent für CPUs insgesamt 24 beträgt, werden die fünf virtuellen Maschinen, die Sie für den SLURM-Cluster erstellen werden, 20 dieser 24 CPUs belegen, was bedeutet, dass im Benutzerkonto nicht viel Platz für etwas anderes übrig bleibt. Prüfen Sie also in diesem und ähnlichen Artikeln, wie viele Quotas Ihnen zur Verfügung stehen, bevor Sie einen Cluster erstellen.

Nr. 3. Verbindung zur Cloud

Die sogenannte RC-Datei enthält die für die Kommunikation mit Ihrer Cloud erforderlichen Parameter. Das genaue Verfahren zum Herunterladen der RC-Datei aus der Cloud wird in diesem Artikel erläutert: So aktivieren Sie den OpenStack CLI-Zugriff in der CODE-DE Cloud

Die genaue Vorgehensweise hängt davon ab, ob für Ihr Konto die Ein- oder Zwei-Faktor-Authentifizierung aktiviert ist:

Ein-Faktor-Authentifizierung

Sie geben nur das Passwort ein, mit dem Sie sich bei dem Konto anmelden.

Zwei-Faktor-Authentifizierung

Sie geben sowohl das Kennwort als auch den sechsstelligen Code ein, den Sie jedes Mal generieren, wenn Sie eine neue Sitzung für die Verbindung zur Cloud starten.

Verwenden Sie immer den neuesten Wert der Image-ID des verwendeten Standard-Images

Von Zeit zu Zeit werden die Standard-Images der Betriebssysteme in der CODE-DE Cloud auf neue Versionen aktualisiert. Infolgedessen ändert sich ihre Image-ID. Nehmen wir an, dass die Image-ID für Ubuntu 20.04 LTS zum Zeitpunkt der Erstellung dieses Artikels 574fe1db-8099-4db4-a543-9e89526d20ae war. Während Sie den Artikel durcharbeiten, würden Sie normalerweise den aktuellen Wert von image id nehmen und ihn verwenden, um 574fe1db-8099-4db4-a543-9e89526d20ae im Text zu ersetzen.

Nehmen wir nun an, Sie wollten Prozesse unter OpenStack automatisieren, vielleicht mit Heat, Terraform, Ansible oder einem anderen Tool für die OpenStack-Automatisierung; wenn Sie den Wert 574fe1db-8099-4db4-a543-9e89526d20ae für image id verwenden, bliebe er hardcodiert und sobald dieser Wert während des Upgrades geändert wird, könnte der automatisierte Prozess nicht mehr ausgeführt werden.

Warnung

Stellen Sie sicher, dass Ihr Automatisierungscode den aktuellen Wert einer OS-Image-Id verwendet und nicht den hartcodierten.

Vorbereitung Schritt 1 Erstellen eines OpenStack Keystone-Benutzers

Es gibt zwei grundlegende Arten von Benutzern in OpenStack: Tenant-Manager und Benutzer.

  • Tenant-Manager sind die Administratoren des Kontos. Sie authentifizieren sich mit Keycloak in Ihrem OpenStack-System und können neue Benutzer erstellen.

  • Benutzer melden sich bei ihren Konten an, indem sie sich bei Keystone, einem Modul im OpenStack-System, authentifizieren. Auch bekannt als Keystone-Benutzer.

… Warnung:

ElastiCluster funktioniert nur mit Keystone-Benutzerkonten.

Wenn Sie bereits mit einem separaten Keystone-Benutzer arbeiten, können Sie diesen Abschnitt überspringen; wenn nicht, melden Sie sich als Tenant-Manager unter Voraussetzung Nr. 1 an. Legen Sie mit dem Horizon-Menübefehl IdentitätBenutzer einen neuen Benutzer an und füllen Sie die Vorlage aus. Merken Sie sich den Benutzernamen, das Kennwort und den Domänennamen.

../_images/create_user.png

Melden Sie sich als Admin-Benutzer ab und melden Sie sich als Benutzer an, wobei Sie diesmal den Dropdown-Eintrag: „Keystone Credentials“.

../_images/login_into_cloud.png

Verwenden Sie den Benutzernamen, das Kennwort und den Domänennamen, die Sie bei der Erstellung eines neuen Benutzers festgelegt haben.

Vorbereitung Schritt 2 Erstellen eines neuen Schlüsselpaares

Wenn Sie als neuer Benutzer arbeiten, haben Sie keinen Zugriff auf ein Schlüsselpaar, das für Ihren Tenant-Manager erstellt wurde. Erstellen Sie ein separates Schlüsselpaar mit dem beliebigen Namen 2468 für den neuen Benutzer und stellen Sie sicher, dass Sie es zur Authentifizierung für den SSH-Zugriff auf den Cluster von Ihrem Rechner aus verwenden. Dieses Schlüsselpaar wird später in der ElastiCluster-Konfigurationsvorlage verwendet.

../_images/key_pair_2468.png

Das erzeugte Schlüsselpaar besteht aus zwei langen, zufälligen Zeichenketten. Der eine ist der öffentliche Schlüssel und der andere ist der geheime Schlüssel. Um einen SLURM-Cluster mit ElastiCluster zu installieren, müssen beide Schlüssel als lesbare und geschützte Dateien auf dem lokalen Computer vorhanden sein. Für weitere technische Hilfe, siehe Artikel Wie erstellt man ein Schlüsselpaar im OpenStack Dashboard?.

Bei der Erzeugung des Schlüsselpaars wird der Secret Key automatisch heruntergeladen. In unserem Fall wird diese Datei 2468.pem heißen. Um den öffentlichen Schlüssel zu erhalten, müssen Sie ihn als Text aus der Option Compute -> Key Pairs kopieren und den Wert aus dem Feld Public Key übernehmen. Speichern Sie ihn auf Ihrem lokalen Computer als Textdatei und notieren Sie sich auch seine Adresse.

Nehmen wir an, Sie haben die Schlüssel als Textdateien mit Adressen im Ordner Downloads gespeichert:

/Downloads/2468.txt
/Downloads/2468.pem

Der genaue Speicherort für die heruntergeladenen Dateien hängt von Ihrem Betriebssystem ab. Ändern Sie daher die obigen Befehle mit den entsprechenden Adressen für Ihren Fall.

Sie können diese Adressen direkt verwenden, aber der geheime Schlüssel ist eine sensible Information, die Sie besser schützen müssen. Eine Möglichkeit besteht darin, die Dateien in unsichtbaren Ordnern abzulegen - die üblichen Adressen hierfür wären:

~/.ssh/id_rsa.pub
~/.ssh/id_rsa

Kopieren Sie die heruntergeladenen Dateien an diese Orte

cp /Downloads/2468.txt ~/.ssh/id_rsa.pub
cp /Downloads/2468.pem ~/.ssh/id_rsa

und löschen Sie sie danach mit dem Befehl sudo rm aus dem Download-Verzeichnis.

Die geheime Schlüsseldatei muss zusätzlich geschützt werden, also ändern Sie ihre Berechtigungen auf:

chmod 400 ~/.ssh/id_rsa

Vorbereitung Schritt 3 Sicherheitsgruppe erstellen

ElastiCluster erwartet einen einzigen Eintrag für eine Sicherheitsgruppe. Um diese Anforderung zu erfüllen, fügen wir eine benutzerdefinierte Sicherheitsgruppe namens elasticluster_slurm hinzu. Sie wird später zu unseren Knoten hinzugefügt und ermöglicht die Kommunikation zwischen den Knoten sowie den SSH-Zugriff von unserem lokalen Rechner aus.

Um eine neue Sicherheitsgruppe zu erstellen, navigieren Sie zu NetzwerkSicherheitsgruppen und erstellen Sie eine neue Sicherheitsgruppe. Fügen Sie in der folgenden Abbildung gezeigten Regeln für die Sicherheitsgruppe hinzu:

../_images/security_group_rules.png

Im Wesentlichen wollen Sie ihn für SSH-Verkehr verwenden, also muss Port 22 offen sein.

Weitere Hilfe zum Erstellen von Sicherheitsgruppen finden Sie im Artikel Wie verwendet man Sicherheitsgruppen in Horizon?.

Vorbereitung Schritt 4 Einrichten von Python und der virtuellen Umgebung

Die Artikel Wie installiert man den OpenStackClient (Linux)? und So installieren Sie den OpenStackClient (Windows) unter Verwendung von GitBash/Cygwin gehen ausführlich auf die Einrichtung von Python und der entsprechenden virtuellen Umgebung ein. Hier zeigen wir einen minimalen Satz von Befehlen, die speziell für die Arbeit mit ElastiCluster gedacht sind.

In diesen Artikeln erfahren Sie auch, wie Sie die RC-Datei herunterladen können, die für die Konfiguration von ElastiCluster benötigt wird.

Mit dem folgenden Befehl werden Python3 und die virtuelle Umgebung installiert:

sudo apt install python3-venv

Sie brauchen diesen Befehl nicht zu wiederholen, wenn Python installiert und betriebsbereit ist.

Erstellen Sie nun eine neue Python-Umgebung mit dem Namen elasticluster:

python3 -m venv elasticluster
source elasticluster/bin/activate

Am Anfang der Befehlszeile sollte nun (elasticluster) stehen, was bedeutet, dass von nun an alles in dieser virtuellen Umgebung stattfindet.

../_images/env_name.png

Vorbereitung Schritt 5 Source OpenStack RC File

Voraussetzung Nr. 3 Verbindung zur Cloud zeigt, wie man die richtige RC-Datei für Ihr Konto

  • auswählt,

  • herunterlädt und

  • aktiviert.

ElastiCluster liest die meisten seiner benötigten Parameter ebenfalls aus dieser RC-Datei.

Vorbereitung Schritt 6 Installation von ElastiCluster

Wir empfehlen die Installation über GitHub, wie derzeit von ElastiCluster empfohlen. Wir fügen auch zusätzliche Dienstprogramme hinzu, einschließlich OpenStack-Client-Bibliotheken. Die Ausführung der Installation dauert einige Minuten.

git clone https://github.com/elasticluster/elasticluster.git src
cd src
pip install -e .

pip install ndg-httpsclient

pip install python-keystoneclient python-novaclient python-cinderclient \
python-glanceclient python-ceilometerclient python-heatclient \
python-neutronclient python-swiftclient python-openstackclient

Installation Schritt 1 Erstellen ~/.elasticluster/config

An diesem Punkt haben Sie alle Elemente für die Erstellung eines SLURM-Clusters auf dem OpenStack-Hosting von CODE-DE. ElastiCluster ordnet alle benötigten Parameter in einer Konfigurationsdatei an, die template genannt wird. Der Standard-Speicherort für diese Datei ist ~/.elasticluster/config. Um eine Beispiel-Vorlagendatei an diesem Ort zu erstellen, geben Sie ein:

elasticluster list-templates

Wenn Sie bei der Auflistung von Vorlagen Fehler erhalten, sind die wahrscheinlichste Fehlerursache falsche Dateien oder Dateiformate für die öffentlichen und geheimen Schlüssel. Überprüfen Sie, ob die Dateien korrekt erstellt wurden, ob sie die richtigen Berechtigungen haben usw. und führen Sie den obigen Befehl erneut aus.

Nachfolgend finden Sie ein Beispiel für eine modifizierte Konfigurationsvorlage, mit der Sie einen Cluster einrichten können, der aus einem einzigen Master-/Login-Knoten und vier Worker-Knoten besteht.

Bemerkung

Um dieses Beispiel auszuführen, müssen Sie die Werte an die Einstellungen Ihres Projekts anpassen.

Verwenden Sie zum Bearbeiten der Datei Ihren bevorzugten Editor, z. B. nano:

sudo nano ~/.elasticluster/config

So sieht die Mustervorlage aus:

# place in ~/.elasticluster/config

[cloud/openstack]
provider=openstack
use_anti_affinity_groups=no
build_timeout=120

#change to your project name
project_domain_name=cloud_00341

# other values for the provider section will be passed from environment variables populated by the sourced RC_FILE

[login/ubuntu]
image_user=eouser
image_sudo=True

# your keypair (user_key_name) and keys location
user_key_name=2468
user_key_private=~/.ssh/id_rsa
user_key_public=~/.ssh/id_rsa.pub


[setup/slurm]
master_groups=slurm_master
worker_groups=slurm_worker

# install NIS/YP to manage cluster users
global_var_multiuser_cluster=yes


[cluster/slurm]
# cloud/login/setup values aligned with the names of these sections defined above
cloud=openstack
login=ubuntu
setup=slurm

master_nodes=1
worker_nodes=4
ssh_to=master

# custom security group combining 'default' cross-node communication and external SSH access
security_group=elasticluster_slurm

flavor=eo1.large

# image id of Ubuntu 18.04 LTS, available in Horizon interface
image_id=6321c0bf-a7d3-4f2a-a514-d9d3c90b327e

# ID of project's private network e.g. cloud_00332_1, available in Horizon interface
network_ids=e7ec5ad1-df5d-4774-a358-c1d56dd23f28

request_floating_ip=True

# id of floating ip network e.g. "external", available in Horizon interface
floating_network_id=959e9209-cf65-4afe-b17e-c5bfecdb0075

Installationsschritt 2: Eingabe der korrekten Werte in die ElastiCluster-Konfigurationsvorlage

Lassen Sie uns die Werte in der Vorlage, die Sie für Ihre eigene OpenStack-Konfiguration angeben müssen.

Projektname ändern

#change to your project name
project_domain_name=cloud_00341

Geben Sie den korrekten Cloud-Namen und die Nummer an, die Sie in der oberen linken Ecke der Horizon-Oberfläche erhalten:

../_images/cloud_name.png

Wählen Sie den richtige Flavor für die verfügbaren Ressourcen

Die Angabe in der Zeile

flavor=eo1.large

ist wichtig, denn nur bei einem ausreichenden Kontingent wird die Einrichtung des Clusters erfolgreich abgeschlossen.

Wir haben uns für eo1.large entschieden, weil Sie mit dieser Variante den Beispiel-Workflow für die EO-Verarbeitung im Artikel ausführen können /cuttingedge/Sample-Workflow-Running-EO-Processing-MPI-jobs-on-a-SLURM-cluster-on-CODE-DE-Cloud.

Wir empfehlen die folgenden Optionen:

  • Führen Sie das Beispiel so aus, wie es ist, und stellen Sie sicher, dass Sie über genügend Ressourcen verfügen (das Beispiel-Setup verbraucht 20 vCPU von den 24 vCPU, die im Standardkontingent verfügbar sind)

  • das Beispiel mit einer geringeren Anzahl von Workern ausführen (z.B. 2 statt 4) und/oder

  • das Beispiel mit einem kleineren Flavor ausführen, z.B. eo1.medium anstelle von eo1.large wie hier verwendet oder

  • größere Quoten anfordern (siehe Helpdesk und Support).

Wenn Sie die Anzahl der Worker ändern oder einen kleineren Flavor für diesen Artikel verwenden, stellen Sie sicher, dass Sie die gleichen Werte für Worker und Flavors im oben genannten MPI-Artikel verwenden.

Die tatsächlichen Werte der Quoten, die Ihnen zur Verfügung stehen, finden Sie unter Voraussetzung Nr. 2.

../_images/limit_summary.png

Die Image id von Ubuntu 18.04 LTS ist im Horizon-Interface verfügbar

ElastiCluster funktioniert am besten unter Ubuntu 18.04, daher werden wir dieses Image hier verwenden. Seine id sollte über alle OpenStack-Umgebungen hinweg konstant sein:

../_images/ubuntu_id.png
image_id=6321c0bf-a7d3-4f2a-a514-d9d3c90b327e

ID des privaten Netzes des Projekts

Um die ID-Werte eines Netzwerks abzurufen, führen Sie Netzwerk -> Netzwerke im Horizon-Hauptmenü aus und klicken auf den Netzwerknamen.

../_images/cloud_id_network.png
network_ids=21fd3c51-646d-4c36-9b1c-b5d1335cf24c

ID des Floating-IP-Netzes

Die Kennung des „externen“ Netzes ist auch in der Horizon-Schnittstelle verfügbar

../_images/external_floatin_ip.png
floating_network_id=959e9209-cf65-4afe-b17e-c5bfecdb0075

Um den aktuellen Status der Vorlage zu sehen, verwenden Sie einen dieser beiden Befehle:

sudo nano ~/.elasticluster/config

cat ~/.elasticluster/config

Installation Schritt 3 Ausführen und Überprüfen der Cluster-Einrichtung

Um das Cluster namens myslurmcluster zu erstellen, geben Sie ein:

elasticluster start slurm -n myslurmcluster

Dies kann 10, 15 oder sogar mehr Minuten dauern, und das erwartete Ergebnis sind 5 neue virtuelle Maschinen, die in der Horizon-Benutzeroberfläche verfügbar sind und für den Betrieb als SLURM-Cluster konfiguriert sind. Während der Erstellung des Clusters werden Hunderte von Textzeilen im Terminalfenster angezeigt, etwa so:

../_images/errors-3.png

Haben Sie Geduld. ElastiCluster stellt nicht weniger als fünf voll funktionsfähige virtuelle Maschinen bereit, die als ein Cluster agieren werden.

Wenn die Installation und Konfiguration gut verlaufen ist, sehen Sie einen ähnlichen Bildschirm wie diesen:

../_images/cluster_name.png

Hier sind die fünf neuen Instanzen, ein Master- und vier Worker-Knoten:

../_images/nodes_muslurmcluster.png

Wir können dies überprüfen, indem wir uns mit SSH zum Master-/Login-Knoten verbinden:

elasticluster ssh myslurmcluster

Und von diesem Knoten einen Beispiel-SLURM-Befehl ausführen:

sinfo

der Informationen über den Cluster anzeigt:

../_images/sinfo_cluster.png

Schritt 4 Fehlersuche und Fehlerbehebung

Führen Sie zur Fehlerbehebung das Cluster-Setup mit dem Flag -v aus, um detailliertere Einblicke zu erhalten:

elasticluster -v start slurm -n myslurmcluster

So können Sie das aktuelle ElastiCluster-Projekt starten und beenden:

elasticluster stop -y myslurmcluster

elasticluster start myslurmcluster

Was als nächstes zu tun ist

Der Artikel Beispiel-Workflow: Ausführung von EO Processing MPI-Jobs auf einem SLURM-Cluster auf CODE-DE FRA1-1 demonstriert die Ausführung von MPI-Jobs auf dem SLURM-Cluster, den Sie gerade erstellt haben.