那么我们的jenkins是从k8s去部署的,所以我们的slave也是从k8s中去考虑,就可以将这个slave当成一个pod去处理,master就拿这个pod去处理
这个的话也就是可以预先起一些slave,也可以动态的去创建slave,要是预先启动slave的话,可能会消耗一些资源,这些资源也并不是必须要消耗的,所以就要考虑动态的去考虑slave,也就是即开即用,不用就销毁了,当这个量大的时候,这个就比较明显了,所以在k8s中去创建代理可以通过插件去做到的
直接去安装一个kubernetes的插件
安装插件的时候我们需要在我们的持久化目录中去修改我们的国外地址 [root@k8s-node3 updates]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \ sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
在jenkins页面上restart,重启jenkins生效
要想动态的去在k8s中创建slave pod,所以要连接k8s,定义连接k8s的地址是多少,创建slave pod连接jenkins的地址是多少
找到管理jenkins 这里,找到系统配置configure system
当安装好插件之后,会在最下面发现一个cloud
这里连接k8s直接使用service的地址就可以,因为我们部署了coredns直接可以就要解析到这个k8s,点击连接测试可以连接
如果jenkins是在外部去部署的,也就是单独哪台服务器去部署的,走的传统部署,也就是要连接k8s对外的地址也就是https://10.4.7.11:6443这个端口,并且将它的CA添加进来添加一个凭据,这样才能连接成功
并且还有将jenkins的地址也写上,,或者写成连接ip的地址也可以
现在jenkins已经知道要连接哪个k8s,那么再去创建这个slave容器的pod,要创建pod必须就的需要镜像,如果没有镜像,即使jenkins像k8s发起创建一个pod,k8s肯定不知道去创建哪个pod,必须有镜像,这个镜像也就是slave的镜像,所以下一步我们需要做的就是构建一个镜像。
让k8s使用这个镜像拉取一个pod,而这个镜像制作的话,看需要什么环境的包。
六、自定义构建jenkins-slave镜像
jenkins slave制作这个镜像看需要什么?
1、需要什么开发语言?因为slave去完成的需要代码的编译,如果是java的语言,那么就需要maven的环境,如果是go就需要去用go去编译,所以开发语言不一样,slave所做的事环境也不一样
2、额外环境,比如docker,需要打镜像对微服务,以及推送到镜像仓库都需要docker的环境,还会使用helm,helm是直接将服务部署到k8s中。
比如就拿java项目为例,一般微服务也都是使用java去写的
代码的编译,一般使用比较多的就是maven,这个maven还依赖jdk,打包镜像需要docker,我们需要使用helm去做持续部署,所以这也就是这个镜像里面需要封装的依赖
另外还有一点,这个镜像怎么去做为一个slave去存在呢,传统的在页面添加一个就可以了,当连接的时候,会连接到slave节点帮你启动一个agent,也就是下发一个jar包,这个agent就可以直接和master去交互了,那么将这个jar包kill掉,这个slave也就是不可用状态了,所以它们直接的一个交互就是由自己实现的一个程序去完成的,每个slave上面会有一个agent,master与agent去交互,agent去完成这个job任务,那么这个镜像里面也得需要包含这个agent这个jar包,传统的方式会自动的帮你去安装了,但是镜像的还得自己去加上,加上之后才能去连接jenkins,master才能去下发任务
[root@k8s-master1 jenkins-slave]# ls Dockerfile helm jenkins-slave kubectl settings.xml slave.jar