swarm管理的docker集群
和k8s一样是管理docker的工具,自带负载均衡和高可用性能
前期规划:
manager:192.168.0.34
worker:192.168.0.39 192.168.0.44 192.168.0.45
在manager上创建Swarm集群
[root@swarm-manager ~]# docker swarm init --advertise-addr 192.168.0.34
Swarm initialized: current node (srddq2lf5q54idhwx4y5sw20c) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-06ddfc5cukwjmk88td658nr5nezq0vngf4662za0g6t3uzop1j-ai9mbq1c8acs9coxm5shzakm9 \
192.168.0.34:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
把worker加入集群,在worker上操作
[root@swarm-worker1 ~]# docker swarm join \
> --token SWMTKN-1-06ddfc5cukwjmk88td658nr5nezq0vngf4662za0g6t3uzop1j-ai9mbq1c8acs9coxm5shzakm9 \
> 192.168.0.34:2377
This node joined a swarm as a worker.
[root@swarm-worker2 ~]# docker swarm join \
> --token SWMTKN-1-06ddfc5cukwjmk88td658nr5nezq0vngf4662za0g6t3uzop1j-ai9mbq1c8acs9coxm5shzakm9 \
> 192.168.0.34:2377
This node joined a swarm as a worker.
[root@swarm-worker3 ~]# docker swarm join \
> --token SWMTKN-1-06ddfc5cukwjmk88td658nr5nezq0vngf4662za0g6t3uzop1j-ai9mbq1c8acs9coxm5shzakm9 \
> 192.168.0.34:2377
This node joined a swarm as a worker.
在manager上查看节点信息
[root@swarm-manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
64rrurxm26pl7y1jvwocmqofn db-slave Ready Active
nhttqvh8b961kvq9rpntcg48f db-slave Ready Active
srddq2lf5q54idhwx4y5sw20c * db-master Ready Active Leader
sszb8hdctni1emgxvlznorbw2 db-slave Ready Active
在manager上创建网络
[root@swarm-manager ~]# docker network create -d overlay nginx_net
l2ed7k1o4s9f5grr0kkrk49pk
[root@swarm-manager ~]# docker network ls | grep nginx_net
l2ed7k1o4s9f nginx_net overlay swarm
在master创建服务
[root@swarm-manager ~]# docker service create --replicas 1 --network nginx_net --name tzk_nginx -p 80:80 nginx
t1y1ye7e22ewit9i9g0qmqvje
[root@swarm-manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE
t1y1ye7e22ew tzk_nginx replicated 1/1 nginx:latest
[root@swarm-manager ~]# docker service ps tzk_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2mymixr2q1e7 tzk_nginx.1 nginx:latest swarm-manager Running Running 5 minutes ago
扩充到5个副本
[root@swarm-manager ~]# docker service scale tzk_nginx=5
tzk_nginx scaled to 5
[root@swarm-manager ~]# docker service ps tzk_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2mymixr2q1e7 tzk_nginx.1 nginx:latest swarm-manager Running Running 6 minutes a go
grrqksoek384 tzk_nginx.2 nginx:latest swarm-worker3 Running Preparing 9 seconds ago
1r6f71m6s9ip tzk_nginx.3 nginx:latest swarm-worker3 Running Preparing 9 seconds ago
0avpc3sbbde6 tzk_nginx.4 nginx:latest swam-worker1 Running Preparing 9 seconds ago
a0x75jax93w3 tzk_nginx.5 nginx:latest swarm-worker2 Running Preparing 9 seconds ago
尝试宕机一台worker节点机器,查看高可用效果 ==》sawam-worker2的服务转移到manager上(swarm的负载均衡会把请求路由到一个任意节点的可用的容器上,随机转移到master和另外sawam-worker1、sawam-worker3上)
[root@swarm-manager ~]# docker service scale tzk_nginx=5
tzk_nginx scaled to 5
[root@swarm-manager ~]# docker service ps tzk_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2mymixr2q1e7 tzk_nginx.1 nginx:latest swarm-manager Running Running 41 minutes ago
grrqksoek384 tzk_nginx.2 nginx:latest swarm-worker3 Running Running 34 minutes ago
1r6f71m6s9ip tzk_nginx.3 nginx:latest swarm-worker3 Running Running 34 minutes ago
0avpc3sbbde6 tzk_nginx.4 nginx:latest swam-worker1 Running Running 34 minutes ago
crq0v8axeov8 tzk_nginx.5 nginx:latest swarm-manager Running Running 3 seconds ago
647qcrb35m5d \_ tzk_nginx.5 nginx:latest swarm-worker2 Shutdown Running 22 seconds ago
a0x75jax93w3 \_ tzk_nginx.5 nginx:latest swarm-worker2 Shutdown Rejected 35 minutes ago "No such image: nginx@sha256:b…"
把swarm-worker2的docker服务又起来之后,把manager上的tzk_nginx.5.crq0v8axeov885kqc0ztu7jod停掉,这个task又回到swarm-worker2上
[root@swarm-manager ~]# docker stop tzk_nginx.5.crq0v8axeov885kqc0ztu7jod
tzk_nginx.5.crq0v8axeov885kqc0ztu7jod
[root@swarm-manager ~]# docker service ps tzk_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
2mymixr2q1e7 tzk_nginx.1 nginx:latest swarm-manager Running Running 58 minutes ago
grrqksoek384 tzk_nginx.2 nginx:latest swarm-worker3 Running Running 50 minutes ago
1r6f71m6s9ip tzk_nginx.3 nginx:latest swarm-worker3 Running Running 50 minutes ago
0avpc3sbbde6 tzk_nginx.4 nginx:latest swam-worker1 Running Running 51 minutes ago
oouh6fo5tohv tzk_nginx.5 nginx:latest swam-worker2 Running Running 6 seconds ago
swarm的负载均衡
在manager上缩容到2个,curl 192.168.0.34,仍然有web服务效果
[root@swarm-manager ~]# docker service scale tzk_nginx=2
tzk_nginx scaled to 2
[root@swarm-manager ~]# docker service ps tzk_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pl93ys463v5n tzk_nginx.1 nginx:latest db-slave Running Running 29 minutes ago
sdezn4ltgsyp tzk_nginx.6 nginx:latest swarm-worker3 Running Running 29 minutes ago
[root@swarm-manager ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@swarm-manager ~]# curl 192.168.0.34
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>