欢迎来到阿里云授权服务中心典名科技有限公司!咨询电话:023-66887777 18623333330

微信
手机版
网站地图

docker集群化自建方案有哪些?

2021-09-28 10:45:58 投稿人 : admin 围观 : 242 次 0 评论

  俗话说鸡蛋不要都放在一个篮子里面,把各种集群的节点拆分部署,应该把各种节点分机器部署,多个宿主机这样部署。在自建集群之前,由于不同应用的依赖环境千差万别,每添加一个应用,不得不考虑主机上的现有环境和已经在跑的服务,而且部署和测试也是比较繁琐,没有办法满足我快速尝试新点子的需求。而 Docker 恰好可以解决应用部署的环境问题,自建 Docker 集群可以充分利用我手上的闲置 VPS,并且提高应用的可用性。下面就由和大家聊一聊docker集群化自建方案。


  一、硬件资源

  自建集群有 8 台 VPS,其中 4 台性能比较好的 Vultr 中低配小鸡,一台腾讯云低配 VPS,一台搬瓦工 CN2 小鸡,一台 CloudCone 低配小鸡,还有一台朋友送的 VirMach 小鸡。

  手上还有几台谷歌云服务器,不过考虑到用不长久,而且流量贵,就没在自建集群的考虑范围内。

  [root@ctrl-bwh-01 scripts]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION q0kllzk1ezr9h449cjatak17z GLBS-CC-01 Ready Active 18.09.5 ioacz1khl94m01wul1z70qatu * ctrl-bwh-01 Ready Active Reachable 18.09.5 1sj867qzlrgdp72705pcnvleb db-vultr-01 Ready Active 18.09.5 dua8lh9h6yt5b58jwwn5vtlu6 db-vultr-02 Ready Active 18.09.5 rk4newk0r7z51lvgjil564bar web-qq-01 Ready Active 18.09.5 xaq6d5n4kzcxj7phnvc32xw21 web-virmach-01 Ready Active 18.09.5 1e2a4scv0eskgq0og3xqpedco web-vultr-01 Ready Active Reachable 18.09.5 5jw8pe7vkzr2iwo3m1rrr1ef5 web-vultr-02 Ready Active Leader 18.09.5

  二、集群方案

  说到 Docker 集群,一般都会提到鼎鼎有名的 k8s。而我觉得 k8s 太重了,我的众多低配 VPS 跑 k8s 之后,能分配给应用的资源就少得可怜,所以 k8s 是直接就被我 pass 掉的。

  虽然也有 k3s 之类的轻量级 k8s 解决方案,不过我还是选择了原生的 docker swarm。VPS 安装好 Docker 之后,不需要额外安装软件,就可以马上建立集群。

  # 集群初始化,节点成为 manager 节点 docker swarm init --advertise-addr=x.x.x.x # 集群丢失 Leader 时,强制重建集群 docker swarm init --advertise-addr=x.x.x.x --force-new-cluster # 获取作为 worker 节点加入集群的命令 docker swarm join-token worker # 获取作为 manager 节点加入集群的命令 docker swarm join-token manager # 加入集群 docker swarm join --token xxx x.x.x.x:xxx --advertise-addr=x.x.x.x

  官方文档中有提到,Docker 会自动设置--advertise-addr,该参数非必填。不过根据个人经验来看,还是强烈建议显式指定该参数,尤其当 VPS 有多个网卡时。

未标题-1.jpg


  三、统一的服务入口

  在集群内部通过docker service create xxx的命令创建服务之后,如果有设置对外暴露端口,那么可以向集群中任意一台 VPS 的指定端口请求服务。

  手上的应用还是 Web 应用居多,而它们都需要 80 或 443 端口,为了让它们都能正常提供服务,集群需要一个统一的前端应用提供负载均衡服务,根据一定的规则(比如域名)转发给后端应用。

  虽然 nginx 也可以比较方便地实现负载均衡,但是我此处选用的是相对专业的、功能更完善的 traefik。traefik 提供服务自动发现、HTTPS 证书自动生成、服务监测指标数据 等功能,感兴趣的同学可以前往官网了解详情。

  Traefik 还提供了简易的 Web UI,可以看到当前集群的服务数量和服务状态。


  四、集群管理面板

  虽然可以登录到 manager 节点,敲命令行管理集群节点、服务,但还是稍麻烦些,而且不太希望所有维护人员都有权限直接操作机器。

  可以管理 Docker Swarm 集群管理面板也不少,能入法眼的就 Rancher 和 Portainer,然而由于 Rancher 对宿主机配置要求比较高,消耗资源较多,我最终选择了轻量级的 Portainer。

  Portainer 官网提供了比较多的管理方式,踩了比较多的坑之后,我采用的是 agent + portainer 这种方式。以 global 模式在每个节点部署 agent 服务,portainer 部署时需要指定连接 agent 服务。欲知详情,请看官方文档。

  Portainer 还提供了服务更新的 WebHook,我现在的博客和部分站点的代码仓库更新后,通过在 GitLab 设置的 CI-CD 配置,自动打包镜像,然后触发 WebHook 自动更新,省时省力。

  当然,Portainer 也是有不完善的地方,比如查看集群服务时,会偶尔出现「无法连接」的报错,而且不能连接数据库,所以部署 Portainer 服务时,要限制它固定在某台宿主机上。不然,会出现频繁设置密码等现象。

  五、监控和告警系统

  traefik 提供的管理面板是非常简单的,仅能查看一些基础数据,比如某个服务有多少后端,整体的服务状态。为了能够定制化监控集群中的服务,并且在需要的时候触发告警,让物理人介入进行维护,需要一个监控和告警系统。

  而 Grafana 恰好可以满足需求,配合 Prometheus 以及 Prometheus 相关的 Exporter,一个五脏俱全的监控告警系统呼之欲出。

  因为腾讯云主机的带宽极小、性能又比较一般,提供对外服务不太合适,为了充分利用资源,我便把监控和告警系统相关的大多服务都部署在上面。本来还想搞一个 ES 在腾讯上,无奈配置太低,只好作罢。

  有了监控面板,可以清楚地知道具体服务的服务状态和服务数据规律,下图中的柱状图表示了以 5 分钟为统计周期的「每秒处理请求数」。注:该面板的标题Total requests over容易产生误解。

  下图是站点升级结束时,Redis 的服务数据。一般情况下,Clients 会在 10 以下,当 Clients 飙升到 50 以上,就要额外关注站点的服务状态。通过合理设置阈值,可以让 Grafana 在超过阈值时发送告警通知,提醒维护人员对服务进行扩容等操作。

  原有服务都是单机部署,需要改造并打包 Docker 镜像。改造难点其实在于持久化数据的存储与读写,比如 Web 应用的 Session 存储、图片存储、附件存储等。

