Docker Swarm dla osiągnięcia wysokiej dostępności



Ten blog w witrynie Docker Swarm wyjaśnia moc konfigurowania klastra silników Docker za pośrednictwem skonfigurowanego rozwiązania Docker Swarm w celu osiągnięcia wysokiej dostępności.

Jaka jest najważniejsza cecha każdej aplikacji internetowej? Jest ich wiele, ale dla mnie duża dostępność jest najważniejszy. Właśnie to pomaga nam w osiągnięciu Docker Swarm! Pomaga w wysokiej dostępności aplikacji.

W moim poprzedni blog , Wyjaśniłem, jak działa Docker Compose. Ten blog na Docker Swarm jest kontynuacją poprzedniego i tutaj wyjaśniono zalety używania Docker Swarm do kontenerowania dowolnej aplikacji wielokontenerowej.





W przypadku tego bloga jest to tylko aplikacja Angular, która będzie obsługiwana przez Docker Swarm.
Uwaga : Metoda kontenerowania aplikacji MEAN Stack jest taka sama.

Więc co to jest Docker Swarm?

Docker Swarm to technika tworzenia i utrzymywania klastra Docker Engines . Silniki platformy Docker mogą być hostowane w różnych węzłach, a te węzły, które znajdują się w zdalnych lokalizacjach, tworzą plik Grupa po podłączeniu w trybie Swarm.



Dlaczego warto korzystać z Docker Swarm?

Z powodów już wymienionych! Osiąganie duża dostępność bez przestojów jest priorytetem dla każdego dostawcy usług. Czy wysoka dostępność zrobi wrażenie na Twoich klientach? Cóż, nie będą pod wrażeniem, jeśli napotkają przestoje. To oczywiste.

Inne zalety Docker Swarm

Podobnie jak wiele innych usług, Docker Swarm działa automatycznie równoważenie obciążenia dla nas. Dlatego inżynierowie DevOps nie muszą kierować żądań przetwarzania do innych węzłów, gdy jeden z nich zawiedzie. Menedżer klastra automatycznie przeprowadzi za nas równoważenie obciążenia.

Zdecentralizowany dostęp to kolejna korzyść. Co to znaczy? Oznacza to, że do wszystkich węzłów można łatwo uzyskać dostęp z poziomu menedżera. Menedżer będzie również regularnie podpowiadać węzłom i śledzić ich kondycję / stan, aby poradzić sobie z przestojami. Jednak węzły nie mogą uzyskać dostępu ani śledzić usług działających w innych węzłach / menedżerach.



Możesz sprawdzić nr. kontenerów działających w węźle, zwiększanie skali nie. kontenerów lub pomniejszyć nie. w oparciu o nasze wymagania, wykonując po prostu jedno polecenie.

Nawet po wdrożeniu aplikacji możemy wydać aktualizacje kroczące i upewnij się, że osiągnięto CI (Continuous Integration). Aktualizacje kroczące są wydawane do jednego węzła po drugim, co zapewnia brak przestojów i rozkład obciążenia między innymi węzłami w klastrze.

Więc, co dalej? Aby zrobić to, co oczywiste. Rozpocznij z Docker Swarm, jeśli pracowałeś już nad Dockerem lub jeśli Twoja organizacja chce umieścić w kontenerach niezawodną usługę internetową.

Uwaga : Silniki platformy Docker są instalowane na niezależnych hostach / serwerach lub na wielu maszynach wirtualnych na hoście.

Pierwsze kroki w trybie Swarm

Docker Swarm jest inicjowany przez menedżera, albo powiem tak, instancja, która uruchamia klaster Swarm, staje się menedżerem. Polecenie do uruchomienia klastra to:

$ docker swarm init --advertise-addr adres IP

W tym przypadku flaga „–advertise-addr” jest używana do ogłaszania się innym węzłom, które chcą dołączyć do klastra. Adres IP menedżera należy określić wraz z flagą. Poniżej przykładowy zrzut ekranu.

polecenie docker init - docker swarm - edureka

