Skip to main content

Przykładowy klaster SLURM w chmurze NSIS z ElastiCluster

W tym przewodniku użyjesz ElastiCluster do automatycznej konfiguracji klastra SLURM w środowisku OpenStack. Korzystanie z ElastiCluster

  • umożliwia szybką konfigurację klastrów obliczeniowych,

  • wymaga tylko minimalnych opcji konfiguracyjnych

  • zapewnia wbudowaną obsługę OpenStack i SLURM.

Ta konfiguracja umożliwia szybkie utworzenie klastra SLURM składającego się z jednego węzła głównego / węzła logowania i wymaganej liczby węzłów obliczeniowych.

Co zostanie omówione?

  • Jak utworzyć użytkownika Keystone

  • Jak utworzyć nową parę kluczy o nazwie 2468 dla dostępu SSH między węzłami klastra?

  • Jak utworzyć grupę zabezpieczeń elasticluster_slurm, aby włączyć port 22 dla dostępu SSH?

  • Jak zainstalować ElastiCluster

  • Jak skonfigurować klaster ElastiCluster

  • Jak wdrożyć klaster

Wymagania wstępne

Nr 1 Hosting

Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.

Nr 2 Quoty dla projektu i limity dla flavorów

Artykuł Pogląd dashboardu – quoty projektów i ograniczenia flavorów na NSIS Cloud podaje podstawowe definicje quot i obrazów instancji (flavors) w OpenStack. W skrócie, quota oznacza na przykład, ile instancji można mieć w sumie, podczas gdy flavor to, jaka ma być wielkość instancji.

Klastry wykorzystują w pełni wyposażone instancje (maszyny wirtualne) mające na przykład 4 procesory i 32 GB pamięci RAM. Jeśli twoja quota procesorów wynosi łącznie 24, pięć maszyn wirtualnych, które zamierzasz zbudować dla klastra SLURM, zajmie 20 z tych 24 procesorów, co oznacza, że na koncie użytkownika nie pozostanie zbyt wiele zasobów na cokolwiek innego. Sprawdź więc, jakie quoty masz do dyspozycji przed utworzeniem klastra w tym i podobnych artykułach.

Nr 3. Połączenie z chmurą

Plik RC zawiera parametry potrzebne do komunikacji z chmurą. Dokładna procedura pobierania pliku RC z chmury jest wyjaśniona w artykule: Jak aktywować dostęp OpenStack CLI do chmury NSIS przy użyciu uwierzytelniania dwuskładnikowego.

Konkretna procedura zależy od tego, czy konto ma włączone uwierzytelnianie jedno- czy dwuskładnikowe:

Uwierzytelnianie jednoskładnikowe

Wprowadzasz tylko hasło, za pomocą którego logujesz się do konta.

Uwierzytelnianie dwuskładnikowe

Wprowadzasz zarówno hasło, jak i sześciocyfrowy kod, który generujesz za każdym razem, gdy rozpoczynasz nową sesję, aby połączyć się z chmurą.

Zawsze używaj najnowszej wartości identyfikatora obrazu

Od czasu do czasu domyślne obrazy systemów operacyjnych w chmurze NSIS są aktualizowane do nowych wersji. W konsekwencji ich image id ulegnie zmianie. Powiedzmy, że w momencie pisania tego artykułu identyfikator obrazu dla Ubuntu 20.04 LTS to**574fe1db-8099-4db4-a543-9e89526d20ae**. Pracując nad artykułem, normalnie nalezy wziąć aktualną wartość identyfikatora obrazu i użyć jej, aby zastąpić 574fe1db-8099-4db4-a543-9e89526d20ae w całym tekście.

Załóżmy teraz, że chcesz zautomatyzować procesy w OpenStack, być może używając Heat, Terraform, Ansible lub innego narzędzia do automatyzacji OpenStack; jeśli dla identyfikatora obrazu użyjesz wartości 574fe1db-8099-4db4-a543-9e89526d20ae, pozostanie ona zakodowany na stałe i jeśli ta wartość zostanie zmieniona podczas aktualizacji, zautomatyzowany proces może przestać się wykonywać.

Ostrzeżenie

Upewnij się, że kod automatyzacji używa aktualnej wartości identyfikatora obrazu systemu operacyjnego, a nie wartości zakodowanej na stałe.

