Poznajemy Docker Swarm - Linux Polska Open Source Company

Docker

Poznajemy Docker Swarm

05/05/2017
Podziel się

Docker Swarm jest stosunkowo nowym kompleksowym rozwiązaniem klastrowym działającym na zasadzie podobnej, co Google Kubernetes lub Apache Mesos, jednak dostarczanym i wspieranym bezpośrednio przez producenta, jako element ekosystemu przeznaczony dla systemów produkcyjnych, a więc z uwzględnieniem takich aspektów, jak:

  • wsparcie producenta – Docker Enterprise Edition to komercyjna wersja Swarma zawierająca przyjazne GUI oraz komponent DTR pozwalający podpisywać cyfrowo obrazy uruchamianych przez nas kontenerów,
  • bezpieczeństwo – cała komunikacja w klastrze jest szyfrowana przez tworzone automatycznie CA – z tej funkcjonalności nie można zrezygnować,
  • niezawodność – klaster działa w architekturze multi-master i replikuje na bieżąco wszystkie dane; komponent registry również można skalować na wiele maszyn,
  • skalowalność – w bardzo prosty sposób możemy uruchamiać kolejne repliki naszej aplikacji, a Swarm zadba o to, aby nadzorować ich stan i reagować na awarię pojedynczego kontenera,
  • zarządzanie konfiguracją w sposób deklaratywny – podobnie, jak w innych rozwiązaniach do zarządzania konfiguracji (Puppet, Ansible) określamy oczekiwany stan końcowy, nie zaś to, w jaki sposób chcemy, aby zadanie zostało zrealizowane – ułatwia to znacznie administrowanie złożonymi strukturami,
  • dedykowana warstwa sieciowa – Docker sam zarządza połączeniami pomiędzy elementami klastra oraz kontenerami tworząc sieci typu overlay (tunelowane) bez potrzeby ich ręcznego konfigurowania,
  • load balancing – klaster dostarcza prostej konfiguracji w której kontenery publikują porty sieciowe udostępniane na load balancerze – jeśli któryś z serwerów nie ma instancji kontenera (ze względu na określoną regułę lokalizacji kontenerów lub ich skalowanie), mimo to przyjmie połączenie i przekieruje je do najbliższej działającej instancji,
  • aktualizacje bezprzerwowe – dzięki klastrowi możemy zupełnie bezprzerwowo oraz w prosty sposób wykonywać aktualizacje wersji kontenerów i działających aplikacji,
  • integracja z Docker Engine – wszystkie elementy klastra są zintegrowane w podstawowej instancji demona obsługującego kontenery, nie musimy uruchamiać dodatkowych usług sieciowych, ani instalować dodatkowych bibliotek, a więc brak jest w systemie zależności, których niespełnienie mogłoby wpłynąć na działanie klastra.

Niewątpliwie wiele możemy zrobić bez używania Swarma i – może dlatego – jest on często pomijany na etapie poznawania i eksperymentowania z Dockerem. Warto jednak poznać i tę część ekosystemu, ponieważ odpowiada ona na bardziej zaawansowane potrzeby i pokazuje w jaki sposób finalnie Docker może sprawdzić się jako platforma wykorzystywana komercyjnie.

W tym artykule zaprezentuję jak w szybki sposób uruchomić własny lab w oparciu o Docker Swarm zawarty w nowym produkcie Docker Enterprise Edition i w jaki sposób rozpocząć eksplorację i dalszą naukę.

Zaczynamy od instalacji Docker CS, a więc wspieranej przez firmę Docker instancji Docker Engine – podstawowego demona odpowiedzialnego za budowanie, dostarczanie i uruchamianie kontenerów. Instrukcję instalacji znajdziemy w sieci w wariantach na różne systemy operacyjne (Linux, Mac, Windows) a także w opcjach cloudowych (AWS, Azure). W przypadku naszego systemu – Ubuntu – wystarczyło pobrać z internetu i uruchomić kilka komend (ze względu na brak możliwości jego weryfikacji, pamiętajcie aby zawsze uruchamiać lab na dedykowanej maszynie, którą po zakończeniu pracy będzie można przywrócić do poprzedniego stanu przez przywrócenie ze snapshotu/backupu lub reinstalację).

Na powyższym filmie widzimy próbę uruchomienia kontenera UCP (kontener bootstrapujący interaktywną instalację środowiska Docker Enterprise Edition), która nie udaje się ze względu na niewspieraną wersję Docker Engine – w systemie zainstalowana jest wersja Open Source serwera. Aby rozwiązać ten problem wystarczy pobrać i uruchomić skrypt https://packages.docker.com/1.13/install.sh który automatycznie zainstaluje niezbędne repozytorium i wykona aktualizację pakietów. Nam pozostaje tylko zrestartowanie serwera. Kolejne uruchomienie kontenera UCP prowadzi nas przez proces instalacji, w czasie którego musimy odpowiedzieć na pytanie pod jakim adresem będzie publicznie dostępne nasze GUI (w labie możemy to pominąć) oraz jaki użytkownik i hasło ma zostać startowo skonfigurowany. W efekcie uzyskamy adres https, który powinien zaprowadzić nas do konsoli graficznej, gdzie po zalogowaniu wgrywamy plik licencji. Licencję testową możemy darmowo uzyskać na okres 30 dni po zostawieniu swojego adresu email na stronie startowej Docker Enterprise Edition.

Rejestracja testowej licencji 30-dniowej
Strona, na której możemy pobrać licencję
Ekran logowania do UCP.
Na tej stronie uploadujemy uzyskany plik licencji.
Nasza instalacja jest gotowa – możemy przystąpić do dodawania kolejnych serwerów (nodes) i komponentów (DTR).

