- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
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 的组合拳基本简单介绍完了,更多命令和细节自己去摸索吧~ 。
最后此篇关于DockerSwarm+Harbor+Portainer打造高可用,高伸缩,集群自动化部署,更新。的文章就讲到这里了,如果你想了解更多关于DockerSwarm+Harbor+Portainer打造高可用,高伸缩,集群自动化部署,更新。的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
背景 我有一个 Azure Runbook(名为 RunStoredProcedure2),定义如下: param( [parameter(Mandatory=$True)] [string] $Sq
我有一个名为“团队”的表,其中包含“非事件”列,另一个表“事件”,其中包含“时间”列。如果任何团队的“事件”中的最新日期发生在 X 时间之前,如何将“非事件”列更新(为 true)? 我知道这可以通过
下面的问题可能有点令人困惑,但我会尽力以最好的方式解释它。 假设我们为一家制造公司工作。它制造然后用于制造产品的组件。在以下示例中,有 3 个组件和 2 个最终产品。 组件和产品的需求如下: comp
我有代码可以让我在一个范围内选择一个项目: COleVariant vItems = cstrAddr; hr = AutoWrap(
我正在开发一个应用程序,该应用程序有 4 种语言的大约 50 个应用内购买,这给了我很多表单和子表单、框和子框,需要使用 iTunesConnect 的令人痛苦且设计糟糕的表单来填充。 我想知道是否有
我想在 Azure 自动化中使用 powershell 脚本来安排打开/关闭资源。 我想在不创建帐户的情况下执行此操作,因为我们的域强制重置密码。我知道自动化帐户会创建一个证书 - 当使用资源管理器(
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
我正在自动化 Outlook,并且需要控制电子邮件的发件人身份。用户将在 Outlook 中设置两个或多个帐户,我需要能够选择从哪个帐户发送电子邮件。有什么想法吗? 需要 Outlook 2003 及
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
假设我有一个网站,我可以(随时)登录并每隔 x 小时提交数据(单击登录后可见的链接),我将如何自动化此过程? 我构建了一个图形用户界面,它为用户(现在是我,为了我自己的方便)提供了一个包含一些信息的界
我正在开发一个程序,它的任务是我们为它定义一些号码(我们的一些手机号码)并且它应该在 Telegram 中注册它们,然后获取发送到该号码的所有消息。如您所知,在 Telegram 中注册需要提供电话号
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
最近我在处理 CSS Sprite 。一切正常。 我创建了一个 sprite、.css 文件和 html 结构。看起来像 .sprites{ background-image:url
我想为一款名为 Dune 2000 的策略游戏创建一个叠加层。令人讨厌的是,要创建 10 个士兵,每次完成一个都必须单击该图标。没有队列。因此,在不干扰游戏运行方式的情况下,我想听听鼠标移动的声音,当
我是 python 的初学者,我想从自动化开始。以下是我正在尝试执行的任务。 ssh -p 2024 root@10.54.3.32 root@10.54.3.32's password: 我尝试通过
当我将一些 urlencoded Javascript 粘贴到 Firefox 和 Chrome 上的 URL 时,我看到了一些奇怪的事情发生。是否可以使用此技术告诉 Chrome 访问 URL,然后
我需要将大量请求自动提交到基于云的数据库接口(interface) (Intelex)。没有任何方法可以批量提交某些操作,但是提交单个请求所必需的只是让经过身份验证的用户尝试打开 Web 链接。因此,
假设我有一个进程的内存转储。我想对其运行报告,所以基本上我想打开 WinDBG,加载 SOS 并运行一个脚本,该脚本运行一些命令,解析输出,然后基于此运行更多命令。 除了像 SendKeys 这样的
我正在使用 ffmpeg 创建视频剪辑。我想自动化该过程并保存剪辑,而无需手动为要保存的每个文件命名。这是我拥有的代码。它将创建并保存剪辑,但只能使用扩展名和不是名字。 @echo off cd /d
我是一名优秀的程序员,十分优秀!