Krok przygotowawczy 1 Stwórz Użytkownika Openstack Keystone

W OpenStack istnieją dwa podstawowe typy użytkowników: tenant managers i users.

  • Tenant managers są administratorami konta. Uwierzytelniają się za pomocą Keycloak w systemie NSIS OpenStack i mogą tworzyć nowych użytkowników.

  • Users logują się na swoje konta, uwierzytelniając się w module Keystone w systemie OpenStack. Nazywani są oni również użytkownikami Keystone.

Ostrzeżenie

ElastiCluster będzie działać tylko na kontach użytkowników Keystone.

Jeśli korzystasz już z osobnego użytkownika Keystone, możesz pominąć tę sekcję. W przeciwnym razie zaloguj się jako tenant manager, korzystając z Wymagania wstępnego nr 1. Utwórz nowego użytkownika za pomocą polecenia menu Horizon IdentityUsers i wypełnij szablon. Zapamiętaj nazwę użytkownika, hasło i nazwę domeny.

../_images/create_user1.png

Wyloguj się z konta administratora i zaloguj się jako użytkownik, tym razem wybierając z listy rozwijanej pozycję: „Keystone Credentials”..

../_images/login_into_cloud_nsis_pl1.png

Użyj nazwy użytkownika, hasła i nazwy domeny, które zostały zdefiniowane podczas tworzenia nowego użytkownika.

Krok przygotowawczy 2 stwórz nową parę kluczy

Podczas pracy jako nowy użytkownik nie będziesz mieć dostępu do żadnej pary kluczy utworzonej dla tenant manager dzierżawy. Utwórz dla nowego użytkownika oddzielną parę kluczy o nadanej arbitralnie nazwie 2468 i upewnij się, że używasz jej do uwierzytelniania dostępu SSH do klastra ze swojego komputera. Później ta para kluczy będzie używana w szablonie konfiguracji ElastiCluster.

../_images/key_pair_24681.png

Wygenerowana para kluczy składa się z dwóch długich, losowych ciągów znaków. Jeden z nich znany jest jako klucz publiczny, a drugi jako klucz tajny. Aby zainstalować klaster SLURM z ElastiCluster, oba klucze muszą być obecne jako czytelne i chronione pliki na komputerze lokalnym. Więcej informacji technicznych można znaleźć w artykule Jak utworzyć parę kluczy w OpenStack Dashboard na NSIS Cloud.

Podczas generowania pary kluczy tajny klucz zostanie pobrany automatycznie. W naszym przypadku będzie to plik o nazwie 2468.pem. Aby uzyskać klucz publiczny, należy skopiować go jako tekst z opcji Compute -> Key Pairs i pobrać wartość z pola Public Key. Zapisz go na komputerze lokalnym jako plik tekstowy i zanotuj jego adres.

Załóżmy, że klucze zostały zapisane jako pliki tekstowe w katalogu Downloads, z adresami:

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

Dokładna lokalizacja pobranych plików będzie zależeć od używanego systemu operacyjnego, więc wyedytuj powyższe polecenia z adresami odpowiednimi dla twojego przypadku.

Możesz użyć tych adresów bezpośrednio, ale tajny klucz jest informacją wrażliwą, więc należy go bardziej zabezpieczyć. Jednym ze sposobów jest umieszczenie plików w ukrytych katalogach – zwykle są to następujące katalogi:

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

Następnie należy skopiować pobrane pliki do tych lokalizacji:

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

i następnie usunąć je z widocznego miejsca za pomocą polecenia sudo rm.

Plik tajnego klucza musi być dodatkowo chroniony, więc zmień jego uprawnienia na:

chmod 400 ~/.ssh/id_rsa

Krok przygotowawczy 3 stwórz grupy zabezpieczeń

ElastiCluster oczekuje pojedynczego wpisu dla grupy zabezpieczeń. Aby spełnić to wymaganie, dodajemy niestandardową grupę zabezpieczeń o nazwie elasticluster_slurm. Zostanie ona później dodana do węzłów, umożliwiając komunikację między nimi oraz dostęp SSH z maszynylokalnej.

Aby utworzyć nową grupę zabezpieczeń, przejdź do opcji NetworkSecurity Groups i utwórz nową grupę zabezpieczeń. Dodaj reguły grupy zabezpieczeń, aby uzyskać reguły pokazane na poniższej ilustracji:

