Orkiestracja kontenerów w Docker Swarm

Wstęp do orkiestracji kontenerów w Docker Swarm

Konteneryzacja aplikacji za pomocą Dockera stała się w ostatnim czasie szybka, łatwa i przyjemna. Docker nie pozwala jednak na zaawansowane zarządzanie utworzonymi za jego pomocą kontenerami. Dlatego kolejnym naturalnym krokiem było pojawienie się systemów zarządzających grupą kontenerów. Dziś kilka słów na temat orkiestracji.

Konteneryzacja aplikacji za pomocą Dockera stała się w ostatnim czasie szybka, łatwa i przyjemna. Docker nie pozwala jednak na zaawansowane zarządzanie utworzonymi za jego pomocą kontenerami. Dlatego kolejnym naturalnym krokiem było pojawienie się systemów zarządzających grupą kontenerów. Dziś kilka słów na temat orkiestracji.

Liderem orkiestracji w momencie pisania tego artykułu (sierpień 2020) jest Kubernetes. Jednak nie ograniczajmy się do stosowania tego jedynego „słusznego” rozwiązania. Często łatwiejsze i szybsze może okazać się uruchomienie systemu do orkiestracji pod nazwą Docker Swarm, rozwijanego od 2016 roku. W dzisiejszym artykule przyjrzymy się jego możliwościom.

Docker Swarm (ang. rój) to jedna lub więcej maszyn fizycznych, lub wirtualnych, które mogą uruchamiać kontenery jako usługi. Każdy węzeł po dołączeniu do Swarma może być zarówno węzłem roboczym, jak i managerem. W Docker Swarm nie istnieje konieczność uruchamiania managerów jako osobnych węzłów, sam produkt ma wbudowany automatyczny balanser obciążenia. W zasadzenie nie wymaga on żadnej administracji, chociaż z pewnością nie jest tak zaawansowanym narzędziem, jak np. HAProxy czy NGINX. Dużym plusem na korzyść Docker Swarma jest automatyczne szyfrowanie połączeń pomiędzy węzłami.

Mając zainstalowanego Dockera mamy od razu dostępny system Docker Swarm. Za pomocą komendy:

docker swarm init

możemy zainicjować klaster.

Powyższa operacja możliwa jest tylko na jednym serwerze. Jeżeli potrzebujemy dodać kolejne maszyny, możemy wykonać polecenie:

docker swarm join -- token <...>

Jak się domyślamy, token to losowy ciąg znaków z serwera nadrzędnego. Token ten widzimy na ekranie podczas inicjalizacji Docker Swarm. Możemy go także uzyskać parametrem -q z przełącznikiem manager lub worker:

docker swarm join-token -q worker

Adresami IP możemy zarządzać za pomocą parametrów --advertise-addr oraz --listen-addr. Możemy ich użyć w poleceniu docker swarm init. Parametr --advertise-addr pozwala na ustawienie adresacji wewnątrz klastra, natomiast --listen-addr umożliwia ustalenie adresu IP do połączenia się z managerem.

Innymi przydatnymi poleceniami są np.:

docker node ls

a także

docker node ls -f

gdzie możemy filtrować wyświetlane pozycje po polach: id, label, membership, name, role.
Wyświetlenie działających w ramach klastra usług jest możliwe za pomocą polecenia:

docker service ps 

Bardziej szczegółowe informacje możemy wyświetlić za pomocą polecenia:

docker node inspect 

Możemy także wyświetlić informacje w bardziej przejrzystej formie za pomocą polecenia:

docker node inspect --format=pretty self

Wyposażeni w tak podstawowe informacje możemy przystąpić do uruchomienia prostej usługi w klastrze. Rozpoczynamy od inicjalizacji klastra:

docker swarm init

Orkiestracja kontenerów w Docker Swarm

Ponieważ nie podaliśmy żadnych dodatkowych parametrów, Docker sam przyjął adresację IP dla sieci. Wyświetlił także wspominany wcześniej token.

Dodajmy zatem usługę do naszego klastra. Na bazie kontenera EuroLinux 7  posłużymy się tutaj obrazem serwera httpd Apache.

W pierwszej kolejności pobieramy obraz lokalnie:

docker pull eurolinux/apache

Następnie uruchamiamy serwer w naszym klastrze z replikacją do 5 usług:

docker service create -p 80:80 --name ApacheEuroLinux --replicas 5 eurolinux/apache

Orkiestracja kontenerów w Docker Swarm

Sprawdźmy działanie naszych usług:

docker service ps ApacheEuroLinux

Orkiestracja kontenerów w Docker Swarm

W przeglądarce możemy zobaczyć powitalną stronę serwera www:

http://192.168.88.13

Orkiestracja kontenerów w Docker Swarm

Możemy także użyć komendy z „czystego” Dokera, aby zobaczyć działające kontenery:

docker ps

Zwróćmy uwagę na kolumnę NAMES oraz kolumnę ID z poprzedniego zrzutu:

Orkiestracja kontenerów w Docker Swarm

Usunięcie usługi jest możliwe za pomocą komendy:

docker service rm ApacheEuroLinux

Orkiestracja kontenerów w Docker Swarm

Podsumowanie

Jak już wspomnieliśmy, instalując Dockera otrzymujemy także Docker Swarm. Z pewnością jest to łatwiejsze narzędzie dla osób rozpoczynających przygodę z orkiestracją kontenerów niż Kubernetes. W wielu miejscach ułatwia początkowy start, ponieważ wydając jedno polecenie docker swarm init otrzymujemy od razu działający w pełni system orkiestracji. Pozwala nam to na szybkie uruchomienie środowiska zarówno dla potrzeb zespołu deweloperów, jak i na własny użytek. Z drugiej strony musimy pamiętać, że będąc izolowani od pewnych kwestii konfiguracyjnych, możemy mieć utrudnione możliwości rozwiązywania ewentualnych problemów. Niemniej, Docker Swarm pozostaje najlżejszym i najprostszym systemem orkiestracji. Czas pokaże, jakie będą dalsze losy tego projektu, ale osoby zainteresowane technologią konteneryzacji powinny bliżej poznać ten produkt.

 

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.