版权声明:本站部分文章内容、图片来源于网友推荐、互联网收集整理而来,仅供大家学习参考,不代表本站立场,如有侵权,请联系站长,我们会第一时间处理!本站原创内容未经允许不得转载,或转载时需注明出处:典名科技资讯门户

相关文章

  • 如何查看linux的8080端口是否被占用
    如何查看linux的8080端口是否被占用

    在linux中,可以利用netstat命令查看8080端口是否被占用,该命令用于显示网络的状态,语法为“netstat -tln | grep 8080”;若返回的结果为空,表示8080端口没有被占用,若返回的结果不为空,表示该端口被占用。...

    2022-05-18 11:11:46
  • linux如何查看有多少个文件
    linux如何查看有多少个文件

    这篇文章主要介绍了linux如何查看有多少个文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何查看有多少个文件文章都会有所收获,下面我们一起来看看吧。在linux中,可用ls命令查看有多少个文件,...

    2022-05-18 11:11:45
  • linux中vim如何不显示行号
    linux中vim如何不显示行号

    这篇文章主要介绍了linux中vim如何不显示行号的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux中vim如何不显示行号文章都会有所收获,下面我们一起来看看吧。在linux中,vim可用“:set no...

    2022-05-18 11:11:45
  • linux如何查看有几个用户登录
    linux如何查看有几个用户登录

    本文小编为大家详细介绍“linux如何查看有几个用户登录”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux如何查看有几个用户登录”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。查看方法:1、利用w命令,该命...

    2022-05-18 11:11:44
  • linux中sudo和su有哪些区别
    linux中sudo和su有哪些区别

    本篇内容介绍了“linux中sudo和su有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区别:1、sudo是以root用户方式执行...

    2022-05-18 11:11:44
  • linux中当前目录如何表示
    linux中当前目录如何表示

    这篇文章主要介绍“linux中当前目录如何表示”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux中当前目录如何表示”文章能帮助大家解决问题。在linux中,当前目录使用小数点“.”来表示;li...

    2022-05-18 11:11:44
  • linux中rm删除不释放空间怎么解决
    linux中rm删除不释放空间怎么解决

    这篇文章主要介绍“linux中rm删除不释放空间怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux中rm删除不释放空间怎么解决”文章能帮助大家解决问题。解决方法:1、利用“lsof |...

    2022-05-18 11:11:43
  • uclinux和linux的区别有哪些
    uclinux和linux的区别有哪些

    这篇文章主要讲解了“uclinux和linux的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“uclinux和linux的区别有哪些”吧!区别:1、uclinux采用存储器的分页管...

    2022-05-18 11:11:43
  • 高防御服务器租用需要注意什么?攻击类型有哪些?
    高防御服务器租用需要注意什么?攻击类型有哪些?

      许多企业在选择服务器的时候,会优先选择高防御的服务器,这种服务器防御能力强,可以保护企业的数据安全。那么高防御服务器租用需要注意什么?攻击类型有哪些?一起听听的回答吧!   一、什么是高防服务器?   高防服务器主要是指独立单个硬防防御...

    2022-05-17 09:40:01
  • 虚拟服务器是什么 虚拟服务器租用价格是多少
    虚拟服务器是什么 虚拟服务器租用价格是多少

      现在很多人都在使用虚拟服务器,相比与实体服务器来说,虚拟服务器的使用费用更低廉。接下来就和大家一起来了解虚拟服务器是什么,虚拟服务器租用价格是多少。  虚拟服务器是什么   虚拟服务器可以说是一种使用于互联网的技术,这种技术是非常的节约...

    2022-05-17 09:40:01
发表评论