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 是 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 //更新服务配置

Portainer管理

手动管理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实现高可用性机制来确保集群的稳定性和可靠性。

  • Manager 节点高可用:Docker Swarm 集群中有一个或多个 Swarm Manager 节点,它们协调集群中的容器调度和管理。
  • 节点监测:Swarm Manager 定期监测集群中的节点状态。
  • 服务冗余和复制:Docker Swarm 通过创建服务副本来提供容器的冗余和高可用性。可以指定服务的副本数量,并将它们分布在集群的不同节点上。如果某个节点失效,Swarm Manager 会自动将该节点上的任务重新分配到其他可用节点上的副本。
  • 负载均衡:Docker Swarm 集群可以通过内置的负载均衡机制来分发流量到运行在不同节点上的容器副本。这样,即使某个节点失效,负载均衡机制仍然可以将流量转发到其他节点上的容器副本,确保应用程序的连续可用性。
  • 故障恢复:如果一个节点失效并重新加入集群,Swarm Manager 会自动将该节点重新纳入集群,并分配之前节点上的任务。这种故障恢复机制确保了集群的稳定性和容错性。

高伸缩

系统的伸缩性是指系统性能扩大或扩小的容易程度,一个高伸缩的系统可以轻易的扩展或减少集群性能。

  1. Docker Swarm支持使用更新命令设置服务的副本数量来扩展副本,需要注意是当副本的数量>集群节点的数量的时候,再增加副本数对服务的性能提升意义,应该增加集群节点。
  2. Docker Swarm支持自动扩展副本数,可以设置基于CPU,内存等指标数的阈值来设置规则自动增加副本数。
  3. 当增加副本数无法有效扩展性能时,可以通过命令增加集群节点,让更多的机器加入集群以增加集群算力提高性能。

Docker Swarm + Harbor + Portainer 的组合拳基本简单介绍完了,更多命令和细节自己去摸索吧~

Docker Swarm + Harbor + Portainer 打造高可用,高伸缩,集群自动化部署,更新。的更多相关文章

  1. RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

    本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...

  2. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  3. K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  4. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  5. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  6. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

  7. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  8. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  9. 高可用的MongoDB集群

    1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON形式的数据. l ...

  10. Keepalived+Nginx实现高可用负载均衡集群

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...

随机推荐

  1. 逍遥自在学C语言 | 枚举的那些事儿

    前言 在C语言中,枚举是一种方便组织和表示一组相关常量的工具.枚举类型有助于提高代码的可读性和可维护性.本文将介绍C语言枚举的基本概念.语法和用法,以及一些高级技巧. 一.人物简介 第一位闪亮登场,有 ...

  2. sql server注入rce实践

    背景:在漏洞挖掘中,合理的利用sql注入,可以把注入转换成rce,使一个高危漏洞变成严重漏洞.在红蓝对抗中,利用注入rce,实现内网横向移动.笔者基于漏洞挖掘和红蓝对抗上遇到的sql server注入 ...

  3. 我在使用Winform7.0开发海康相机应用的时候系统悄无声息的退出

    一.简介 1.说明一下 最近,我在开发一个玻璃幕墙检测的项目,这个项目需要使用到海康的相机系统.业务是这样的,相机按着指定的坐标,扫描玻璃幕墙的每块玻璃,通过算法查看是否有损坏的,如果有就发出报警信息 ...

  4. 聊聊Excel解析:如何处理百万行EXCEL文件

    一.引言 Excel表格在后台管理系统中使用非常广泛,多用来进行批量配置.数据导出工作.在日常开发中,我们也免不了进行Excel数据处理. 那么,如何恰当地处理数据量庞大的Excel文件,避免内存溢出 ...

  5. EtherCAT 转CCLINK网关连接三菱plc应用案例

    EtherCAT 现场总线协议是由德国倍福公司在 2003 年提出的,该通讯协议拓扑结构十分灵活,数据传输速度快,同步特性好,可以形成各种网络拓扑结构. 捷米特JM-ECT-CCLK  是自主研发的一 ...

  6. Diffusers 一岁啦 !

    十分高兴 Diffusers 迎来它的一岁生日!这是令人激动的一年,感谢社区和开源贡献者,我们对我们的工作感到十分骄傲和自豪.去年,文本到图像的模型,如 DALL-E 2, Imagen, 和 Sta ...

  7. 二代水务系统架构设计分享——DDD+个性化

    系统要求 C/S架构的单体桌面应用,可以满足客户个性化需求,易于升级和维护.相比于一代Winform,界面要求美观,控件丰富可定制. 解决方案 依托.Net6开发平台,采用模块化思想设计(即分而治之的 ...

  8. c++算法之离散化

    什么是离散化? 离散化,故离散数学,其中的"离散"就是不连续的意思.离散化可以保持原数值之间相对大小关系不变的情况下将其映射成正整数. 也就是给可能用到的数值按大小关系分配一个编号 ...

  9. [Lua][Love Engine] 打砖块游戏实现过程与知识点

    本文旨在根据LOVE2D官方文档和教程实现打砖块的游戏,记录部分实现过程和重要知识点 目标摧毁所有砖块 玩家控制球拍左右滑动反弹小球 小球摧毁砖块 小球保持在屏幕内 小球碰到屏幕底部,GAME OVE ...

  10. MySQL 1130错误原因及解决方案

    错误:ERROR 1130: Host 'http://xxx.xxx.xxx.xxx' is not allowed to connect to thisMySQL serve 错误1130:主机x ...