Po zainicjowaniu klastra Swarm generowany jest token na końcu menedżera. Ten token musi być używany przez inne węzły, aby dołączyć do klastra roju.

Jak to dokładnie jest? Skopiuj cały token wygenerowany w silniku dokowanym menedżera, wklej go w silniku dokowanym węzła i wykonaj. Podświetlona część powyższego zrzutu ekranu to token. Gdy token zostanie wykonany w węźle roboczym, będzie wyglądał jak na poniższym zrzucie ekranu.

Każdy węzeł, który dołącza do klastra, można później awansować na menedżera. Jeśli chcesz, aby silnik Dockera dołączył jako menedżer, wykonaj poniższe polecenie na końcu menedżera:

Menedżer tokenu dołączenia $ docker swarm

A później, jeśli chcesz, aby token węzła dołączył do klastra, uruchom poniższe polecenie:

$ docker swarm Join-token node

Śmiało i wykonaj token w każdym węźle, który chcesz, aby dołączyć do klastra. Po wykonaniu tego wszystkiego możesz uruchomić polecenie docker node list, aby sprawdzić, ile węzłów dołączyło do klastra wraz z ich stanem. Polecenie to:

$ docker node ls

Zrzut ekranu znajduje się poniżej:

Tworzenie obrazu platformy Docker dla aplikacji Angular

Jeśli wszystko jest w porządku, możemy uruchomić naszą usługę Swarm, pod warunkiem, że jest zbudowany obraz Docker. Obraz platformy Docker można zbudować z pliku Dockerfile. Plik Dockerfile używany do tworzenia aplikacji znajduje się poniżej:

Z węzła: 6 URUCHOM mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app URUCHOM npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Plik Dockerfile służy do wspólnego wykonywania zestawu poleceń w celu zbudowania niestandardowego obrazu platformy Docker z obrazu podstawowego. Jak widać, obraz podstawowy, którego użyłem, to „Węzeł: 6”. NodeJS to obraz I z Docker Hub, który jest oznaczony jako wersja 6.

Następnie tworzę nowy katalog Docker w kontenerze i ustawiam go jako katalog roboczy w moim kontenerze.

Kopiuję plik „package.json” z komputera lokalnego do katalogu roboczego kontenera. Następnie określam polecenia „RUN npm cache clean” i „RUN npm install”. npm install polecenie pobiera wersję zależności wymienioną w pliku package.json.

Następnie kopiuję wszystkie kody projektu z komputera lokalnego do kontenera, udostępniając port numer 4200 w celu uzyskania dostępu do aplikacji Angular w przeglądarce i na koniec określam polecenie start npm, które konteneruje aplikację.

Teraz, aby utworzyć obraz Dockera na podstawie tego pliku Dockerfile, uruchom poniższe polecenie:

$ docker build -t angular-image.

Uwaga: Obrazy platformy Docker muszą zostać zbudowane we wszystkich węzłach w klastrze. Bez tego kontenery nie mogą być obracane w innych silnikach Dockera.

Uruchamianie usługi Docker Swarm

Biorąc pod uwagę, że nasz obraz Docker jest zbudowany, możemy wykręcić kontener z tego obrazu. Ale zrobimy coś lepszego: stworzymy z tego usługę Docker Swarm. Polecenie do utworzenia usługi roju to:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 angular-image

W tym przypadku flaga „name” służy do nadania nazwy mojej usłudze, a flaga „p” służy do ujawnienia portu kontenera portowi hosta. W pliku package.json określiłem port kontenera, na którym powinna być hostowana aplikacja Angular. A 4200 w tym poleceniu pomaga odwzorować port 4200 kontenera na port 4200 hosta. „Angular-image” to nazwa obrazu, który utworzyłem wcześniej.

Zapamiętaj : Gdy tworzymy usługę, można ją hostować na dowolnym silniku platformy Docker w klastrze. Menedżer roju zdecyduje, gdzie będzie on hostowany. Jednak bez względu na to, w którym węźle jest hostowana, dostęp do aplikacji można uzyskać na localhost: 4200 z dowolnego węzła połączonego w klastrze.

