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
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
Sprawdźmy działanie naszych usług:
docker service ps ApacheEuroLinux
W przeglądarce możemy zobaczyć powitalną stronę serwera www:
http://192.168.88.13
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:
Usunięcie usługi jest możliwe za pomocą komendy:
docker service rm ApacheEuroLinux
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.