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. vs2022的一些调试技巧——远程调试&线程检查&性能检查

    visual studio一直都是.net/c#开发人员最受欢迎的编译器,除了强大的代码提示和项目模板,还拥有大量的调试工具,这一期我们介绍下code freeze阶段的一些调试技巧.包括测试环境/生 ...

  2. 19.详解AQS家族的成员:CountDownLatch

    关注王有志,一个分享硬核Java技术的互金摸鱼侠 欢迎你加入Java人的提桶跑路群:共同富裕的Java人 今天我们来聊一聊AQS家族中的另一个重要成员CountDownLatch.关于CountDow ...

  3. 论文翻译:2021_Real-Time Denoising and Dereverberation wtih Tiny Recurrent U-Net

    论文地址:微型循环U-Net实时降噪和去混响 论文代码: https://github.com/YangangCao/TRUNet https://github.com/amirpashamobini ...

  4. iOS select标签适配去掉iOS默认select样式

    iOS端对select标签有独特的适配,如何取消这些默认样式呢 css样式表 加上 1 select { 2 -webkit-appearance: none; 3 } 博客同步更新:地址

  5. 使用Ajax进行数据请求

    ​ 一.Ajax开源库有很多选择,大家可以根据需求自己选择 jQuery:jQuery是一个广泛应用的JavaScript库,它提供了简洁而强大的API来处理Ajax请求.通过$.ajax()方法或其 ...

  6. Linux相关概念及操作

    目录 linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录. 1./bin 是Binary的缩写,这个目录存放着最经常使 ...

  7. 【Kubernetes】kubectl常用命令手册 -- 持续更新

    元信息 api列表: kubectl api-resources kubectl api-resources -o wide 用法查询: kubectl explain <>.<&g ...

  8. ISP-AF相关-聚焦区域选择-清晰度评价

    1.镜头相关 镜头类型 变焦类型: 定焦.手动变焦.自动变焦 光圈: 固定光圈.手动光圈.自动光圈 视场角: 鱼眼镜头.超广角镜头.广角镜头.标准镜头.长焦镜头.超长焦镜头(由大至小) 光圈: 超星光 ...

  9. influxdb 保留策略

    转载请注明出处: InfluxDB 中的保留策略用于定义时间序列数据在数据库中的保留期限.保留策略决定了数据在 InfluxDB 中的存储持续时间和精度.以下是 InfluxDB 的保留策略类型以及如 ...

  10. TrustZone——(一)

    本文内容主要来源于网络,综合了网上的多篇文章,也加入了一些自己的理解,重新组织了文章结构使其便于理解. 主要参考的文章包括: 一篇了解TrustZone TrustZone领域先行者 TrustZon ...