Jeśli konteneryzowałeś przepływ pracy deweloperskiej, zgodzisz się, że Docker jest jednym z najlepszych wyborów do kontroli wersji. Jednak Docker Swarm jest jedną z funkcji platformy Docker, która służy do organizowania złożonych aplikacji.
Mechanizm roboczy Docker Swarm może być początkowo trudny do złamania. Ale nie martw się, podzielimy to w tym artykule. Czym więc jest Docker Swarm? Dlaczego go używać? A jak to działa?
Co to jest Docker Swarm i jak to działa?
Docker Swarm odnosi się do grupy hostów Docker (komputerów) połączonych w sieć jako klaster w celu realizacji określonych zadań. Każdy host platformy Docker w tym klastrze jest węzłem, zwanym również węzłem roboczym.
Aby zapewnić wydajną dystrybucję zadań, potrzebujesz węzła menedżera. W idealnym przypadku inicjalizacja trybu Docker Swarm rozpoczyna się od węzła menedżera, a kolejne węzły stają się pracownikami.
Jako operator musisz tylko komunikować się z węzłem menedżera, który przekazuje instrukcje pracownikom. Niezmiennie węzły robocze otrzymują przydział zadań od węzła menedżera i odpowiednio je wykonują.
Jednak węzeł menedżera może również uczestniczyć w realizacji zadań (jako pracownik) lub bezpośrednio zarządzać twarzą. Możesz zapobiec planowaniu zadań w menedżerze, zmieniając jego stan z aktywny do odpływ. Ale twoja decyzja o przypisaniu tej podwójnej funkcji może zależeć od kilku czynników. Zasadniczo chcesz mieć pewność, że dysponuje wystarczającymi zasobami, aby obsłużyć kilka ról, zanim to zrobisz.
Węzły zawodzą. Tak więc węzeł menedżera aktywnie monitoruje stan każdego węzła roboczego i aktywuje mechanizm odporny na awarie w celu zmiany harmonogramu zadania z uszkodzonego węzła na inny.
Ale co, jeśli węzeł menedżera również ulegnie awarii? Co ciekawe, rój nie przestaje działać. Jedyną pułapką jest to, że nie będziesz już w stanie komunikować się z węzłem menedżera w celu kontrolowania klastra.
Typowym bezpiecznym podejściem, aby temu zapobiec, jest przypisanie roli menedżera do wielu węzłów (Docker zaleca maksymalnie siedem na klaster). Następnie możesz wybrać z nich główny węzeł menedżera. Gdy główny menedżer ulegnie awarii, jeden z menedżerów rezerwowych przejmuje rolę.
Nie musisz się jednak martwić o przełączanie ról między węzłami lub utrzymanie stanu w klastrze. Dba o to algorytm konsensusu tratwy (metoda odporna na awarie) wbudowany w Docker SwarmKit.
Dlaczego warto korzystać z Docker Swarm?
Docker Swarm jest przydatny do wdrażania złożonych aplikacji o dużych perspektywach skalowalności. Jednym z jego głównych przypadków użycia jest decentralizacja mikrousług. Każda mikrousługa udostępnia następnie podobny kontener z tymi w innych węzłach procesu roboczego.
Innym powodem używania Docker Swarm jest to, że wiele hostów wykonuje zadania jednocześnie w klastrze. Jest to w przeciwieństwie do Docker Compose, który umożliwia uruchamianie wielu kontenerów tylko w jednym aparacie Docker.
Ten skalowalny atrybut Docker Swarm umożliwia spójną dostępność aplikacji z zerowym opóźnieniem. To nawet jeden z powodów, dla których chcesz wybierz Dockera zamiast innych narzędzi do wirtualizacji.
I co więcej? W przeciwieństwie do pojedynczych kontenerów Docker, w których kontener zatrzymuje się w przypadku awarii, Docker Swarm automatycznie rozdziela zadania między dostępne węzły robocze w przypadku awarii.
Docker Swarm przechowuje również kopię zapasową każdego stanu. Dzięki temu zawsze możesz przywrócić nowe konfiguracje roju do stanu poprzedniego. Powiedzmy, że węzeł menedżera w poprzednim roju nie działa; możesz uruchomić nowy klaster z większą liczbą węzłów menedżera i przywrócić go, aby dostosować konfigurację poprzedniego.
Należy również wspomnieć, że interakcja między węzłem menedżera a węzłami roboczymi jest bezpieczna.
Docker ma wiele alternatyw, a jednym z najbliższych jest Kubernetes. Jednak Docker Swarm jest łatwy w użyciu i bardziej zautomatyzowany. Na przykład, chociaż może być konieczne ręczne równoważenie obciążenia w niektórych innych narzędziach do orkiestracji, takich jak Kubernetes, Docker Swarm oferuje automatyczne równoważenie obciążenia, co ułatwia życie DevOps.
Architektura roju Dockerów
Architektura Docker Swarm kręci się wokół usług, węzłów i zadań. Jednak każdy z nich ma do odegrania rolę w pomyślnym prowadzeniu stosu.
Usługi
Usługa Docker Swarm szczegółowo opisuje konfigurację obrazu Docker, który uruchamia wszystkie kontenery w roju. Zawiera informacje o zadaniach w klastrze. Na przykład usługa może opisywać: Konfiguracja zadokowanego serwera SQL.
Uruchomienie usługi zmusza węzeł menedżera do synchronizacji z jego konfiguracjami. Węzeł menedżera następnie uruchamia pozostałe węzły robocze na podstawie określonych ustawień w usłudze.
Usługi w Docker Swarm mogą być globalne lub replikowane.
Różnica między nimi polega na tym, że podczas gdy usługi globalne definiują tylko jedno zadanie dla wszystkich węzłów w klastrze, usługi replikowane określają liczbę zadań na węzeł.
Węzły
Węzeł w Docker Swarm to instancja całego środowiska wykonawczego Docker, znana również jako silnik Docker. Węzły roju mogą być maszynami fizycznymi lub wirtualnymi. Pomyśl o tym jako o sieci komputerów z podobnymi procesami (kontenerami).
Zazwyczaj jednak węzły rozciągają się na kilka komputerów i serwerów z silnikiem Dockera w rzeczywistych aplikacjach. Jak wspomniano wcześniej, węzeł może być węzłem menedżera lub pracownika, w zależności od roli.
Węzeł menedżera nasłuchuje pulsu roju i kontroluje węzły robocze, które wykonują zadania przydzielone im przez węzeł menedżera. Jak wspomniano wcześniej, w roju może znajdować się więcej niż jeden węzeł menedżera. Ale najlepiej spróbuj ograniczyć liczbę do siedmiu, ponieważ dodanie zbyt wielu węzłów menedżera może zmniejszyć wydajność roju.
Zadania
Zadanie definiuje pracę przypisaną do każdego węzła w roju Docker. W tle planowanie zadań w Docker Swarm rozpoczyna się, gdy koordynator tworzy zadania i przekazuje je do harmonogramu, który tworzy wystąpienie kontenera dla każdego zadania.
Węzeł menedżera następnie używa programu planującego do przypisywania i ponownego przypisywania zadań do węzłów zgodnie z wymaganiami i określonymi w usłudze Docker.
Rój Dockerów kontra Docker Compose: jakie są różnice?
Ludzie często używają zamiennie Docker Compose i Docker Swarm. Chociaż oba wymagają uruchamiania wielu kontenerów, są różne.
Podczas gdy Docker Compose umożliwia uruchamianie wielu kontenerów na jednym hoście, Docker Swarm rozdziela je na kilka silników Docker w klastrze.
Używasz Docker Compose, gdy musisz rozkręcić osobne kontenery dla każdej usługi w aplikacji. Tak więc, gdy jeden komponent ulega awarii, nie koliduje z innymi. Jednak gdy maszyna hosta ulegnie awarii, cała aplikacja również ulega awarii.
Jednak Docker Swarm ułatwia uruchamianie wielu kontenerów w węzłach klastrowanych. Tak więc każdy składnik Twojej aplikacji znajduje się na kilku węzłach. A gdy jeden węzeł obsługujący komponent aplikacji ulegnie awarii, rój przydziela swoje zadanie innemu węzłowi w klastrze i zmienia harmonogram uruchomionych zadań, zapobiegając przestojom.
W związku z tym, chociaż możesz mieć przestoje w Docker Compose, Docker Swarm zapewnia, że Twoja aplikacja będzie działała za pomocą serwerów zapasowych (węzły robocze). Jednak Docker 1.13 obsługuje wdrażanie Docker Compose w trybie Swarm przy użyciu wdrażanie stosu dokera Komenda.
Docker Swarm pomaga wdrażać złożone aplikacje
Konteneryzacja przebiła maszyny wirtualne w zakresie projektowania oprogramowania ciągłej integracji i ciągłego dostarczania (CI/CD). Dlatego zrozumienie sedna działania mechanizmu Docker Swarm jest umiejętnością dodatkową, jeśli chcesz zostać nieocenionym ekspertem DevOps.
Prawdopodobnie wiesz, jak uruchomić kontener Docker, a nawet uruchomić Docker Compose dla wielu kontenerów na jednym hoście. Jednak Docker Swarm jest wygodniejszy we wdrażaniu aplikacji o złożonej architekturze. Dzieli procesy na jednostki, poprawia dostęp do środowiska uruchomieniowego i zmniejsza lub nawet eliminuje ryzyko przestojów.