Orkiestracja kontenerów w Docker Swarm

Orkiestracja kontenerów w Docker Swarm na przykładzie EuroDB

W dzisiejszym artykule kontynuujemy opis możliwości, jakie daje nam Docker Swarm. Wyjaśnimy, w jaki sposób wykorzystać Docker Compose do orkiestracji kontenerów oraz pokażemy, że przejście na inne systemy orkiestracji, takie jak np. Kubernetes, może być również wsparte za pomocą dostępnych narzędzi.

W dzisiejszym artykule kontynuujemy opis możliwości, jakie daje nam Docker Swarm. Wyjaśnimy, w jaki sposób wykorzystać Docker Compose do orkiestracji kontenerów oraz pokażemy, że przejście na inne systemy orkiestracji, takie jak np. Kubernetes, może być również wsparte za pomocą dostępnych narzędzi.

Na początku artykułu przyjrzyjmy się kilku ważnym funkcjonalnościom pozwalającym na lepsze zarządzanie kontenerami, działającym pod kontrolą Docker Swarma.

Aktualizacja

W pewnym momencie pracy kontenerów zachodzi konieczność ich aktualizacji. Do tego celu służy komenda:

docker service update <...>

Należy jednak pamiętać, że w przypadku skorzystania z tagu latest przy uruchomieniu kolejnych instancji istnieje realne ryzyko użycia obrazów, które będą miały inną wersję niż aktualnie działające w naszym środowisku. Szczególnie dotyczy to sytuacji, gdy korzystamy z obrazów, których nie jesteśmy autorami, np. pobieramy obraz z Internetu.

Bezpieczeństwo

Do mocnych stron Docker Swarm niewątpliwie należy bezpieczeństwo. Umożliwia on bowiem zapisywanie takich danych jak klucze prywatne SSH, hasła czy certyfikaty SSL w postaci zbioru danych zwanych sekretem (ang. Docker secret). Dane te mogą być przesyłane i przechowywane w Dockerze w sposób zaszyfrowany. Dodatkowo są one dostępne tylko dla usług, dla których zostały nadane im prawa dostępu. Do wygenerowania sekretu używamy komendy:

docker secret create <...>

Przechowywanie konfiguracji

Kolejną przydatną funkcjonalnością jest możliwość przechowywania konfiguracji dla usług Docker Swarm poza samymi kontenerami. Oczywiście w tym przypadku mówimy o przechowywaniu danych niewrażliwych. Do wygenerowania konfiguracji służy polecenie:

docker config create <...>

Uruchamianie Swarma na podstawie pliku docker-compose

Możemy uruchomić Docker Swarm korzystając z definicji zawartych w docker-compose.yml. W naszym przypadku użyjemy pliku, który przygotowaliśmy podczas instalacji pakietu EuroDB w kontenerach. Pisaliśmy o tym w artykule o dockerowej instalacji komponentów EuroDB.

Przechodzimy do katalogu, w którym mamy zapisany nasz plik docker-compose.yml, a następnie wydajemy komendę:

docker stack deploy -c docker-compose.yml EuroDB

W jej wyniku otrzymujemy:

[wz@wz-host blog]$ docker stack deploy -c docker-compose.yml EuroDB

Creating network EuroDB_default
Creating service EuroDB_eurodb_statsanalyzer
Creating service EuroDB_eurodb_datagenerator
Creating service EuroDB_eurodb_db
Creating service EuroDB_eurodb_barman
Creating service EuroDB_eurodb_loganalyzer

Możemy wyświetlić działający stack:

[wz@wz-host blog]$ docker stack ps EuroDB

Orkiestracja kontenerów w Docker Swarm na przykładzie EuroDB

Aby wyświetlić działające kontenery, możemy także posłużyć się graficznym narzędziem dockersamples/visualizer:

docker run -d -p 5000:8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer

Orkiestracja kontenerów w Docker Swarm na przykładzie EuroDB

Jeżeli chcemy dokonać migracji naszych usług na platformę Kubernetes, możemy skorzystać z narzędzia kompose.io. Po jego instalacji (szczegóły instalacji na stronie www kompose.io) możemy w katalogu z plikiem docker-compose.yml wydać polecenie:

[wz@wz-host blog]$ kompose convert -f docker-compose.yml -o kubernetes-deployment.yml

INFO Service name in docker-compose has been changed from "eurodb_loganalyzer" to "eurodb-loganalyzer"
INFO Service name in docker-compose has been changed from "eurodb_statsanalyzer" to "eurodb-statsanalyzer"
INFO Service name in docker-compose has been changed from "eurodb_datagenerator" to "eurodb-datagenerator"
INFO Service name in docker-compose has been changed from "eurodb_db" to "eurodb-db"
INFO Service name in docker-compose has been changed from "eurodb_barman" to "eurodb-barman"

Jak widać, konwerter zmienił także nazwy serwisów w plikach, a wynik konwersji został zapisany do pliku kubernetes-deployment.yml. Korzytając z kubernetes-deployment.yml możemy uruchomić obrazy w Kubernetesie. Jednak temat ten będzie poruszony w kolejnych artykułach.

Podsumowanie

Przedstawiliśmy dziś mechanizm orkiestracji bazujący na rozwiązaniu Docker Swarm, które ma bardzo wiele zalet. Jednak obecnie na zdecydowane prowadzenie (pod względem popularności) wysuwają się systemy orkiestracji bazujące na rozwiązaniach Kubernetesa. Oprócz czystego Kubernetesa (K8s) mamy do dyspozycji szereg produktów bazujących na K8s, ale oferujących dodatkowe funkcjonalności: OpenShift, Rancher, OKD. Przedstawiliśmy także narzędzie, które pozwoli podjąć próbę przeniesienia działającego rozwiązania bazującego na Docker Swarm na platformę Kubernetsa. W kolejnych artykułach przybliżymy kolejne systemy orkiestracji.

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ść.