美文网首页
Jenkins-配置K8S负载

Jenkins-配置K8S负载

作者: 野生DBNull | 来源:发表于2021-08-19 13:56 被阅读0次

    1. 为什么?

    随着Jenkins被大量使用,单台打包机完全无法应对打包慢,线程不够等一系列问题
    这时候可以添加固定Node的方式去解决问题,但是慢慢你会发现固定Node也无法解决问题,如果并不是超级多的打包任务,或者根本没得使用K8S的这个条件请移步Jenkins配置从节点来解决单台打包机性能不够的问题
    其中最主要的矛盾如下
    1.不同的打包环境指定不同的打包机
    2.集中在一个时间段打包,特别是在发版本的前夕,所有项目组都在打包,显得特别无力
    3.大部分时间闲置的打包负载显得有点浪费
    这时候就急需一个可以动态缩放的Node来解决这个问题。
    将K8S作为Jenkins负载就是为了解决动态缩放,不同环境需要指定不同打包机的问题(Windows和Mac还是需要单独处理)。

    官网文档 在 Kubernetes 上扩展 Jenkins

    2. 配置K8S负载集群

    2.1 安装插件

    首先在Jenkins中搜索Kubernetes这个插件,安装上

    2.2 配置Kubernetes作为负载

    image.png
    image.png
    image.png

    配置K8S荷载

    image.png

    其中这个Kubernetes地址就是K8S-Api-Server的地址,可以在kube.config中找到


    image.png

    然后点击连接测试,出现如下就对了,但是讲道理会出现一个
    找不到/var/lib/jenkins/.kube/config.json的错误,出现这个错误就要将kubeConfig放到这个位置

    image.png

    (Tips:如果你是Rancher搭建的K8S集群就在这个位置找API-Server的地址和kubeConfig)


    image.png

    2.2 配置Pod模板

    这里是比较重要的,Pod模板是为了方便打包的,jnlp这个镜像是必须要的,没有这个镜像就无法连接上Jenkins,这个镜像是可以拓展的。
    不建议再这个镜像中安装Docker,安装Dotnet,安装Java,安装NodeJs,因为这些都可以用多容器和Jenkins插件来解决
    可以在这个镜像中安装例如解压缩这样的小工具。

    重写的配置如下


    image.png

    这种K8S中的Node有一个很大的缺陷就是缓存的问题,如Nuget缓存,这时候就需要挂载一个盘去进行缓存了,有条件的建议挂载一个PVC,但是像我这样没条件的HostPath也香。

    image.png

    2.3 配置多容器Pod用来支持不同的打包

    PS:这里用Dotnet打包为例子

    Dotnet打包需要用到的镜像是dotnetsdk,所以需要在jnlp的基础上再加上一个其他镜像,使用的时候就
    利用container这个指令去指定容器。后面的名称就是容器模板中定义的名称,需要唯一指定。

     container('dotnet5') {
           sh 'dotnet --info'
           // 执行你需要的操作
     }  
    
    image.png

    Dotnet打包要想快就要将Nuget的包全部缓存下来,所以需要将~/.nuget 这个文件夹里面的东西用PV缓存起来(鄙人没这个条件,用的HostPath)

    image.png

    2.3 在打包的时候选择调度到K8S的负载上

    使用 node这个命令去指定节点

    ('k8s-agent-dotnet') {
       echo "hello-world"
    }
    

    然后再NodeManager中查看就会看到出现了一个新的节点了,这个节点就是K8S中调度的,在打包完成后就会回收掉这个Pod。


    image.png

    到这里为Jenkins配置K8S的负载就全部完毕了。

    相关文章

      网友评论

          本文标题:Jenkins-配置K8S负载

          本文链接:https://www.haomeiwen.com/subject/gjiobltx.html