6.1 Podstawowe pojęcia Docker Swarm
Docker Swarm
— to wbudowany system orkiestracji kontenerów, udostępniony przez Docker. Umożliwia tworzenie, zarządzanie i skalowanie klastra z hostów Docker, zmieniając je w jeden logiczny host, na którym można uruchamiać kontenery. Swarm automatycznie rozdziela zadania między węzłami, zapewniając wygodę i odporność na błędy. W tym wykładzie omówimy kluczowe komponenty i podstawowe polecenia zarządzania Docker Swarm
.
Podstawowe pojęcia Docker Swarm
:
- Klastra (Swarm): grupa hostów Docker połączonych w jeden logiczny klaster.
- Managerowie (Managers): węzły zarządzające klastrem i dystrybuujące zadania między węzłami roboczymi.
- Węzły robocze (Workers): węzły, które wykonują zadania i uruchamiają kontenery.
- Serwisy (Services): logiczne przedstawienie aplikacji, określające jakie zadania należy wykonać i ile instancji kontenerów uruchomić.
- Zadania (Tasks): pojedyncze kontenery, będące instancjami serwisów.
Architektura Docker Swarm
:
Docker Swarm wykorzystuje architekturę opartą na managerach i węzłach roboczych. Managerowie zarządzają stanem klastra, a węzły robocze wykonują zadania.
Managerowie:
- Zarządzają stanem klastra i jego konfiguracją.
- Rozdzielają zadania między węzłami roboczymi.
- Zapewniają odporność na błędy i wysoką dostępność (przy wielu managerach).
Węzły robocze:
- Wykonują zadania zlecone przez managerów.
- Uruchamiają kontenery zgodnie z zadaniami.
Podstawowe polecenia Docker Swarm
:
-
docker swarm init
: inicjalizacja nowego klastra Swarm. -
docker swarm join
: dołączenie węzła do istniejącego klastra. -
docker node ls
: przeglądanie listy węzłów w klastrze. -
docker service create
: utworzenie nowego serwisu. -
docker service ls
: przeglądanie uruchomionych serwisów. -
docker service scale
: skalowanie serwisu do określonej liczby instancji. -
docker service rm
: usunięcie serwisu z klastra.
Korzystanie z Docker Swarm
upraszcza zarządzanie aplikacjami w systemach rozproszonych, zapewniając odporność na błędy, skalowalność i wygodę wdrażania.
6.2 Tworzenie klastra Docker Swarm
Tworzenie i zarządzanie klastrem Docker Swarm
Krok 1: Inicjalizacja klastra
Na pierwszym hoście (managerze) wykonaj komendę:
docker swarm init --advertise-addr <MANAGER_IP>
Ta komenda inicjalizuje nowy klaster Swarm, ustawi bieżący węzeł jako manager i wyświetli komendę do dołączania węzłów roboczych.
Krok 2: Dołączanie węzłów roboczych
Na innych hostach wykonaj komendę wyświetloną podczas wykonywania docker swarm init
, aby dołączyć je do klastra:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Gdzie:
<SWARM_TOKEN>
: token do połączenia z klastrem (zwracany przez komendędocker swarm init
).<MANAGER_IP>
: adres IP węzła-managera.
Krok 3: Wyświetlanie węzłów
Aby zobaczyć wszystkie węzły w klastrze, użyj komendy:
docker node ls
Ta komenda pokaże listę wszystkich węzłów, włącznie z ich rolami, stanami i dostępnością.
Przykład wyniku komendy docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Objaśnienie kolumn:
- ID: Unikalny identyfikator węzła.
- HOSTNAME: Nazwa hosta, na którym działa węzeł.
- STATUS: Aktualny status węzła (np. Ready).
- AVAILABILITY: Dostępność węzła (np. Active).
- MANAGER STATUS: Wskazuje, czy węzeł jest managerem (np. Leader, Reachable) czy węzłem roboczym (puste).
Klastr Docker Swarm jest teraz skonfigurowany, możesz tworzyć i skalować aplikacje.
6.3 Zarządzanie Docker Swarm
Zarządzanie usługami w Docker Swarm
1. Tworzenie usługi
Utwórz usługę, która zostanie uruchomiona z określoną liczbą replik:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
W tym przykładzie tworzymy usługę my_web
, która uruchamia 3 instancje Nginx. Kontenery publikują port 80 na porcie 8080 hosta.
2. Przeglądanie usług
Aby zobaczyć wszystkie uruchomione usługi w klastrze, użyj komendy:
docker service ls
Przykład wyjścia polecenia docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Skalowanie usługi
Aby zmienić liczbę instancji (replik) usługi, użyj komendy docker service scale
:
docker service scale my_web=5
Teraz usługa my_web
będzie miała 5 instancji.
4. Aktualizacja usługi
Aby zaktualizować obraz usługi do nowej wersji, użyj komendy docker service update
:
docker service update --image nginx:latest my_web
Zapewnienie wysokiej dostępności
Docker Swarm wspiera wysoką dostępność dzięki:
- Rozdzielaniu zadań między węzłami w klastrze, co umożliwia automatyczne przywracanie kontenerów w przypadku awarii.
- Wsparciu dla wielu menedżerów: Zaleca się nieparzystą liczbę menedżerów (na przykład 3 lub 5), aby uniknąć problemów z kworum.
- Używaniu replik: Skonfiguruj wiele replik dla każdej usługi, aby zwiększyć odporność na awarie.
Pojęcie kworum
Kworum to większość węzłów, które muszą zatwierdzić określoną akcję (np. zapis danych lub wybór lidera), aby była uznana za ważną. Na przykład, w klastrze z 5 węzłami kworum wynosi 3 węzły.
Przydatna wskazówka!
Upewnij się, że menedżerowie są umieszczeni na różnych serwerach fizycznych lub w chmurze, aby zminimalizować ryzyko równoczesnych awarii.
6.4 Przykład konfiguracji Docker Compose
dla Docker Swarm
Docker Compose
można używać z Docker Swarm
, aby uprościć zarządzanie aplikacjami wielokontenerowymi.
Przykład pliku docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: example
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Uruchamianie stacka Docker Compose
w Swarm
Aby zdeployować stack w Docker Swarm
, użyj polecenia:
docker stack deploy -c docker-compose.yml mystack
Podgląd stacka
Wyświetlanie wdrożonych stacków:
docker stack ls
Podgląd usług w stacku
docker stack services mystack
GO TO FULL VERSION