../_images/security_group_rules1.png

Zasadniczo chcesz używać jej do umożliwienia ruchu SSH, więc port 22 musi być otwarty.

Więcej informacji na temat tworzenia grup zabezpieczeń można znaleźć w artykule Jak używać grup bezpieczeństwa w Horizon na NSIS Cloud.

Krok przygotowawczy 4 Jak postawić Python i virtualenv

Konfiguracja Pythona i odpowiedniego środowiska wirtualnego jest szczegółowo omówiona w artykułach Jak zainstalować OpenStackClient dla systemu Linux na NSIS i Jak zainstalować OpenStackClient GitBash dla Windows na NSIS. Tutaj pokazujemy minimalny zestaw poleceń przeznaczonych specjalnie do pracy z ElastiCluster.

Z tych artykułów można również dowiedzieć się, jak pobrać plik RC potrzebny do konfiguracji ElastiCluster.

Poniższe polecenie zainstaluje pakiet Python3 i środowisko wirtualne:

sudo apt install python3-venv

Po zainstalowaniu i uruchomieniu Pythona nie trzeba powtarzać tego polecenia.

Teraz utwórz nowe środowisko Python o nazwie elasticluster:

python3 -m venv elasticluster
source elasticluster/bin/activate

Początek wiersza poleceń powinien teraz zawiera tekst (elasticluster), co oznacza, że od teraz wszystko będzie się działo w tym środowisku wirtualnym.

../_images/env_name1.png

Krok przygotowawczy 5 Załadowanie pliku Openstack RC

Wymaganie wstępne nr 3 Połączenie z chmurą pokazuje, jak

  • wybrać

  • pobrać

  • oraz aktywować

plik RC odpowiedni dla twojego konta. ElastiCluster odczyta również z tego pliku RC większość wymaganych parametrów.

Krok przygotowaczy 6 Instalacja ElastiCluster

Sugerujemy instalację z GitHub zgodnie z aktualnymi zaleceniami ElastiCluster. Dodajemy również dodatkowe narzędzia, w tym biblioteki klienckie OpenStack. Uruchomienie instalacji zajmie kilka minut.

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

Krok 1 instalacji Stwórz ~/.elasticluster/config

W tym momencie masz wszystkie elementy niezbędne do utworzenia klastra SLURM na hostingu NSIS OpenStack. ElastiCluster składa wszystkie potrzebne parametry w jednym pliku konfiguracyjnym o nazwie template. Domyślna lokalizacja tego pliku to ~/.elasticluster/config. Aby utworzyć przykładowy plik szablonu w tej lokalizacji, wpisz polecenie:

elasticluster list-templates

Ostrzeżenie

Jeśli zaczniesz otrzymywać błędy w wyświetleniem listy szablonów, najbardziej prawdopodobną przyczyną błędu będą nieprawidłowe pliki kluczy publicznych i tajnych. Sprawdź, czy są one poprawnie utworzone, czy mają odpowiednie uprawnienia itp. i ponownie wykonaj powyższe polecenie.

Poniżej przedstawiamy przykładowy zmodyfikowany szablon konfiguracji, który umożliwia skonfigurowanie klastra składającego się z jednego węzła głównego / węzła logowania i czterech węzłów roboczych.

Informacja

Aby uruchomić ten przykład, należy zmodyfikować wartości, aby dopasować je do ustawień projektu.

Aby edytować plik, użyj ulubionego edytora, takiego jak nano:

sudo nano ~/.elasticluster/config

To jest szablon modelu:

# 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

Krok 2 instalacji Jak wprowadzić prawidłowe wartości w szablon konfiguracji ElastiCluster

Przeanalizujmy szablon z wartościami, które należy podać dla własnej konfiguracji OpenStack.

Zmień nazwę projektu

#change to your project name
project_domain_name=cloud_00341

Prawidłowa nazwa i numer chmury zostaną wyświetlone w lewym górnym rogu interfejsu Horizon:

../_images/cloud_name1.png

Wybierz odpowiednią wersję instancji (flavor) dla dostępnych zasobów

Wiersz

flavor=eo1.large

