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 Identity → Users i wypełnij szablon. Zapamiętaj nazwę użytkownika, hasło i nazwę domeny.
Wyloguj się z konta administratora i zaloguj się jako użytkownik, tym razem wybierając z listy rozwijanej pozycję: „Keystone Credentials”..
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.
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 Network → Security Groups i utwórz nową grupę zabezpieczeń. Dodaj reguły grupy zabezpieczeń, aby uzyskać reguły pokazane na poniższej ilustracji:
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.
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:
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.
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:
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.
network_ids=21fd3c51-646d-4c36-9b1c-b5d1335cf24c
ID sieci z floating IP
Identyfikator sieci „zewnętrznej” jest również dostępny w interfejsie Horizon
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:
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:
Oto pięć nowych instancji, jeden węzeł główny i cztery węzły robocze:
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:
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.