Klaster Raspberry Pi 3
O tym, jak zbudować własny superkomputer przy pomocy pięciu Raspberry Pi.
wtorek, 1 sierpnia 2017
Lanie wody
Raspberry Pi zobaczyłem po raz pierwszy w akcji na konferencji Devoxx 2012 w belgijskiej Antwerpii. Organizatorzy zbudowali wtedy całą techniczną infrastrukturę konferencji w oparciu o te (wtedy jeszcze pachnące nowością) minikomputerki. Wszyscy uczestnicy posiadali opaski NFC, a w salach konferencyjnych stały słupki do głosowania z dwoma łapkami: kciuk w górę, kciuk w dół. Aby ocenić prezentację, przy wychodzeniu należało przyłożyć rękę do jednej z łapek. Każdy słupek był obsługiwany przez Raspberry Pi, który przesyłał informację do centralnego serwera zliczającego głosy i udostępniającego wyniki zainteresowanym aplikacjom. Oczywiście centralny serwer to także było Raspberry Pi, i to w dwóch sztukach: węzeł aktywny i zapasowy.
Na kolejne spotkanie z malinowym minikomputerkiem przyszło mi czekać dobrych kilka lat. Niedawno podczas odwiedzin u brata zauważyłem, że z doniczek kwiatków wychodzą jakieś dziwne kabelki. Prześledziłem ich bieg, aż dotarłem do niewielkiej zielonej płytki z układami scalonymi. Brat zauważył moje zainteresowanie i wskazał mi monitor oraz myszkę. Ruszyłem nią i moim oczom ukazał się... serwer do monitorowania wilgotności ziemi w kwiatkach w czasie rzeczywistym (!), zbudowany z Raspberry Pi. Szczerze mówiąc do dzisiaj nie wiem, po co ludzie budują takie dziwne rzeczy, ale to był moment, kiedy pomyślałem, że chciałbym do nich dołączyć.
Malinowa Chmura
Już od jakiegoś czasu nosiłem się z zamiarem przygotowania sobie prywatnego środowiska do eksperymentów z mikroserwisami, które miałoby służyć do szybkiego prototypowania. Początkowo zastanawiałem się nad wykupieniem sobie kilku niewielkich maszyn wirtualnych gdzieś w sieci, ale po spotkaniu z bratem pomyślałem: "hej, a dlaczego by nie zbudować własnego superkomputera"? Tak narodziła się idea budowy Malinowej Chmury, miniaturowego klastra obliczeniowego złożonego z kilku Raspberry Pi, pracującego pod kontrolą Kubernetesa i obsługującego obrazy Dockera. Taka maszynka nie dość, że fajnie wygląda, to pozwala też na łatwe testowanie efektów np. wypięcia jednego z węzłów z sieci i obserwacji czy aplikacja to przetrwa. Chodziło również o efekt WOW! Gotowe urządzenie to coś, co mógłbym zapakować do plecaka i wykorzystać podczas prowadzenia jakiegoś szkolenia - zainteresowanie uczestników murowane.
Spięcie kilku Raspberry Pi w klaster nie jest nową koncepcją - ludzie zaczęli to robić, odkąd tylko "Malinki" pojawiły się na rynku. Największy zbudowany do tej pory klaster składa się z ponad 250 układów. Dlatego Malinowej Chmury nie musiałem projektować od zera, jeśli chodzi o dobór komponentów. Po przejrzeniu wielu prezentacji zdecydowałem oprzeć się o projekt Raya Tsanga oraz Arjena Wassink (zobacz: Creating a Raspberry Pi cluster running Kubernetes, the shopping list (Part 1)), składający się z pięciu układów. Jedyna istotniejsza różnica to użycie przeze mnie nowszego modelu Raspberry Pi (wersja 3), który ukazał się w tym roku.
Lista zakupów
Mając gotową koncepcję, udałem się na zakupy:
Komponent | Ilość | Cena 1 szt. | Uwagi |
---|---|---|---|
Raspberry Pi 3 model B | 5 | EUR 39,89 | Amazon |
Switch D-Link GO-SW-8E Mini Switch 8 ports | 1 | EUR 10,15 | Amazon |
Zasilacz USB Anker 60W 6-Port PowerPort | 1 | EUR 24,59 | Amazon (niedostępny w Polsce) |
Obudowa otwarta plexi - 3x Raspberry Pi | 2 | 55,00 zł | |
Karta pamięci Goodram M1AA microSD 16GB 60MB/s UHS-I klasa 10 | 5 | 39,90 zł | |
Zestaw radiatorów Raspberry Pi | 5 | 14,90 zł | |
Kabel USB - microUSB | 5 | ok. 4 zł | długość ok. 40 cm |
Kabel Ethernet UTP 5e | 5 | ok. 2 zł | długość ok. 30-40 cm |
Taśma dwustronna | 1 | 3,20 zł | |
Tuleja dystansowa M3 35 mm | 8 | ok. 2,5 zł | koniecznie z gwintem zewnętrznym |
Razem: ok. 437 zł i 241,63 EUR
Podstawowym problemem do rozwiązania przy budowie klastra jest doprowadzenie zasilania do wszystkich węzłów tak, aby nie utonąć w morzu kabli i wtyczek. W Internecie można kupić gotowe układy do budowy klastrów, natomiast jeśli chcemy wszystko zrobić samodzielnie, lecz bez doktoryzowania się w elektronice, najlepszym rozwiązaniem jest użycie wieloportowej ładowarki USB - nie mylić z hubem USB, który wygląda podobnie, ale jest nieco innym urządzeniem. Tu trafiamy jednak na kolejny problem: mianowicie w Polsce nie da się kupić dobrej wieloportowej ładowarki. Zapomnij tanim sprzęcie dla mas, bowiem on nie wystarczy:
- maksymalne natężenie prądu, jakiego potrzebuje Raspberry Pi 3, to 2,5 A,
- przykładowa 5-portowa ładowarka Tracera na wyjściu ma prąd o natężeniu 8 A, do podziału między wszystkie porty,
- zatem przy podłączonych pięciu układach, każdy z nich dostanie jedynie 1,6 A.
Konstruktorzy z USA i Europy Zachodniej w swoich projektach wykorzystują ładowarki amerykańskiej firmy Anker. Nie są one dostępne w Polsce, ale można je zamówić w jednym z europejskich sklepów Amazona, co też uczyniłem. Okazało się też, że jeśli zamówię tam przełącznik ethernetowy oraz same Raspberry Pi, to przy tak dużym zamówieniu zaoszczędzę około 125 zł w porównaniu do polskich cen :).
Aby połączyć wszystkie elementy w całość, potrzebna jest też obudowa. Sklep Botland oferuje otwarte, piętrowe obudowy wykonane z płytek pleksi i tulejek dystansowych. Każda z nich może pomieścić do 3 płytek Raspberry Pi. Ponieważ ja chciałem zamontować pięć, zamówiłem dwie takie obudowy i 8 tulejek dystansowych M3 35 mm z gwintem zewnętrznym, aby połączyć je razem i wykorzystać wszystkie płytki z pleksi. Na "wolnych" piętrach postanowiłem zabudować zasilacz oraz przełącznik. Polecam też dokładnie zaplanować zakupy drobnych elementów, by nie musieć ich dokupować w marketach elektronicznych - różnica w cenie kabla USB-microUSB między sklepem internetowym a sklepami Saturn to około 15-20 złotych. A oto wszystkie elementy przed montażem:
Montaż
Montaż rozpocząłem od najmniejszych kawałków układanki, czyli od przyklejenia radiatorów do Raspberry Pi. Moje radiatory przyszły razem z kawałkami taśmy termoprzewodzącej. Należało z niej wyciąć prostokąty odpowiadające kształtem radiatorom, następnie oderwać papierek z jednej strony, nakleić na radiator i oderwać drugi papierek. Na radiatorze zostawała w ten sposób cienka warstwa termoprzewodzącego kleju, a ja mogłem przykleić go do "malinki". Jest to chyba najbardziej żmudna część całego montażu, ale po dojściu do wprawy szło już szybko.
Drobne elementy najlepiej montuje się na samym początku, dlatego w drugim kroku powkładałem wcześniej przygotowane karty microSD z nagranym systemem operacyjnym HypriotOS (o tym napiszę poniżej). W procesie przygotowywania każda karta zyskała unikalną nazwę hosta: od oblok01 do oblok05. Zależało mi, aby poszczególne "malinki" też były zmontowane w odpowiedniej kolejności. Aby się nie pomylić, pilnowałem, by nie pomieszać kart, a wszystkie Raspberry Pi ponumerowałem na opakowaniach.
Pora przystąpić do składania obudowy. Zacząłem od podstawki, do której przy pomocy taśmy dwustronnej przykleiłem sześcioportowy zasilacz Ankera:
Następnie w ruch poszły śrubki i cztery tulejki dystansowe z gwintem wewnętrznym, które utworzyły pierwszy rząd kolumn. Przyda się on za chwilę podczas przykręcania Raspberry Pi do płytek pleksi:
Przykręcenie Raspberry Pi do płytek pleksi jest kolejnym żmudnym etapem montażu. Razem z obudowami przyszły już odpowiednie śrubki, plastikowe nakładki oraz nakrętki. Istnieje jeden działający sposób na ich skręcenie. Na przygotowanych przed chwilką kolumnach kładziemy płytkę pleksi i w miejscach otworów umieszczamy plastikowe nakładki:
Do otworów w Raspberry Pi wkładamy śrubki i ostrożnie nakładamy układ na płytkę tak, aby wszystkie śrubki przeszły przez nakładki i trafiły w otwory. Najlepiej robić to śrubka po śrubce, trzymając "malinkę" lekko przechyloną tak, by pozostałe śrubki nie powypadały. Gdy wszystko będzie na swoim miejscu, ostrożnie podnosimy całość i od dołu przykręcamy nakrętki. Całą operację powtarzamy dla wszystkich "malinek", lecz uwaga - gotowych płytek jeszcze nie przykręcamy. Chodzi o to, żeby te kolumny, na których wszystko robimy, nie podnosiły się coraz wyżej, bowiem tylko sobie w ten sposób utrudnimy życie.
Dopiero gdy wszystkie Raspberry Pi były przykręcone do swoich płytek, rozpocząłem skręcanie wszystkiego przy pomocy tulejek długodystansowych:
Na samej górze z dwóch "wolnych" płytek pleksi zrobiłem piętro, na którym miał zostać zamontowany przełącznik ethernet. Dlaczego nie przykleiłem go najpierw, zanim dokończyłem obudowę? Chodziło o to, że przełącznik jest nieco większy: musi zostać przyklejony bokiem i wiedziałem, że będzie wystawać. Kolumny należy postawić najpierw, aby całość poprawnie wypozycjonować i nie zastawić sobie nimi któregoś z portów.
Na ostatnim piętrze przykleiłem dwa kawałki dwustronnej taśmy, a do przełącznika wpiąłem jeden kabel. Ostrożnie wsunąłem urządzenie na piętro i zatrzymałem się dokładnie tak, by kolumna znalazła się między portami przełącznika. Pomogłem tu sobie w ten sposób, że tuż przed umieszczeniem wpiąłem kolejny kabel do drugiego portu. Kolumna znalazła się pomiędzy nimi - teraz mogłem już po prostu opuścić urządzenie na taśmę i miałem pewność, że wszystko będzie pasować.
Obudowa jest gotowa. Pozostało już tylko poprzypinać kabelki :).
Oprogramowanie
Raspberry Pi wykorzystuje procesory oparte o architekturę ARM, zoptymalizowaną pod kątem niskiego poboru mocy. Oznacza to jednak, że musimy wykorzystywać oprogramowanie specjalnie skompilowane pod tę platformę sprzętową, gdyż używa ona zupełnie innego zestawu instrukcji, niż pecetowe procesory. Na szczęście wszystkie systemy operacyjne są dostępne w odpowiednich wersjach (nawet Windows!), a w przypadku Raspberry Pi możemy skorzystać z gotowych dystrybucji, które są pod nie zoptymalizowane.
Oficjalnym systemem jest Raspbian, bazujący na Debian Linux, jednak polecam poszukać, czy pod kątem naszych zastosowań nie ma jakiegoś innego, dedykowanego systemu. Ja na Raspberry Pi chcę testować mikroserwisy, dlatego wybrałem HypriotOS, kolejny klon Debiana służący do uruchamiania kontenerów Dockera. Na stronie projektu można znaleźć gotowe poradniki oraz odnośniki do obrazów, które po prostu musimy nagrać na kartę SD. Jeśli korzystamy z Linuksa, autorzy dystrybucji udostępniają dedykowane narzędzie flash
, które potrafi też automatycznie ustawić np. nazwę hosta. Programik ten nie jest konieczny - równie dobrze można użyć np. Etchera polecanego przez oficjalną stronę Raspberry Pi. Samą nazwę hosta możemy po nagraniu obrazu zmienić ręcznie, edytując na karcie plik device-info.yml
.
Więcej o konfiguracji HypriotOS oraz instalacji Kubernetesa napiszę niebawem w kolejnym wpisie.
Podsumowanie
Budowanie własnego klastra okazało się być świetną zabawą - choć jestem dopiero w połowie konfiguracji oprogramowania, już nauczyłem się sporo. Na pewno widok takiego urządzenia na biurku pobudza dużo bardziej wyobraźnię i zachęca do eksperymentów, niż wirtualna maszyna gdzieś w czeluściach Internetu. A efekt końcowy? Zobaczcie sami:
zobacz inne wpisy w temacie
Komentarze (2)
logarytm
# środa, 2 sierpnia 2017, 18:08
Nie działają linki z RSS. Ciekawy post :>
Tomasz Jędrzejewski
# środa, 2 sierpnia 2017, 18:09
Dzięki - niebawem będą kolejne wpisy o klastrze :). Zaraz zerknę na te linki.
Dopisek: poprawione!