Docker Swarm是Docker官方自带的容器编排工具,Swarm,Compose,Machine合称Docker三剑客。Docker Swarm对于中小型应用来说,还是比较方便,灵活,当然K8S对于大型项目在各方面有着明显的优势。技术选型需要针对公司实际情况选择,架构往往是一步一步随着业务变化升级演变而来,本文主要讲解Docker Swarm + Harbor + Portainer 一套组合拳打法。
安装Docker:Docker 安装,常用命令 - Net码畜 - 博客园 (cnblogs.com)
安装Harbor:harbor 搭建和部署 - Net码畜 - 博客园 (cnblogs.com)
安装Portainer:portainer安装,配置,使用 - Net码畜 - 博客园 (cnblogs.com)
Docker Swarm 是 Docker 的集群管理工具,Swarm集群的节点分两种:管理节点(manager node),工作节点(work node),两者的主要区别是对集群进行管理需要在管理节点上进行操作,包括集群创建,配置,服务创建,配置等有关工作。除此之后两者没有区别,管理节点和工作节点一样会运行contarner。
首先我们准备一台虚拟主机安装docker,然后初始化集群:
docker swarm init
此时当前虚拟机就成功被始化为集群管理节点,我们通过以下命令获取加入集群的代码,这命令仅能在管理节点上使用:
docker swarm join-token worker
命令执行完后,我们将得到类似:docker swarm join --token SWMTKN-1-4omm72rws6flf5icom3w1clqvjtkmwdki8m4hhtxobq3hzwsqe-7vjw75ebdue32yevwirggpk4l 192.168.3.70:2377 的结果,将command复制到其它虚拟机(己安装docker)执行,该虚拟机将以工作节点(worker)的身份加入集群。重复执行再添加三个工作节点,便可以得到上述截图四台虚拟机组成的docker swarm 集群。
至此docker swarm集群搭建就完成了,是不是非常简单方便。所以说针对中小型应用,docker swarm有着非常小的学习,管理的成本,很合适。下面贴出常用的docker swarm 集群管理命令:
docker swarm init //docker swarm init
docker swarm join-token worker //查看加入woker的命令。
docker swarm join-token manager //查看加入manager的命令
docker swarm join //加入集群
docker swarm leave //退出集群
docker node ls //查看集群节点
docker node rm //删除某个节点(-f强制删除)
docker node inspect //查看节点详情
docker node demote //节点降级
docker node promote //节点升级
docker node update //更新节点
创建集群之后便是创建服务,也就是一个集群可以包括多个服务,也就意味上可以在一个集群上部署多个项目,创建服务的时候我们就不需要再对节点进行管理,节点的管理归属集群管理。也就是说创建服务是基于当前集群的节点进行部署,当你需要扩展节点的时候,需要先将节点加入集群,然后再更新服务配置。
docker service create --name testweb --replicas 4 -p 80:80 webapplication2:latest
上面命令是创建一个名称为:testweb的服务。replicas(副本数)为:4,我们集群节点也刚好4个,就是说每一个节点都会有一个副本,假如replicas为2,那么我们的集群将有两个节点部署副本,剩余两个节点闲置,当然我们也可以通过更新命令重置replicas数量。端口映射为80:80,镜像及版本是webapplication2:latest。
至此服务也正式启动了,无论我们从四个节点那个IP进行访问,都是可以成功访问到网站。
下面是管理服务常用的命令:
docker service create //创建服务
docker service ls //查看所有服务
docker service inspect //查看详情
docker service logs //查看服务日志
docker service rm //删除服务
docker service scale //设置服务副本数量
docker service update //更新服务配置
手动管理docker swarm集群是有点繁琐,以服务创建和更新镜像为例,你需要事先在每个节点上面拉取最新的镜像,docker swarm在创建服务或更新服务的时候不会主动从仓库中拉取或更新镜像,如果节点或服务多的时候就蛋痛了。一个良好的管理工具就事半功倍来解放你的双手提高工作效率了。安装好Portainer 之后我们配置接入管理docker swarm:
API 连接方式,需要配置远程dcoker节点,dcoker管理节点编辑配置文件,配置完之后,重启一下docker。
vi /usr/lib/systemd/system/docker.service
管理节点重启之后,Portainer 就可以通过API连接并且进行管理,可以看到连接的管理节点。
Portainer连接上之后可以轻松管理docker swarm,具体的细节自己摸索一下之后基本就可以拿捏了。简单创建一个服务,填写下面红色框架必填值就可以快速默认值创建一个服务。
自行摸搜一下你会发现Portainer管理非常方便,无论是创建服务,更新镜像,Portainer会自动帮你拉取最新镜像然后更新,UI动动鼠标就可以管理docker swarm集群。
配合Harbor的Webhooks,我们可以实现推送镜像之后实现自动化部署。我们创建服务的时候将上图的绿色框开关打开就支持Webhooks通知docker swarm集群更新,当然这个是Portainer的功能而不是docker swarm自带的功能。
我们进入事先部署的harbor系统,进入项目管理配置webhooks,配置成功之后就可以实现自动化部署了。
OK,我们简单总结一下自动化部署流程,开发人员打包镜像送到至仓库,仓库配置"Artifact pushed"事件,在这个事件中配置Webhooks地址,然后harbor会自动触发提交这个地址通知至Portainer,Portainer开始执行更新集群镜像工作。docker swarm默认值在更新中会提断不间断服务,可以放心进行更新,也支持更新后回滚。
docker swarm实现高可用性机制来确保集群的稳定性和可靠性。
系统的伸缩性是指系统性能扩大或扩小的容易程度,一个高伸缩的系统可以轻易的扩展或减少集群性能。
Docker Swarm + Harbor + Portainer 的组合拳基本简单介绍完了,更多命令和细节自己去摸索吧~
手机扫一扫
移动阅读更方便
你可能感兴趣的文章