从运行架构层面了解jenkins的扩展策略和内部调度策略

说明

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
无论我们是出于什么原因使用jenkins,如果不了解它的运行架构,那么想在jenkins的基础上做一些复杂的工作会十分困难。

运行架构介绍

jenkins的运行架构在我看来分成4种,或者说我接触过的有以下四种。

1.单机策略

在这种模式下,只有一个 Jenkins 服务器负责所有的构建任务并使用 TCP 连接部署到远程服务器上。
这是最简单的一种方式,我们完全不需要担心其他可变因素。
在这里插入图片描述

2.主从策略

采用单机模式运行 Jenkins 有一些弊端。

尽管单机模式无需考虑多服务器和节点,但当大量的构建任务在同一时间运行时,服务器可能会负荷过重。这时我们可能会考虑增加节点可并发执行的构建任务数量,但是很快就会遇到性能瓶颈。

为了解决这个问题,我们可以将部分任务分发到其他的机器上去,即 Jenkins 从节点。Jenkins 从节点会运行一段程序与主节点进行通信,判断是够有可执行的构建任务。一旦 Jenkins 主节点调度安排好构建任务,就将其分发至相应的从节点。
在这里插入图片描述

3.扩展docker策略

我们进一步来探索 Jenkins 的运行方式。当你的团队中还未建立 CI 时,你可能无需多台静态服务器来执行 Jenkins 任务。
当你无需 7*24 运行时,你的服务器可能会空闲,这时就产生资源浪费了。

但如果你正在使用容器技术如 docker,你可以让 Jenkins 的运行架构变得高级起来。简单的说,就是让主节点处理调度构建任务,把任务分发任务到从节点进行执行,但是你并不需要事先就生成相应的从节点——当从节点需要使用时,会立刻应运而生。

在这里插入图片描述
这种运行架构可以解决下面的问题:

  • Jenkins 服务器性能得到优化
    当你将 Jenkins 运行在 docker上时,Jenkins 可以根据集群资源使用情况调节并启动。因为很多应用都共享一个宿主机,这样就能有效的节约资源——这种情况下 Jenkins 并不会运行在一个资源使用顶峰时候。
  • 并行运行构建任务
    你无需再仔细考虑同一时间并发执行的任务数目,Jenkins 会准备好一个从节点以便于运行相关的任务。
  • 自我修复
    如果你的构建任务或者从节点突然遇到问题了,这个时候你完全不用担心,Jenkins 会自动移除有问题的从节点并启动一个新的从节点。
    这样会节省大量的故障排查时间,因为每个从节点不是必须存在的,如果某个从节点遇到障碍,Jenkins 会请求 Kubernetes 移除它并启动一个全新的从节点。就是这么简单。

4.扩展k8s策略

如果你正在使用容器技术如 Kubernetes,你可以让 Jenkins 的运行架构变得更加高级。简单的说,就是让主节点处理调度构建任务,把任务分发任务到从节点进行执行,但是你并不需要事先就生成相应的从节点——当从节点需要使用时,会立刻应运而生。
在这里插入图片描述
这种运行架构可以解决下面的问题:

  • Jenkins 服务器性能不再是问题
    当你将 Jenkins 运行在 Kubernetes 集群中时,Jenkins 可以根据集群资源使用情况调节并启动。因为很多应用都共享一个集群,这样就能有效的节约资源——这种情况下 Jenkins 并不会运行在一个资源使用顶峰时候。
    如果你将集群部署在云端,如 Google Cloud Platform,Jenkins 的运行将会变得更加轻松灵活。GKE 不仅仅可以根据容器的情况自我调节,还可以根据集群的负载情况添加或移除节点,如此一来就有了无限扩展的能力。
  • 并行运行构建任务
    你无需再仔细考虑同一时间并发执行的任务数目,Jenkins 会准备好一个从节点以便于运行相关的任务。
  • 负载均衡
    Kubernetes 可以很好的实现负载均衡,它会让 Jenkins 从节点运行在最适合的服务器上,正因如此,构建任务的运行会更快且更有效率。
  • 自我修复
    如果你的构建任务或者从节点突然遇到问题了,这个时候你完全不用担心,Jenkins 会自动移除有问题的从节点并启动一个新的从节点。
    这样会节省大量的故障排查时间,因为每个从节点不是必须存在的,如果某个从节点遇到障碍,Jenkins 会请求 Kubernetes 移除它并启动一个全新的从节点。就是这么简单。

调度策略分析

基于以上四种运行架构,jenkins内部会有不同的调度策略,但细分起来是大同小异的,我的具体分析如下:

  1. 无论是哪种策略,一个job每运行一次都只对应一个workspace。
  2. 主从策略,如果不指定,那每次会自动选择一个空闲的执行机
  3. 各节点是否空闲、是否可用 可以在配置里头配置
  4. 扩展docker,是把任务调度权利给了一个或者说是一组docker宿主机。如果是一组宿主机,那么具体分配给哪个宿主机,可以参照主从策略;分配好宿主机后jenkins的工作就完成了,调度的任务就给了宿主机,这个具体怎么实现,这里就不再赘述了。
  5. 扩展k8s,是把任务调度权利给了一个或者说是一组k8s集群。他的调度策略与扩展k8s很像,但不同的是,k8s集群的功能远远比一个宿主机强大。
  6. 如果是复杂的情况需要多台机器调度,可以通过设置label来实现。
  7. 云节点(docker或者k8s)的workspace在运行完一次后会被销毁,所以如果结果有用,务必生成相关的制品保存下来。

转载/参考内容

英文原文链接:https://medium.com/better-programming/how-we-scaled-jenkins-in-less-than-a-day-ccbcada8e4a4
中文社区链接:https://jenkins-zh.cn/wechat/articles/2020/04/2020-04-22-scale-your-jenkins-agents-using-kubernetes/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值