Docker swarm搭建(1)

Docker swarm

docker swarm集群:三剑客之一

一. 实验环境

主机IP地址服务
docker01192.168.1.11swarm+overlay+webUI
docker02192.168.1.13docker
docker03192.168.1.20docker

三台主机都关闭防火墙,禁用selinux,修改主机名,时间同步,并添加域名解析。

docker版本必须是:v1.12版本开始(可使用docker version查看版本)

1.关闭防火墙,禁用selinux

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# hostnamectl set-hostname docker03
[root@localhost ~]# su -

2.时间同步

mv /etc/localtime /etc/localtime.bk
cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime

3.修改主机名(三台都要)

[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su -

4.添加域名解析

[root@docker01 ~]# vim  /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 docker01
192.168.1.13 docker02
192.168.1.20 docker03

二. swarm原理

**swarm:**作用运行docker engin的多个主机组成的集群

**node:**每一个docker engin都是一个node(节点),分为manager和worker。

**manager node:**负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager node,他们会自动协调并选举一个leader执行编排任务。但相反,不能没有manager node。

**worker node:**接受并执行由manager node派发的任务,并且默认manager node也是一个worker node,不过可以将它设置为manager-only node,让他只负责编排和管理工作。

**service:**用来定义worker上执行的命令。

基本命令操作

**docker swarm leave:**申请离开一个集群,之后查看节点状态会变成down,然后可通过manager node 将其删除
**docker node rm xxx:**删除某个节点

docker swarm join-token [manager|worker]:生成令牌,可以是manager或worker身份。

docker node demote(降级):将swarm节点的为manager降级为worker

docker node promote(升级):将swarm节点的work升级为manager

**docker node ls:**查看群集的信息(只可以在manager角色的主机上查看)

docker service scale web05=6:容器的动态扩容及缩容

docker service ps web01: 查看创建的容器运行在哪些节点

docker service ls: 查看创建的服务

docker swarm leave: 脱离这个群集

docker node rm docker03: 在manager角色的服务器上移除docker03

docker node update --availability drain docker01: 设置主机docker01以后不运行容器,但已经运行的容器并不会停止

docker node update --label-add mem=max docker03: 更改docker03主机的标签为mem=max

docker service update --replicas 8 --image 192.168.20.6:5000/lvjianzhao:v2.0 --container-label-add ‘node.labels.mem==max’ lvjianzhao05: 将服务升级为8个容器,并且指定在mem=max标签的主机上运行

三. docker01 初始化集群

[root@docker01 ~]# docker swarm init --advertise-addr 192.168.1.11

**–advertise-addr:**指定与其它docker通信的地址。

上边返回的结果告诉我们:初始化成功,并且,如果想要添加work节点运行下面的命令:

image-20191227100031387

注意:token令牌只有24小时的有效期

如果想要添加manager节点:运行下面命令

image-20191227100101785

四.swarm集群的简单操作

1.docker02和docker03以worker加入集群

[root@docker03 ~]# docker swarm join --token SWMTKN-1-5kxn9wloh7npnytklwbfciesr9di7uvu521gwnqm9h1n0pbokj-1e60wt0yr5583e4mzwbxnn3a8 192.168.1.11:2377
docker01查看集群
[root@docker01 ~]# docker node ls

image-20191227095739033

注意:这里的”*****“代表的是当前所属的节点

2.删除集群中节点

docker02和docker03申请离开一个集群
[root@docker02 ~]# docker swarm leave 
docker删除docker02和docker03节点
[root@docker01 ~]# docker node rm docker02 
[root@docker01 ~]# docker node rm docker03
docker01查看集群
[root@docker01 ~]# docker node ls

image-20191227101116537

3.docker02和docker03以manager加入集群

docker01生成manager令牌
[root@docker01 ~]# docker swarm join-token manager 

image-20191227101524317

docker02和docker03加入集群
docker swarm join --token SWMTKN-1-5kxn9wloh7npnytklwbfciesr9di7uvu521gwnqm9h1n0pbokj-cz6hbyv9r5htyqwj5tfol65aa 192.168.1.11:2377
docker01查看集群
[root@docker01 ~]# docker node ls

image-20191227101645916

4.docker02和docker03降级

docker01(manager)把docker02和docker03降级成worker
[root@docker01 ~]# docker node  demote docker02
[root@docker01 ~]# docker node  demote docker03
查看集群
[root@docker01 ~]# docker node ls

image-20191227102107194

五.部署docker swarm集群网络

overlay:覆盖型网络

overlay networks 管理Swarm中docker守护进程间的通信。可以将容器附加到一个或多个已存在的overlay网络上,使容器与容器之间能够通信;

[root@docker01 ~]# docker network create -d overlay --attachable docker
//attachable:这个参数必须要加,否则不能用于容器。

在创建网络的时候,我们并没有部署一个存储服务,比如consul,那是因为docker swarm自带存储。

docker01查看网络

但是会发现其他两台并不会发现此网络,需等基于此网络创建service服务就可以看到了

[root@docker01 ~]# docker network ls

image-20191227105017950

六. docker01部署一个图形化webUI界面

1.docker01 导入镜像

[root@docker01~]# docker pull dockersamples/visualizer

2.基于镜像启动一台容器

[root@docker01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.100 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualiaer  dockersamples/visualizer

3.通过浏览器访问验证http://192.168.1.11:8080/

image-20191227105857150

如果访问不到网页,需开启路由转发

[root@docker01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 
[root@docker01 ~]# sysctl -p

七. 创建service(服务)

1. 基于nginx容器创建一个service服务
[root@docker01 ~]#docker pull nginx
//下载nginx镜像(三台都要)
[root@docker01 ~]# docker service create --replicas 1 --network  docker --name web1 -p 80:80 nginx:latest 
[root@docker01 ~]# docker service create --replicas 1 --network  docker --name web2 -p 80 nginx:latest 

//–replicas:副本数量

大概可以理解为一个副本等于一个容器

2. 查看创建的service服务
[root@docker01 ~]# docker service ls

image-20191227110938144

单独查看一个servicefuw
[root@docker01 ~]# docker service  ps web1

image-20191227111603547

[root@docker01 ~]# docker service  ps web2

image-20191227111617335

3. web界面查看

image-20191227111400323

4. 基于nginx容器创建五个service服务
[root@docker01 ~]# docker service create --replicas 5 --network  docker --name web -p 80 nginx:latest 
web界面查看

image-20191227111721046

5. 挂起docker02
web查看(发现服务都分配到其他服务器了)

image-20191227112406099

6. 恢复docker02
web查看(发现服务没有回到docker02)

image-20191227112714567

八、实现docker容器的扩容及缩容

1. 删除web1和web2服务

[root@docker01 ~]# docker service rm web1 web2

2. 容器的扩容和缩减

(1)扩容

[root@docker01 ~]# docker service scale web=8

image-20191227114842044

(2)缩减

[root@docker01 ~]# docker service scale web=3

image-20191227114821286

3.设置manager node不参加工作

[root@docker01 ~]# docker node update docker01 --availability drain

设置主机docker01以后不运行容器,但已经运行的容器并不会停止
“–availability”选项后面共有三个选项可配置,如下:
“active”:工作;“pause”:暂时不工作;“drain”:永久性的不工作

[root@docker01 ~]# docker node ls

image-20191227115018372

web界面查看

image-20191227115142868

九、docker Swarm总结

在我对docker Swarm群集进行一定了解后,得出的结论如下:

  • 参与群集的主机名一定不能冲突,并且可以互相解析对方的主机名;
  • 集群内的所有节点可以都是manager角色,但是不可以都是worker角色;
  • 当指定运行的镜像时,如果群集中的节点本地没有该镜像,那么它将会自动下载对应的镜像;
  • 当群集正常工作时,若一个运行着容器的docker服务器发生宕机,那么,其所运行的所有容器,都将转移到其他正常运行的节点之上,而且,就算发生宕机的服务器恢复正常运行,也不会再接管之前运行的容器;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值