詹金斯如何在k8集群中实现动态代理

  

一、背景介绍

  

目前很多企业应用都已经容器化,版本发布比较多,构建的次数也比较多,相对于之前单台詹金斯有了很大的挑战
,传统的詹金斯奴隶一主多从方式会存在一些痛点:

  
      <李>主主发生单点故障时,整个流程都不可用了,李   <李>每个奴隶的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲;李   <李>资源分配不均衡,有的奴隶要运行出的工作现排队等待,而有的奴隶处于空闲状态,李   <李>最后资源有浪费,每台奴隶可能是实体机或者VM,当奴隶处于空闲状态时,也不会完全释放掉资源了。
    kubernetes集群之中,我们正是利用这一容器平台来实现詹金斯的自动扩容。   
  

詹金斯集群架构图

  

詹金斯如何在k8集群中实现动态代理”> </p>
  <p>从图上可以看到詹金斯大师和詹金斯奴隶以集装箱码头工人形式运行在Kubernetes集群的节点上,主运行在其中一个节点,并且将其配置数据存储到一个体积上去,奴隶运行在各个节点上,并且它不是一直处于运行状态,它会按照需求动态的创建并自动删除。</p>
  <p>这种方式的工作流程大致为:当詹金斯主接受到构建请求时,会根据配置的标签动态创建一个运行在容器中码头工人的詹金斯奴隶并注册到掌握上,当运行完工作后,这个奴隶会被注销并且集装箱码头工人也会自动删除,恢复到最初状态。</p>
  <p>这种方式带来的好处有很多:</p>
  <ul>
  <李> <>强服务高可用</>强,当詹金斯大师出现故障时,Kubernetes会自动创建一个新的詹金斯主容器,并且将体积分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。</李>
  <李> <>强动态伸缩</>强,合理使用资源,每次运行工作时,会自动创建一个詹金斯奴隶,工作完成后,奴隶自动注销并删除容器,资源自动释放,而且Kubernetes会根据每个资源的使用情况,动态分配奴隶到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待在该节点的情况。</李>
  <李> <>强扩展性好</>强,当Kubernetes集群的资源严重不足而导致工作排队等待时,可以很容易的添加一个Kubernetes节点到集群中,从而实现扩展。</李>
  </ul>
  <h2>二、部署詹金斯</h2>
  <p>我们把主节点部署到k8集群中,大家可以参照官方github文档进行配置,我这里进行了一点简化,我这里使用的是nfs来存储詹金斯的数据,用于进行持久存储。</p>
  <pre> <代码> kubectl应用- f https://raw.githubusercontent.com/wangzan18/jenkins-agent-k8s-cicd/master/master/jenkins.yaml </代码> </pre>
  <p>说明一下:这里服务我们暴漏了端口8080年和50000年,8080年为访问詹金斯服务器页面端口,50000年为创建的詹金斯奴隶与主建立连接进行通信的默认端口,如果不暴露的话,奴隶无法跟主建立连接。这里使用NodePort方式暴漏端口,并未指定其端口号,由Kubernetes系统默认分配,当然也可以指定不重复的端口号(范围在30000 ~ 32767年)。</p>
  <h3> 2.1,配置kubernetes插件</h3>
  <p>詹金斯的配置过程我这里不再掩饰,我们直接配置kubernetes插件。<br/>管理员账户登录詹金斯主人页面,点击”系统管理”→“管理插件”→“可选插件”→“Kubernetes插件”勾选安装即可。</p>
  <p> <img src=詹金斯如何在k8集群中实现动态代理