Docker : Configure Swarm Cluster2019/07/24 |
Configure Docker Swarm to create Docker Cluster with multiple Docker nodes.
On this example, Configure Swarm Cluster with 3 Docker nodes like follows.
There are 2 roles on Swarm Cluster, those are [Manager nodes] and [Worker nodes This example shows to set those roles like follows. -----------+---------------------------+--------------------------+------------ | | | eth0|10.0.0.51 eth0|10.0.0.52 eth0|10.0.0.53 +----------+-----------+ +-----------+----------+ +-----------+----------+ | [ node01.srv.world ] | | [ node02.srv.world ] | | [ node03.srv.world ] | | Manager | | Worker | | Worker | +----------------------+ +----------------------+ +----------------------+ |
[1] | |
[2] | Configure Swarm Cluster on Manager Node. |
root@node01:~# docker swarm init Swarm initialized: current node (al73w42dwnui659iyomjcekds) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-19qm6ypn0d25pwisgcsjak9m31mwesutrl9448q7l92oe2izwb-8z3dk7xs19tuc1rxf9a2ix4tu 10.0.0.51:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. |
[3] | Join in Swarm Cluster on all Worker Nodes. It's OK to run the command which was shown when running swarm init on Manager Node. |
root@node02:~# docker swarm join \ --token SWMTKN-1-19qm6ypn0d25pwisgcsjak9m31mwesutrl9448q7l92oe2izwb-8z3dk7xs19tuc1rxf9a2ix4tu 10.0.0.51:2377 This node joined a swarm as a worker. |
[4] | Verify with a command [node ls] that worker nodes could join in Cluster normally. |
root@node01:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION al73w42dwnui659iyomjcekds * node01.srv.world Ready Active Leader 18.09.1 3nvb18sjv4ric46kawvfosx9h node02.srv.world Ready Active 18.09.1 zr23tmq3dj938va6lchm88y0f node03.srv.world Ready Active 18.09.1 |
[5] | After creating Swarm Cluster, next, configure services that the Swarm Cluster provides. Create the same container image on all Nodes for the service first. On this exmaple, create a Container image which provides http service like follows on all Nodes. |
root@node01:~#
vi Dockerfile FROM debian MAINTAINER ServerWorld <admin@srv.world> RUN apt-get update RUN apt-get -y install apache2 RUN echo "node01" > /var/www/html/index.html EXPOSE 80 CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"] docker build -t apache2_server:latest ./ |
[6] | Configure service on Manager Node. After successing to configure service, access to the Manager node's Hostname or IP address to verify it works normally. By the way, requests to worker nodes are load-balanced with round-robin like follows. |
root@node01:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE apache2_server latest 41d978b3ce45 10 seconds ago 243MB debian latest 00bf7fdd8baf 2 weeks ago 114MB # create a service with 2 repricas root@node01:~# docker service create --name swarm_cluster --replicas=2 -p 80:80 apache2_server:latest image apache2_server:latest could not be accessed on a registry to record its digest. Each node will access apache2_server:latest independently, possibly leading to different nodes running different versions of the image. ..... ..... 1/2: running 2/2: running verify: Service converged # show service list root@node01:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS tbnpvw5b871p swarm_cluster replicated 2/2 apache2_server:latest *:80->80/tcp # inspect the service root@node01:~# docker service inspect swarm_cluster --pretty ID: tbnpvw5b871puheptpakzcxby 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: apache2_server:latest Init: false Resources: Endpoint Mode: vip Ports: PublishedPort = 80 Protocol = tcp TargetPort = 80 PublishMode = ingress # show service state root@node01:~# docker service ps swarm_cluster ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bdjrhe896xye swarm_cluster.1 apache2_server:latest node02.srv.world Running Running 47 seconds ago fcq9es71z8zf swarm_cluster.2 apache2_server:latest node01.srv.world Running Running 47 seconds ago # verify it works normally root@node01:~# curl http://node01.srv.world node02 root@node01:~# curl http://node01.srv.world node01 root@node01:~# curl http://node01.srv.world node02 root@node01:~# curl http://node01.srv.world node01 |
[7] | If you'd like to change the number of repricas, configure like follows. |
# change repricas to 3 root@node01:~# 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@node01:~# docker service ps swarm_cluster ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bdjrhe896xye swarm_cluster.1 apache2_server:latest node02.srv.world Running Running about a minute ago fcq9es71z8zf swarm_cluster.2 apache2_server:latest node01.srv.world Running Running about a minute ago xghvm62h2o4x swarm_cluster.3 apache2_server:latest node03.srv.world Running Running 7 seconds ago # verify working root@node01:~# curl http://node01.srv.world node03 root@node01:~# curl http://node01.srv.world node02 root@node01:~# curl http://node01.srv.world node01 |
Sponsored Link |