容器编排Swarm
一、多机多容器管理痛点
之前我们都是在一台云服务器中创建多个容器进行项目部署操作,但是实际过程中会出现多台云服务器多容器的情况,如何管理这多台云服务器中的多个容器?
- 怎么去管理多台服务器中的多个容器?
- 怎么能方便的横向拓展?即在集群中再增加一台云服务器部署应用?
- 如果一台服务器中的某个容器down了,怎么能自动恢复?
- 如何去更新容器而不影响业务?
- 如何去监控追踪这些容器?
- 怎么去调度、控制容器的创建?
- 怎么保护隐私数据?
二、Swarm模式
1.简介
- Swarm是一个容器编排的工具,当然还有其他的工具可以用来做容器的编排。
- Swarm它是内置于docker中的,安装完docker后即可以使用swarm了,只是一开始我们使用的是单机模式,需要手动开启Swarm模式。
2.架构
三、创建Swarm集群
1.环境准备
在本机准备四个虚拟机,分别模拟四个节点:
节点1:192.168.8.135
节点2:192.168.8.136
节点3:192.168.8.138
节点4:192.168.8.137
2.将节点1服务器声明swarm Manager节点
docker swarm init --advertise-addr=192.168.8.135
出现提示当前节点已经是一个Manager节点,且如果要向这个集群中添加worker节点,执行下面的语句即可。
3.将节点2、节点3、节点4当作worker节点添加到swarm集群中
4.在节点1中查看该swarm集群中的节点情况
docker node ls
显示有一个leader节点,三个worker节点
5.修改集群中的主机名
上面会发现节点中的HOSTNAME都是localhost.localdomain,这是因为各个节点的主机名都是这个名字,为了方便区分,分别修改四个节点的名字:
hostnamectl set-hostname docker_node1
四、Swarm Service和Swarm集群操作
1.在Swarm Manager节点创建Service
docker service create --name=busybox_demo busybox sh -c "while true; do sleep 3600;done"
2.在Manager节点中查看Service
docker service ls
3.在Manager节点中查看容器
发现有一个service名字.xxxx的容器
4.横向扩展
manager节点中查看service信息发现有一项信息:MODE = replicatied 表示这个service可以横向扩展。
// 在swarm集群中拓展出5个
docker service scale busybox_demo=5
5.在Manager节点中查看Service和分布情况
docker service ps busybox_demo
在其他节点服务器中执行docker ps会发现各个节点上都存在容器了。
6.在Node3节点中强制删除一个容器
- 在Node3节点中删除容器
- 去Manager节点查看service信息,发现水平拓展的剩下了4个
- 很快,水平拓展又变回了5个
- 说明,当Swarm集群中有容器退出或失效了,Manager会在集群中选取一个节点,重新启动一个容器进行修补。
7.在Manager节点中删除Service
docker service rm [service名字]
删除Service后,Manager节点会自动寻找在那些节点上有这个Service的容器,然后会去自动删除。
五、在Swarm集群中部署wordpress
1.在Manager节点创建overlay network
docker network create -d overlay wordpress_network
创建好后可执行 docker network ls 查看所有的network,会发现这个创建的wordpress_network只在Manager节点存在。
2.在Manager节点使用Service部署Mysql
注意下命令中的参数:
- –env MYSQL_DATABASE 创建数据库
- –network 指定数据库
- –mount 即docker run中的-v参数,指定volume
docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network wordpress_network --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql:latest
- 启动的时候遇到一个问题,部署的时候一直在卡着不动。
- ctrl+c停止,使用 docker service ps mysql --no-trunc 命令查看了一下service的详细信息,发现报错了,所以才一直卡住。
- 报错信息是:error creating external connectivity network: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:…RETURN: iptables: Index of insertion too big. 这里没整明白,直接使用 systemctl restart docker 命令重启docker,之后再部署,就成功了。
3.查看Mysql运行在哪一个节点
docker service ps mysql
4.在Manager节点使用Service部署Wordpress