Nomad i Kubernetes to dwie wiodące platformy do automatyzacji zadań związanych z dynamiczną organizacją aplikacji.
Platformy orkiestracyjne usprawniają proces konfiguracji, nadzoru i synchronizacji wielu różnorodnych działających aplikacji.
Zarówno Nomad, jak i Kubernetes znacząco ułatwiają wdrażanie i zarządzanie aplikacjami działającymi w kontenerach. Wykorzystując odpowiednią platformę orkiestracyjną, można efektywnie zarządzać różnymi mikrousługami i kontenerami, począwszy od wykrywania usług i ich wdrożeń, aż po synchronizację i skalowanie.
Przed podjęciem decyzji o wyborze optymalnej platformy, warto dogłębniej przeanalizować charakterystykę Nomada i Kubernetes.
Czym jest Nomad?
Nomad, opracowany przez HashiCorp, to narzędzie służące do zarządzania obciążeniami. Dzięki swojej elastyczności, umożliwia planowanie i koordynację wdrożeń kontenerów oraz ich obsługę. Nomad działa zarówno w środowiskach chmurowych, jak i lokalnych, a także obsługuje aplikacje niekonteneryzowane.
Nomad udostępnia prosty plik wykonywalny, który wystarczy uruchomić. W odróżnieniu od innych rozwiązań, zużywa minimalną ilość zasobów, co nie powoduje nadmiernego obciążenia serwerów. Oprócz kontenerów, pozwala na uruchamianie różnorodnych obciążeń, takich jak aplikacje Windows, Java, maszyny wirtualne czy kontenery Docker.
Platforma Nomad umożliwia wdrażanie i nadzorowanie kontenerów w środowisku produkcyjnym. Co więcej, umożliwia także uruchamianie aplikacji niekonteneryzowanych w klastrze, bez konieczności ich konteneryzacji. Nomad pozwala na łatwe skalowanie i uruchamianie aplikacji bliżej lokalizacji docelowych klientów. Dodatkowo, umożliwia efektywne zarządzanie krótkotrwałymi zadaniami wsadowymi.
Nomad występuje w dwóch wersjach: Community Edition i Enterprise Edition. Wydanie Community jest bezpłatne i daje możliwość samodzielnego zarządzania klastrem. Można je uruchomić w przeciągu kwadransa lokalnie lub w środowisku chmurowym. Natomiast wersja Enterprise oferuje wsparcie techniczne oraz dodatkowe funkcje, takie jak możliwość pracy zespołowej, zarządzanie i operacje.
Czym jest Kubernetes?
Kubernetes to rozszerzalna, przenośna i wysoce wydajna platforma orkiestracyjna. Znana także jako K8s, została stworzona w Google. Obecnie jest zarządzana przez Cloud Native Computing Foundation (CNCF) i stanowi najpopularniejszą platformę do orkiestracji.
Kubernetes pozwala na elastyczne przenoszenie zadań w zależności od potrzeb – lokalnie, w chmurze publicznej, czy w modelu hybrydowym. Celem platformy jest dostarczenie wszelkich niezbędnych narzędzi do realizacji potrzeb w zakresie orkiestracji i nadzoru nad infrastrukturą.
Jest to zdecydowanie najczęściej wybierana platforma orkiestracyjna. Czołowi dostawcy usług chmurowych, tacy jak Amazon Web Service i Google Cloud Platform, udostępniają zarządzane usługi Kubernetes – odpowiednio Amazon Elastic Kubernetes Service (AWS EKS) i Google Kubernetes Engine (GKE).
Przeczytaj również: Wprowadzenie do Kubernetes: przewodnik dla początkujących
Ale którą platformę wybrać, mając na uwadze wymagania orkiestracji? Zobaczmy, jak wypada porównanie obu rozwiązań.
Nomad kontra Kubernetes
#1. Instalacja
Ponieważ instalacja jest pierwszym krokiem do rozpoczęcia korzystania z narzędzi programowych, jej łatwość ma spore znaczenie. Decydując między Nomadem a Kubernetes, warto sprawdzić, jak łatwo można zacząć korzystać z każdej z tych platform.
Nomad
Nomad dostarcza wstępnie skompilowany plik binarny lub pakiet, który trzeba zainstalować. W przypadku manualnej instalacji na komputerze lokalnym, można pobrać i zainstalować oficjalny plik binarny. W systemach Linux można zainstalować oficjalny pakiet. Po instalacji wystarczy w linii komend zainstalować wtyczki CNI (Container Network Interface).
Instalacja jest jeszcze prostsza w systemach macOS lub Windows, gdzie można wykorzystać narzędzia do zarządzania pakietami, takie jak Homebrew i Chocolatey. Wystarczy jedno polecenie, aby zakończyć instalację, w tym wtyczki CNI.
Kubernetes
W przypadku Kubernetes, instalacja obejmuje różne komponenty i klientów, które należy zainstalować w zależności od potrzeb. Każdy z nich jest dostępny w formie plików binarnych, a także różnych obrazów kontenerów, dopasowanych do odmiennych środowisk wykonawczych i architektur.
Można skorzystać z oficjalnego repozytorium, aby pobrać właściwy plik binarny dla konkretnej platformy (Darwin, Linux, Windows) i architektury systemu. Po zainstalowaniu odpowiedniego obrazu kontenera, potrzebne jest narzędzie wiersza poleceń kubectl, które umożliwia interakcję z kontenerami.
#2. Skalowalność
Skalowalność stanowi istotny aspekt w kontekście obciążeń kontenerowych. Określa zdolność systemu do obsługi rosnącego obciążenia. Innymi słowy, jeśli potrzeba więcej mocy obliczeniowej, platforma orkiestracyjna powinna ułatwiać dodawanie nowych zasobów.
Nomad
Nomad jest sprawdzony w obsłudze klastrów przekraczających 10 000 węzłów w środowisku produkcyjnym. W 2020 roku Nomad pomyślnie przeszedł test obciążeniowy z 2 milionami kontenerów dockerowych na 6100 hostach. Test ten obejmował ponad 10 różnych regionów AWS i zajął 22 minuty. Poprawił tym samym wcześniejszy rekord 1 miliona kontenerów.
Dzięki Nomad Autoscaler można także zautomatyzować skalowanie poziome. Może być uruchomiony jako osobny proces, gdy jest to wymagane.
Kubernetes
Od wersji 1.28, Kubernetes umożliwia skalowanie klastra do 5000 węzłów. Można uruchomić do 150 000 podów lub 300 000 kontenerów.
Wraz ze wzrostem skalowalności, utrzymanie klastra Kubernetes staje się bardziej złożone w porównaniu z zarządzaniem klastrem Nomad. Nomad ma przewagę nad Kubernetesem w zakresie całkowitej liczby węzłów, które można uruchomić.
#3. Wydajność
Wybierając platformę orkiestracyjną, należy szukać równowagi między funkcjonalnością i wydajnością. Wydajność platformy orkiestracyjnej wpływa na ilość zasobów systemowych, które są wykorzystywane.
Nomad
Nomad, ze względu na swoją jednobinarną strukturę, zużywa niewielkie zasoby. Eliminuje też potrzebę instalowania dodatkowych usług, aby platforma orkiestracyjna działała. W rezultacie, zużywa mniej procesora i pamięci w węzłach, co przekłada się na mniejsze obciążenie i lepszą wydajność.
Jest wysoce elastyczny i radzi sobie z różnymi obciążeniami, zarówno lokalnie, jak i w chmurze. Dzięki swojej prostocie, odporności i wydajności, zyskuje się przewagę w utrzymaniu wydajności w miarę zwiększania się rozmiaru klastra.
Kubernetes
Kubernetes jest wysoce zoptymalizowany do obsługi obciążeń kontenerowych. Jeśli pracujesz z flotą mikrousług w kontenerach, Kubernetes sprawdzi się doskonale. Dzięki rozbudowanym możliwościom sieciowym i szerokiej gamie integracji, możesz przyspieszyć i dostosować swoją orkiestrację.
Ze względu na rozbudowane funkcje i konfiguracje, Kubernetes zużywa więcej zasobów systemowych. Wraz ze wzrostem rozmiaru klastra mogą pojawić się dodatkowe koszty i złożoność zarządzania.
#4. Sieć
Sieć jest istotnym aspektem w kontekście orkiestracji kontenerów. Określa sposób, w jaki węzły mogą się lokalizować i komunikować ze sobą.
Nomad
Koncentrując się przede wszystkim na organizacji obciążenia, Nomad minimalnie ingeruje w konfigurację sieci.
Zamiast polegać na infrastrukturze, Nomad operuje na konfiguracjach. Wszelkie potrzebne informacje pochodzą bezpośrednio z konfiguracji, bez konieczności uruchamiania dodatkowych komponentów, takich jak serwery DNS czy moduły równoważenia obciążenia. Podstawowa jednostka planowania w Nomadzie, znana jako Alokacje, może wykorzystywać blok sieciowy do żądania portów.
Kubernetes
W Kubernetes sieć stanowi fundament. Można kontrolować komunikację między kontenerami w obrębie hosta, komunikację między podami, komunikację podów z usługami, a także komunikację między usługami.
W przeciwieństwie do dynamicznych portów w Nomadzie, Kubernetes korzysta z abstrakcji API usług w celu udostępniania grupy Podów w sieci.
#5. Wymagania
W przypadku rozległej platformy orkiestracyjnej, wymagania systemowe zależą od wielkości klastra i uruchomionych obciążeń. Poza procesorem i pamięcią, niezbędne są również zasoby sieciowe.
Nomad
W przypadku serwerów produkcyjnych, zaleca się uruchamianie na dużych instancjach maszyn. Dobrze, aby każda instancja serwera dysponowała 4-8 lub więcej rdzeni procesora, 16-32 GB lub więcej pamięci i 40-80 GB lub więcej szybkiego dysku. Istotna jest również duża przepustowość sieci.
Korzystając z zapory sieciowej, należy upewnić się, że 3 porty Nomada są dozwolone. Te porty to: HTTP API (domyślnie 4646), używany przez serwery i klientów; RPC (domyślnie 4647), wykorzystywany do komunikacji wewnętrznej; oraz Serf WAN (domyślnie 4648), używany przez serwery do komunikacji z innymi serwerami.
Kubernetes
Klastry Kubernetes, szczególnie w środowiskach produkcyjnych o intensywnym użyciu kontenerów, mogą osiągać dużą złożoność. Zaleca się, aby każdy węzeł posiadał co najmniej 2-4 rdzenie procesora i 8-16 GB pamięci RAM.
W przypadku dużych klastrów, może być wymagana większa ilość zasobów na węzeł. Niezbędne jest również zapewnienie wystarczającej przepustowości sieci.
Chociaż Nomad i Kubernetes można skalować, aby dostosować je do swoich potrzeb, klaster Kubernetes może wymagać proporcjonalnie więcej zasobów.
#6. Kodowanie
Łatwość kodowania wpływa na skuteczność interakcji z wybranym frameworkiem. Poza definicją platformy i zadań, należy również poznać polecenia CLI, które pozwalają na interakcję z narzędziem wiersza poleceń.
Nomad
Język konfiguracji HCL (HashiCorp Configuration Language) jest głównym językiem używanym w Nomadzie. HCL łączy czytelność dla człowieka i przyjazność dla maszyn. Używa się go do pisania specyfikacji zadań, w tym zadań, ograniczeń i zależności dla aplikacji i usług.
Dodatkowo, trzeba nauczyć się poleceń CLI dla narzędzia wiersza poleceń Nomada. Umożliwia to interakcję z klastrem i dokonywanie konfiguracji.
Kubernetes
Zamiast polegać na innym języku, Kubernetes można konfigurować za pomocą plików YAML lub JSON. Te pliki konfiguracyjne pozwalają na łatwe opisanie działania aplikacji, w tym specyfikacji podów, usług, wdrożeń i innych zasobów.
W przypadku zaawansowanych aplikacji Kubernetes, Helm jest menedżerem pakietów, który umożliwia definiowanie, instalowanie i aktualizowanie nawet złożonych aplikacji. Wykresy Helm zapisywane są w formacie YAML i mogą zawierać szablony i pliki wartości do personalizacji wdrożeń.
Do interakcji z klastrem Kubernetes wykorzystywane jest narzędzie wiersza poleceń kubectl. Pozwala na uruchamianie różnych poleceń, tworzenie, modyfikowanie i zarządzanie zasobami.
#7. Integracja
Platformy orkiestracyjne posiadają własne zestawy obsługiwanych integracji. Można także znaleźć integracje zewnętrzne, które rozszerzają ich funkcjonalność.
Nomad
Nomad oferuje aktywne integracje z różnymi narzędziami i technologiami. Łączy się z Dockerem i innymi środowiskami wykonawczymi kontenerów, co ułatwia wdrażanie aplikacji kontenerowych. Integracja z Terraform upraszcza tworzenie zasobów.
Będąc częścią HashiCrop, Nomad współpracuje z HashiCorp Consul w zakresie wykrywania usług i monitorowania stanu, a HashiCorp Vault zapewnia bezpieczne zarządzanie sekretami. Potrzeby w zakresie monitoringu zaspokaja integracja z Prometheus, Grafana i ELK Stack. Dodatkowo Nomad sprawnie wpasowuje się w potoki CI/CD, umożliwiając automatyczne wdrażanie aplikacji.
Kubernetes
Kubernetes, jako sprawdzone rozwiązanie, oferuje szeroki wachlarz integracji. Można połączyć się z Dockerem do wdrażania kontenerów. W zakresie sieci można wykorzystać rozwiązania takie jak Calico lub Cilium. Opcje pamięci masowej, takie jak Ceph i dostawcy chmurowi (AWS EKS, Google GKE), aktywnie zarządzają trwałą pamięcią masową. Rozwiązania chmurowe oferują też dodatkowe usługi.
Jeśli chcesz obsługiwać obciążenia bezserwerowe, Kubernetes jest dobrym wyborem. Można rozszerzyć jego funkcjonalność o platformy bezserwerowe, takie jak Knative i KEDA (automatyczne skalowanie oparte na zdarzeniach).
#8. Graficzny interfejs użytkownika
Czasami może zachodzić potrzeba odejścia od wiersza poleceń i kodu i wizualnego przedstawienia platformy, na której się pracuje. Posiadanie GUI to umożliwia.
Nomad
Nomad ma wbudowany interfejs WWW, który jest częścią pliku binarnego. Po zainstalowaniu Nomada i uruchomieniu serwera, wraz z API i CLI, otrzymuje się również GUI. Aby rozpocząć korzystanie z interfejsu użytkownika i sprawdzić klaster, nie jest wymagana żadna konfiguracja.
Po uruchomieniu serwera Nomada, można wpisać adres serwera w przeglądarce internetowej. Nastąpi przekierowanie do internetowego interfejsu użytkownika. Dostępna jest również podkomenda interfejsu użytkownika, która pozwala na bezpośrednie przejście do żądanej strony z poziomu wiersza poleceń.
Kubernetes
Kubernetes nie ma domyślnego graficznego interfejsu użytkownika, ale można go zainstalować w razie potrzeby. Sam Kubernetes oferuje oficjalny interfejs użytkownika o nazwie Dashboard. Chociaż nie jest instalowany domyślnie, można go uruchomić za pomocą narzędzia kubectl. Za pomocą panelu kontrolnego można uzyskać przegląd swojego klastra.
Można wdrażać, zarządzać i rozwiązywać problemy z aplikacjami w kontenerach w klastrze Kubernetes. Dostawcy chmurowi, tacy jak AWS EKS i Google GKE, udostępniają własne interfejsy. Dostępne są również narzędzia firm trzecich.
Nomad kontra Kubernetes: tabela podsumowująca
Funkcja | Nomad | Kubernetes
—|—|—
Instalacja | Pojedynczy, wstępnie skompilowany plik binarny | Różne pliki binarne dla różnych komponentów i klientów
Skalowalność | Możliwość uruchomienia 10 000 węzłów i 2 milionów kontenerów | 5000 węzłów i łącznie 300 000 kontenerów
Wydajność | Prosty i wydajny przy mniejszym zużyciu zasobów | Rozbudowany zestaw funkcji, ale zużywa więcej zasobów
Sieć | Pojedyncza konfiguracja z dynamiczną alokacją portów | Dokładna kontrola, bez zależności od dynamicznych portów
Wymagania | Niższe wymagania systemowe dla większego klastra | Większy klaster potrzebuje więcej źródeł systemowych
Kodowanie | Ma bardzo szeroką gamę dostępnych integracji i narzędzi | Może korzystać z istniejących języków, takich jak YAML i JSON
Integracja | Ma dobre integracje oficjalne i zewnętrzne | Ma bardzo szeroką gamę dostępnych integracji i narzędzi
GUI | Wbudowany, dostępny w interfejsie internetowym | Należy zainstalować osobno
Wybierz odpowiednią platformę dla swoich potrzeb w zakresie orkiestracji
Wybór między Nomadem a Kubernetes zależy od specyficznych potrzeb i priorytetów. Obie platformy wspierają różnorodne przypadki użycia, takie jak planowanie wdrożeń, automatyczne wdrażanie i odzyskiwanie, wykrywanie klastrów i zarządzanie nimi.
Jeśli priorytetem jest prostota i masz niewielkie obciążenie, Nomad może okazać się lepszym wyborem. Dzięki pojedynczemu plikowi binarnemu i minimalnym wymaganiom, Nomad jest prosty w konfiguracji i obsłudze. Dodatkowo, umożliwia skalowanie klastra w celu obsługi dużej liczby węzłów.
Z drugiej strony, jeśli potrzebujesz rozbudowanych funkcji, precyzyjnej kontroli i szerokiej gamy integracji, to Kubernetes jest właściwym rozwiązaniem. Stanowi solidną platformę dla obciążeń kontenerowych i można go bezproblemowo zintegrować z różnymi narzędziami i technologiami. Można też wykorzystać zarządzane rozwiązania oferowane przez AWS i Google Cloud.
Warto wziąć pod uwagę inne aspekty, takie jak konieczność nauki nowego języka (HCL) w przypadku Nomada, podczas gdy konfiguracje Kubernetes korzystają z YAML lub JSON. Dla wygody obsługi może być potrzebny interfejs sieciowy.
Trzeba także wziąć pod uwagę dostępne zasoby systemowe i związane z nimi koszty. Wybór platformy orkiestracyjnej pomiędzy Nomadem a Kubernetes powinien wynikać z własnych potrzeb, doświadczenia i posiadanych zasobów.
Na koniec, warto zapoznać się z najlepszymi praktykami Kubernetes, aby zoptymalizować orkiestrację kontenerów.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.