Linux企业运维——Docker(十)三剑客之Docker Swarm
文章目录
- Linux企业运维——Docker(十)三剑客之Docker Swarm
- 一、Docker Swarm简介
- 二、Docker Swarm部署实践
- 三、监控Swarm集群
- 四、编写脚本创建集群
- 五、Swarm图形化管理界面
一、Docker Swarm简介
- Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
- Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
- Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
- Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
Docker三剑客Docker machine、Docker compose、Docker Swarm中,只有Docker Swarm不需要额外安装,它是Docker中一个内嵌的子命令模块,相较于k8s更加轻量级,但应用于生产环境还存在一些问题。
Docker Swarm 优点:
- 任何规模都有高性能表现
- 灵活的容器调度
- 服务的持续可用性
- 和 Docker API 及整合支持的兼容性
- Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。
Docker Swarm 相关概念:
- 节点分为管理 (manager) 节点和工作 (worker) 节点
- 任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
- 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
二、Docker Swarm部署实践
实验环境:
这里需要开启四台虚拟机,server1中部署了Habbor仓库,server2初始化一个swarm集群部署swarm管理节点,在server3、4部署swarm工作节点
(1)由于server4是新创建的一台虚拟机,我们要将其部署为swarm集群中的一个节点,所以需要将server2上的docker源指向文件复制给server4,为server4配置docker源,安装启动docker,设置其为开机自启动
(2)server1中部署了Habbor仓库,server2、3、4在做swarm集群部署时,从server1中拉取镜像,为了后续配置,这里为server1和server4做免密传输(server2、3之前做过)
(3)在server2初始化一个swarm集群,部署swarm管理节点
(4)在server3、4部署swarm工作节点,此时在server2可以看到swarm集群的所有节点
(5)停掉compose/目录下的docker服务,在habbor/目录下开启docker服务并打入后台运行
(6)将server2之前部署过的docker镜像仓库指向文件复制给server3、4,重载server3、4的docker服务
(7)由于habbor仓库做了认证,所以我们需要把server1中的认证证书复制给server2、3、4,server2、3、4才能从仓库中拉取镜像
(8)为server2、3、4配置server1中habbor仓库的域名地址解析
(9)在server1中上传myapp.tar,得到两个版本的myapp镜像,分别更改标签后上传到habbor仓库中
(10)在server2管理节点可以创建服务,使用–replicas指定创建三个副本(注意:一定要做端口映射,否则外网无法访问容器),此时查看服务可以看到三个swarm节点上各有一个副本服务(在生产环境中master尽量不要参与到负载均衡中,只负责调度)
(11)此时在server1上连续访问server2、3、4任一swarm节点,都可以看到三个副本容器自动进行了负载均衡
(12)这里还可以对服务副本数量进行扩充(规定扩至多少个),测试访问,可以看到6个副本容器自动进行了负载均衡
三、监控Swarm集群
(1)这里的监控服务需要由visualizer来提供,在server1中上传visualizer.tar,得到visualizer镜像,更改标签后上传到habbor仓库中
(2)创建监控,指定名字是viz,公开8080端口
(3)访问172.25.19.2:8080,页面显示6个web服务和一个我们刚才创建的监控viz
(4)将服务副本数量扩充到10个,再次访问,可以看到10个web服务和1个监控
(5)把原来的v1镜像更新为v2镜像
–update-parallelism:表示一次更新几个节点,这里指定一次更新5个
–update-delay:表示每几秒更新一次,这里指定每隔10秒更新一次
可以看到有5个节点已经ready
在web页面也可以看到
(6)如果版本更新后需要回滚,可以使用如图命令,默认一次回滚一个节点
只剩一个节点没有回滚到v1版本了
四、编写脚本创建集群
通过上面命令行的方式一步一步创建集群效率比较低,我们可以通过编写脚本来快速创建集群
(1)先删除之前的实验环境,在server2的家目录编写docker-compose.yml
(2)编写好docker-compose.yml文件后,在当前目录下部署集群,名为mycluster,查看该集群,可以看到我们在yml配置文件中配置的6个副本
(3)测试访问
(4)修改脚本,扩充到60个副本,每次更新值为20
[root@server2 ~]# cat docker-compose.yml
version: "3.8"
services:
web:
image: myapp:v1
ports:
- "80:80"
networks:
- webnet
deploy:
replicas: 60
update_config:
parallelism: 20
delay: 5s
restart_policy:
condition: on-failure
visualizer:
image: visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
webnet:
(5)测试访问
(6)修改脚本,将v1版本更新为v2
(7)测试访问,可以看到一部分已经更新到了v2版本
(8)swarm集群在创建成功时会自动添加虚拟网卡
五、Swarm图形化管理界面
将需要的安装包发送给server1
导入镜像文件
可以通过图形化界面创建项目
修改标签,上传到我们刚才创建的portainer项目中
在图形化界面可以看到我们上传成功
将server1中的portainer-agent-stack.yml传送给server2
server2执行portainer-agent-stack.yml文件部署服务
可以看到portainer项目内目前有两个服务,开放9000端口
测试访问,首次进入需要创建用户
可以通过scale按钮直接进行扩容操作,现在是60个服务
我们将其修改为6个,可以看到图形界面做出响应
在配置管理菜单栏,将仓库公开
添加仓库信息
添加2048游戏服务,将容器80端口映射到主机8000端口
访问8000端口,可以看到该服务已经启动