Kolejnym krokiem, jaki powinniśmy wykonać będzie dodanie kilku nowych serwerów, aby zasymulować działanie pełnoprawnego klastra. Ponieważ w naszym labie dysponujemy zazwyczaj tylko jednym fizycznym komputerem, wykorzystamy do tego celu oprogramowanie VirtualBox pozwalające na wirtualizację systemów na wszystkich popularnych platformach (Linux, Mac, Windows) oraz komponent ekosystemu dockera – Docker Machine, dzięki któremu możemy w sposób automatyczny uruchamiać nowe instancje VM z preinstalowanym Docker Engine. Docker Machine instalujemy bardzo prosto.

Jeśli nasz VirtualBox i Docker Machine są już gotowe – możemy przystąpić do instalacji dodatkowych serwerów. W GUI wybieramy pozycję “+Add node”. Uruchamiamy instalację Docker Machine, następnie logujemy się na nowo utworzony serwer VM, sprawdzamy jego adres IP i wpisujemy go w GUI w pole “custom listen address”. Uzyskane na dole ekranu polecenie wklejamy do konsoli GUI. Powtarzając te kroki możemy dodać kolejne kilka węzłów.

Ekran dodawania nowego serwera do klastra.
Inwentaryzacja naszego klastra.

Uwaga: po dodaniu serwerów dodanych przez Docker Machine otrzymamy ostrzeżenie (żółta belka) o niezgodności wersji Docker Engine w naszym klastrze, ponieważ na węźle master jest zainstalowana odmiana Enterprise Edition, a na pozostałych Open Source. W labie możemy zignorować to ostrzeżenie, jednak w produkcyjnych instalacjach powinniśmy upewnić się, że na wszystkich serwerach mamy zainstalowaną wersję Enterprise (robiliśmy to w pierwszym kroku).

Kolejnym krokiem jaki powinniśmy wykonać jest instalacja Docker Trusted Registry – komponentu repozytorium w którym przechowujemy własne obrazy kontenerów podpisane kryptograficznie. Uwaga: DTR nie może być instalowany wraz z UCP ponieważ obie usługi korzystają z portu sieciowego https (tcp/443). Dlatego potrzebujemy zainicjować przynajmniej jeden dodatkowy serwer, co zrobiliśmy w poprzednim kroku. Instalację DTR możemy zainicjować z GUI – znów otrzymamy podpowiedź z komendą, jaką powinniśmy wkleić do terminala. W warunkach labu możemy w miejsce publicznego adresu wpisać po prostu adres IP naszej VM. Zaznaczmy też rezygnację z weryfikacji certyfikatu UCP, ponieważ nie mamy nazwy domenowej, a więc nie może się ona powieść.

Ekran dodawania instancji DTR.

Prześledźmy krótki proces instalacji.

Nasza instancja DTR powinna wyświetlać się w aplikacjach:

Ekran statusu aplikacji dostępny z poziomu górnego menu w sekcji “Resources”.

Ostatnią rzeczą, jaką możemy zrobić jest zainstalowanie pakietu CLI, dzięki czemu uruchamiając komendę docker będziemy komunikować się bezpośrednio z klastrem. Pobierzemy i zainstalujemy odpowiednie certyfikaty:

Na stronie profilu kliknięcie “Create a Client Bundle” spowoduje pobranie pliku zip z certyfikatami.
Dzięki wczytaniu pliku env.sh będziemy mogli komunikować się bezpośrednio z klastrem.

Prześledźmy, jak zmienia się nasze środowisko, kiedy zainstalujemy paczkę z certyfikatami.

Nasza instalacja testowa jest już gotowa. Możemy uruchomić testową aplikację i sprawdzić jej status za pomocą CLI.

GUI prezentuje repliki z jakich składa się uruchomiona przez nas usługa nginx_test.

Czas na nieco bardziej złożone zadanie – opublikujemy testową aplikację za pomocą GUI składającą się z wielu kontenerów i prezentującą aplikację do głosowania na ulubione zwierzątko domowe. Do realizacji naszego zadania będziemy potrzebować odpowiedniego pliku tutaj kod opisu usługi.

Z powyższego opisu możemy odczytać, że nasza aplikacja będzie składać się z kilku kontenerów – serwera cache redis, bazy postgres, aplikacji webowej oraz serwera API.

Przeklejmy nasz opis do odpowiedniego pola (przycisk z rakietą – Deploy w menu Resources) i nazwijmy naszą aplikację “Vote”. Wybierzmy również, iż nasza aplikacja ma zostać wdrożona za pomocą serwisów – to ułatwi nam jej późniejsze skalowanie. Po kliknięciu przycisku “Create” musimy zaczekać, aż nasza aplikacja zostanie pobrana i uruchomiona.

Ekran konfiguracji wdrażania aplikacji w klastrze.
Trwa wdrożenie…
Ekran prezentujący aplikację.
Nasza aplikacja jest dostępna na każdym adresie IP serwera Docker. Jeśli na danym serwerze nie jest uruchomiona aplikacja Docker automatycznie przekieruje połączenie do najbliższej dostępnej instancji.
Możliwe jest łatwe skalowanie elementów wdrożonej aplikacji.

Nasza aplikacja pracuje w Docker Swarm i jest nadzorowana przez Docker Enterprise Edition. Gratulacje! Zachęcam Cię do dalszej eksploracji z tego miejsca i eksperymentowania za pomocą GUI z publikacją własnych aplikacji. Warto zajrzeć do dokumentacji projektu po więcej informacji. Powodzenia!

Zobacz również

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

    Skontaktuj się z nami