jest ważny, ponieważ w zależności od dostępnej quoty konfiguracja klastra może nie zakończyć się pomyślnie.

Wybieramy flavor EO1.large, ponieważ umożliwi on uruchomienie przykładowego przepływu pracy przetwarzania EO w artykule /cuttingedge/Sample-Workflow-Running-EO-Processing-MPI-jobs-on-a-SLURM-cluster-on-NSIS-Cloud-Cloud.

Sugerujemy następujące opcje:

  • uruchom przykład bez wprowadzania w nim zmian, ale upewnij się, że masz wystarczające zasoby (przykładowa konfiguracja zużyje 20 z 24 vCPU dostępnych w domyślnej quocie).

  • uruchom przykład na mniejszej liczbie jednostek roboczych (np. 2 zamiast 4) i/lub

  • uruchom przykład na mniejszych obrazach instancji, takich jak flavor EO1.medium zamiast EO1.large, jak użyto tutaj lub

  • zażądaj większych quot (patrz Helpdesk i wsparcie).

Jeśli w tym artykule zmienisz liczbę węzłów roboczych lub użyjesz mniejszego obrazu instancji (flavor), upewnij się, że używasz tych samych wartości węzłów i flavorów w artykule MPI wspomnianym powyżej.

Rzeczywiste wartości quot, którymi możesz dysponować są podane w sekcji Wymaganie wstępne nr 2.

../_images/limit_summary1.png

Identyfikator obrazu Ubuntu 18.04 LTS, dostępny w interfejsie Horizon

ElastiCluster działa najlepiej na Ubuntu 18.04, więc jest to obraz, którego będziemy tutaj używać. Jego id powinien być stały we wszystkich środowiskach NSIS OpenStack:

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

ID sieci prywatnej projektu

Aby uzyskać wartości ID sieci, wykonaj polecenie Network -> Networks z głównego menu Horizon i kliknij nazwę sieci.

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

ID sieci z floating IP

Identyfikator sieci „zewnętrznej” jest również dostępny w interfejsie Horizon

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

Aby zobaczyć aktualny stan szablonu, użyj jednego z tych dwóch poleceń:

sudo nano ~/.elasticluster/config

cat ~/.elasticluster/config

Krok 3 instalacji Uruchom i zweryfikuj ustawienia klastra

Aby uruchomić konfigurację klastra o nazwie myslurmcluster wpisz:

elasticluster start slurm -n myslurmcluster

Zajmie to 10, 15 lub nawet więcej minut, a oczekiwanym rezultatem będzie 5 nowych maszyn wirtualnych dostępnych w interfejsie Horizon, skonfigurowanych do pracy jako klaster SLURM. Podczas tworzenia klastra w oknie terminala będą przewijać się setki wierszy tekstu, być może w następujący sposób:

../_images/errors-31.png

Prosimy o cierpliwość. ElastiCluster zapewnia nie mniej niż pięć w pełni funkcjonalnych maszyn wirtualnych, które będą działać jako jeden klaster.

Jeśli instalacja i konfiguracja przebiegły pomyślnie, zobaczysz ekran podobny do tego:

../_images/cluster_name1.png

Oto pięć nowych instancji, jeden węzeł główny i cztery węzły robocze:

../_images/nodes_muslurmcluster1.png

Możemy to sprawdzić, uruchamiając połączenie SSH z węzłem głównym / węzłem logowania:

elasticluster ssh myslurmcluster

Z tego węzła należy uruchomić przykładowe polecenie SLURM:

sinfo

Zostanę wtedy wyświetlone informacje o klastrze:

../_images/sinfo_cluster1.png

Krok 4 Rozwiązywanie problemów i debugowanie

Aby rozwiązać problem, uruchom konfigurację klastra z flagą -v, aby uzyskać bardziej szczegółowe informacje:

elasticluster -v start slurm -n myslurmcluster

W ten sposób można uruchamiać i zatrzymywać bieżący projekt ElastiCluster:

elasticluster stop -y myslurmcluster

elasticluster start myslurmcluster

Co można zrobić dalej?

Uruchamianie zadań MPI na nowo utworzonym klastrze SLURM zostało przedstawione w artykule /cuttingedge/Sample-Workflow-Running-EO-Processing-MPI-jobs-on-a-SLURM-cluster-on-NSIS-Cloud-Cloud.