[11] Docker – Klaster Swarm

26 lutego 2021 Wyłączono przez Adam [zicherka] Nogły

Skonfiguruj Docker Swarm, aby utworzyć klaster Dockera z wieloma węzłami Dockera.

W tym przykładzie skonfigurujemy Swarm Cluster z 3 węzłami Dockera, jak poniżej. W Swarm Cluster istnieją 2 role, są to [Węzły menedżera] i [Węzły robocze].
Ten przykład pokazuje, jak ustawić te role, zaś rysunek pokazuje schemat sieci.


[1] Zainstaluj i uruchom usługi DOCKER’a na wszystkich węzłach: [1] Docker – Instalacja

[2] Zmień ustawienia dla Swarm’a na wszystkich węzłach.

[root@vlsr01 ~]# mcedit /etc/docker/daemon.json
# stwórz nowy plik
# wyłącz opcję przywracania na żywo (niemożliwe do użycia w trybie Swarm)
{
"live-restore": false
}
[root@vlsr01 ~]# systemctl restart docker

# jeśli jest uruchomiony Firewalld to zezwól na ruch na następujących portach
[root@vlsr01 ~]# firewall-cmd --add-port={2377/tcp,7946/tcp,7946/udp,4789/udp} --permanent
[root@vlsr01 ~]# firewall-cmd –reload

[3] Skonfiguruj klaster Swarm na węźle „Manager/Menadżer”.

[root@vlsr01 ~]# docker swarm init
Swarm initialized: current node (mt06j7vjqo48mcgv9rtczl4m8) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-3ew0n6pxeo9nsy9zizexu7lrrrmg921zg3swu6jeywb4pc5okx-3ok2mjf9ypz4mm4coc78h7qub 192.168.100.101:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[4] Dołącz do klastra Swarm wszystkie węzły Worker/Robotnik

[root@vlsr02 ~]# docker swarm join --token SWMTKN-1-3ew0n6pxeo9nsy9zizexu7lrrrmg921zg3swu6jeywb4pc5okx-3ok2mjf9ypz4mm4coc78h7qub 192.168.100.101:2377
This node joined a swarm as a worker.

[5] Zweryfikuj czy węzły faktycznie są dołączone i widoczne dla Manager’a

[root@vlsr01 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
mt06j7vjqo48mcgv9rtczl4m8 * vlsr01.zicher.lab Ready Active Leader 20.10.3
ujgr1a1un0vjttl3seo1wnx9o vlsr02.zicher.lab Ready Active 20.10.3
kzrotl0qxehwap1vow3ax173c vlsr03.zicher.lab Ready Active 20.10.3

[6] Sprawdź, czy klaster działa normalnie, tworząc usługę testową.

Na przykład utwórz kontenery usług internetowych i skonfiguruj usługę Swarm.
Ogólnie jest używany obraz kontenera w registry we wszystkich węzłach, ale w tym przykładzie utwórz obrazy kontenerów na każdym węźle, aby zweryfikować ustawienia i dostępy dla Swarm Cluster.

[root@vlsr01 ~]# mcedit Dockerfile
# utwórz nowy
FROM centos
MAINTAINER ZicherLab <root@zicher.lab>

RUN dnf -y install nginx
RUN echo "NGINX na VLSR01" > /usr/share/nginx/html/index.html

EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

[root@vlsr01 ~]# docker build -t nginx-server:latest .

[7] Skonfiguruj usługi na węźle Manager’a

Po pomyślnym skonfigurowaniu usługi, uzyskaj dostęp do nazwy hosta lub adresu IP węzła menedżera, aby sprawdzić, czy działa normalnie. Żądania dostępu do węzłów roboczych są równoważone obciążeniem przy użyciu okrężnego działania, jak poniżej.

[root@vlsr01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx-server latest 203e438c939f 8 minutes ago 289MB
zicher.lab/centos-httpd latest fa88e0f72687 15 hours ago 250MB
zicher.lab/centos-nginx latest e78c5cb00dad 25 hours ago 289MB
registry 2 5c4008a25e05 33 hours ago 26.2MB
nginx latest 35c43ace9216 8 days ago 133MB
ubuntu latest f63181f19b2f 5 weeks ago 72.9MB
centos latest 300e315adb2f 2 months ago 209MB

# stworz usługę/serwis z dwoma replikami
[root@vlsr01 ~]# docker service create --name swarm_cluster --replicas=2 -p 80:80 nginx-server:latest
image nginx-server:latest could not be accessed on a registry to record
its digest. Each node will access nginx-server:latest independently,
possibly leading to different nodes running different
versions of the image.

w9v0mgan7kty21bmjlols1038
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged

# pokaż listę usług
[root@vlsr01 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
w9v0mgan7kty swarm_cluster replicated 2/2 nginx-server:latest *:80->80/tcp

# wykonaj inspekcję usługi
[root@vlsr01 ~]# docker service inspect swarm_cluster --pretty
ID: w9v0mgan7kty21bmjlols1038
Name: swarm_cluster
Service Mode: Replicated
Replicas: 2
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: nginx-server:latest
Init: false
Resources:
Endpoint Mode: vip
Ports:
PublishedPort = 80
Protocol = tcp
TargetPort = 80
PublishMode = ingress

# pokaż stan usługi
[root@vlsr01 ~]# docker service ps swarm_cluster
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
lbhlfv92zph8 swarm_cluster.1 nginx-server:latest vlsr02.zicher.lab Running Running 4 minutes ago
0h61k56lj49a swarm_cluster.2 nginx-server:latest vlsr01.zicher.lab Running Running 4 minutes ago

# sprawdź poprawność działania
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR01
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR02
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR01
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR02

[8] Jeśli chcesz zmienić liczę replikacji, to postępuj jak poniżej.

# zmiana liczby replikacji do 3
[root@vlsr01 ~]# docker service scale swarm_cluster=3
swarm_cluster scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged

[root@vlsr01 ~]# docker service ps swarm_cluster
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
lbhlfv92zph8 swarm_cluster.1 nginx-server:latest vlsr02.zicher.lab Running Running 11 minutes ago
0h61k56lj49a swarm_cluster.2 nginx-server:latest vlsr01.zicher.lab Running Running 11 minutes ago
ntitcqnxg3su swarm_cluster.3 nginx-server:latest vlsr03.zicher.lab Running Running 29 seconds ago

# sprawdź poprawność działania
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR01
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR02
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR03
[root@vlsr01 ~]# curl vlsr01.zicher.lab
NGINX na VLSR01