Jak to możliwe? Ponieważ Swarm wewnętrznie ujawnia numery portów, aby były dostępne dla każdego innego węzła w klastrze. To znaczy, port nr. 4200 na dowolnym węźle / menedżerze w klastrze wyrenderowałoby aplikację Angular.

Co teraz? Czy kontener jest aktywny?

Możesz sprawdzić, czy usługa jest umieszczona w kontenerze, uruchamiając polecenie docker service list. Jednak wdrożenie kontenera może chwilę potrwać. Poniżej znajduje się polecenie:

$ docker service ls

To polecenie wyświetli listę wszystkich usług zarządzanych przez klaster Swarm. W naszym przypadku powinien wyświetlać jeden aktywny kontener. Spójrz na poniższy zrzut ekranu w celach informacyjnych.

jak wdrożyć listę połączoną w c

W tym przypadku „REPLICAS = 1/1” wskazuje, że istnieje jedna „usługa” tego kontenera w klastrze. A „TRYB = replikowana” oznacza, że ​​usługa jest replikowana na wszystkich węzłach klastra.

Teraz, aby zidentyfikować, na którym węźle / menedżerze jest hostowana aplikacja, możemy uruchomić polecenie docker service ps polecenie, po którym następuje nazwa kontenera. Polecenie to:

$ docker service ps Angular-App-Container

Zrzut ekranu tego samego znajduje się poniżej.

Zawiera szczegółowe informacje o węźle, w którym jest hostowana aplikacja, wraz z poleceniem używanym do uruchamiania usługi.

Polecenie „docker ps” rzuca światło na szczegóły dotyczące aktywnego kontenera. Polecenie to:

$ docker ps

Spójrz na poniższy zrzut ekranu w celach informacyjnych.

Ale to polecenie będzie działać tylko w menedżerze klastra i węźle, w którym usługa jest faktycznie hostowana.

Aby sprawdzić, ile węzłów jest uruchomionych, uruchom polecenie lista węzłów. Polecenie to:

$ docker node ls

Aby sprawdzić kontenery działające na określonym hoście, uruchom polecenie node ps. Polecenie to:

$ docker node ps

Jeśli pamiętasz, wspomniałem wcześniej, że usługa obecnie działa w TRYBIE replikowanym. Oznacza to, że usługa jest replikowana we wszystkich węzłach w klastrach. Czy uważasz, że jest alternatywa?

Absolutnie! Jest coś, co nazywa się TRYBEM GLOBALNYM. W tym trybie usługa tego kontenera działa na każdym / managerze w klastrze. Pamiętaj, aby zatrzymać bieżącą usługę / kontener przed obróceniem kolejnego zestawu kontenerów.

Polecenie to:

$ docker service rm Angular-App-Container

Polecenie obracania kontenera w trybie globalnym to:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angular-image

Spowodowałoby to utworzenie 3 usług w 3 węzłach w naszym klastrze. Możesz to sprawdzić, uruchamiając polecenie docker service list. Zrzut ekranu tego znajduje się poniżej.

Po wykonaniu polecenia docker service ps, zobaczysz coś takiego:

Jak widać, tryb jest replikowany, a repliki tego kontenera to 3. Teraz jest najlepsza część tego bloga.

Aby mieć 2 repliki usług uruchomionych między trzema kontenerami, możemy użyć flagi replik. Spójrz na poniższe polecenie:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

Zauważysz, że te 2 usługi są równoważone obciążeniem między trzema węzłami w klastrze. Uruchom polecenie docker service process, aby sprawdzić, w których węzłach kontenery są aktywne. Spójrz na poniższy zrzut ekranu w celach informacyjnych. Kontenery są aktywne w jednym węźle menedżera i jednym węźle roboczym.

W węźle roboczym możesz sprawdzić, czy kontener jest uruchomiony, wykonując polecenie „docker ps”.

Wysoka dostępność Docker Swarm

