W dzisiejszym wpisie pokażę, jak skonfigurować Docker Swarm między dwoma serwerami w domowym labie. Skonfigurujemy klastry, połączymy je w jeden system i przygotujemy środowisko pod przyszłe projekty.
Czym jest Docker Swarm?
Docker Swarm to natywna funkcja Dockera do tworzenia klastrów i zarządzania wieloma serwerami (nazywanymi „węzłami”) jako jednym zintegrowanym systemem. Dzięki Swarmowi możemy:
- rozdzielać obciążenie między maszynami,
- automatycznie przywracać usługi po awarii,
- zarządzać kontenerami jako usługami (
services
) z replikacją, - wdrażać aktualizacje z zerowym czasem przestoju (rolling updates).
To lekka i prosta alternatywa dla Kubernetes – szczególnie w środowiskach domowych.
Moje środowisko labowe składa się w tej chwili z dwóch wirtualnych serwerów Ubuntu. Na pierwszym serwerze mam już zainstalowane i działające środowisko Dockera.
Instalacja Dockera
Przystępujemy do instalacji Dockera na pierwszym i drugim serwerze:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Po zakończeniu instalacji, dodajemy swojego użytkownika do grupy docker
:
sudo usermod -aG docker $USER
newgrp docker
Oczywiście zamiast $USER
wprowadzamy nazwę własnego użytkownika (innego niż root)
Inicjalizacja Swarma na pierwszym serwerze
Rozpoczynamy inicjację klastra Swarm:
docker swarm init --advertise-addr XXX.XXX.XXX.XXX
W miejsce X oczywiście wpisujemy adres własnego serwera. Po jego wykonaniu naszym oczom powinna ukazać się odpowiedź, że Swarm został zainicjonowany i obecny nod jest od teraz managerem klastra.
Swarm initialized: current node (xxxxxxxxxxxxxxxxxxxxxx) is now a manager.
Po wykonaniu tej komendy otrzymamy takżę instrukcję z tokenem:
docker swarm join --token SWMTKN-1-abc123… XXX.XXX.XXX.XXX:2377
Oczywiście należy go przekopiować w takiej postaci jakiej został wyświetlony, wraz z pełnym kluczem. Będzie nam potrzebny za chwilę.
Inicjalizacja Swarma na drugim serwerze
Przechodzimy do drugiego serwera i przekopiowujemy polecenie, które Docker wyświetlił nam na pierwszym serwerze. Po jego wykonaniu powinniśmy zobaczyć następujący wpis:
This node joined a swarm as a worker.
Wróćmy jeszcze na pierwszy serwer aby sprawdzić czy wszystko przebiegło pomyślnie. Wykonajmy polecenie aby sprawdzić status klastra:
docker node ls
Naszym oczom powinna ukazać się lista serwerów w klastrze Docker Swarm, która przed chwilą utworzyliśmy
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
XXXXXXXXXXXXXXXXXXXXXXXXX * serv1 Ready Active Leader 26.1.3
YYYYYYYYYYYYYYYYYYYYYYYYY serv2 Ready Active 28.2.2
W moim przypadku serv1
jest liderem w klastrze jednak z uwagi, że serwer ten był uruchamiany już jakiś czas temu w dodatku z repozytoriów systemowych, widzimy dodatkowo różnicę w wersji Dockera. Aby sprawdzić jaka wersja pakietu dostępna jest w repozytorium musimy wykonać polecenie:
apt list --upgradable | grep docker
Niestety w moim przypadku najnowsza dostępna wersja to 27.5.1, a więc inna niż ta którą posiadam na drugim serwerze.
Na ten moment zostawiamy tak jak jest a już w kolejnym wpisie przejdziemy przez proces migracji pakietu Dockera z repozytoriów systemowych na oficjalne źródło z Docker Inc.