Teraz, aby faktycznie zweryfikować, czy w naszym klastrze jest wysoka dostępność, musimy doświadczyć scenariusza, w którym jeden z węzłów ulega awarii, a inne węzły w klastrze nadrabiają to. Możemy doprowadzić do tego scenariusza, ręcznie zatrzymując kontener z jednego z węzłów za pomocą tego polecenia:

$ docker stop Angular-App-Container

Uruchom powyższe polecenie na węźle: Worker-1, na którym działa kontener.Z poziomu menedżera wykonaj polecenie:

$ docker service ps Angular-App-Container

Zauważysz teraz, że kontener działa teraz w węźle: Worker-2 i Manager. Jednak został zamknięty z węzła: Worker-1. To samo widać na poniższym zrzucie ekranu.

Oto jak Wysoka dostępność platformy Docker jest osiągnięte. jan pomimo braku aktywności kontenera w Worker-1, aplikacja może być renderowana na porcie numer 4200 w tym węźle roboczym. Dzieje się tak, ponieważ jest wewnętrznie połączony z innymi węzłami w klastrze i może renderować aplikację w przeglądarce.

Wysoka dostępność po rozszerzeniu usług

Czy to w trybie replikowanym, czy w trybie globalnym, możemy zwiększyć liczbę usług działających w naszym klastrze. I nawet po zwiększeniu skali będziemy w stanie zachować wysoką dostępność. Niesamowite, prawda?

java podzielony ciąg wielu separatorów

Ale wracając do naszego punktu, zobaczmy, jak łatwo jest zwiększyć liczbę usług w naszym klastrze. Zakładając, że w naszym klastrze mamy 2 lub 3 repliki, przeskalujmy usługi do 5, wykonując po prostu jedno polecenie. Polecenie to:

Skala usługi $ docker Angular-App-Container = 5

Zrzut ekranu tego znajduje się poniżej.

Uruchamiając polecenie docker service list, możesz zauważyć, że liczba replik wynosi teraz 5. A uruchamiając polecenie docker service ps wraz z nazwą usługi, możesz zobaczyć, jak 5 usług jest równoważonych i dystrybuowanych w 3 węzłach . Polecenia to:

$ docker service ls $ docker service ps Angular-App-Container

I wreszcie, w konfiguracji Docker Swarm, jeśli nie chcesz, aby Twój menedżer uczestniczył w postępowaniu i zajmował go tylko zarządzaniem procesami, możemy odciągnąć menedżera od hostowania dowolnej aplikacji. Bo tak to działa na świecie, prawda? Menedżerowie służą tylko do zarządzania innymi pracownikami. W każdym razie polecenie, aby to zrobić, to:

Aktualizacja węzła $ docker --availability Drain Manager-1

Możesz sprawdzić, czy menedżer bierze teraz udział w klastrze, uruchamiając polecenie docker node list i docker service ps:

$ docker node ls $ docker service ps Angular-App-Container

Możesz teraz zauważyć, że usługi kontenerowe zostały podzielone między węzły robocze, a węzeł menedżera został faktycznie opróżniony z konteneryzacji dowolnej usługi. Zrzut ekranu znajduje się poniżej.

To oznacza koniec tego bloga na Docker Swarm. Mam nadzieję, że ten blog wyjaśnił, jak ważne jest wdrożenie trybu Swarm, aby osiągnąć wysoką dostępność. Wkrótce pojawią się kolejne blogi w tej serii samouczków dotyczących platformy Docker.

Alternatywnie możesz obejrzeć poniższy film, aby zrozumieć, jak działa Docker Swarm. Wszystkie wyjaśnione powyżej koncepcje zostały omówione w filmie.

Wysoka dostępność Docker Swarm | Samouczek Dockera | Samouczek DevOps

Teraz, gdy znasz już platformę Docker, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Ten kurs szkoleniowy Edureka Docker Certification Training pomaga uczestnikom zdobyć wiedzę w zakresie wdrażania Dockera i opanowania go.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą.