kubernetes(33):持续集成(2)-jenkins在k8s中动态创建
slave代理
jenkins在k8s中动态创建slave代理
接下来需要来配置 Jenkins,让他能够动态的⽣成 Slave 的 Pod。
Slave主要是解决单点负载的问题,分布式的master-slve架构,master主要负责负载地调度,slave执⾏构建任务,可以很好地解决性能问题。
这个创建是按需的,只要构建完成slave 的pod就会⾃动销毁
1 安装kubernetes插件
点击 Manage Jenkins -> Manage Plugins -> Available -> Kubernetes勾选安装即可。
2 Jenkins配置k8s信息
安装完毕后,点击 Manage Jenkins —> Configure System —> (拖到最下⽅)Add a new cloud —> 选择 Kubernetes,然后填写 Kubernetes 和 Jenkins 配置信息。
梦见被鬼上身另外需要注意,如果这⾥ Test Connection 失败的话,很有可能是权限问题,这⾥就需要把我们创建的 jenkins 的 serviceAccount 对应的secret 添加到这⾥的 Credentials ⾥⾯。
3 配置 Pod Template
其实就是配置 Jenkins Slave 运⾏的 Pod 模板,命名空间我们同样是⽤ kube-ops,Labels 这⾥也⾮常重要,对于后⾯执⾏ Job 的时候需要⽤到该值,然后我们这⾥使⽤的是 cnych/jenkins:jnlp 这个镜像,这个镜像是在官⽅的 jnlp 镜像基础上定制的,加⼊了 kubectl 等⼀些实⽤的⼯具。
使⽤jenkins-slave-jnlp作为Docker镜像。jenkins-slave-jnlp⽤于构建节点jnlp连接master。
由于新版本的 Kubernetes 插件变化较多,如果你使⽤的 Jenkins 版本在 2.176.x 版本以上,注意将上⾯的镜像替换成cnych/jenkins:jnlp6,否则使⽤会报错,配置如下图所⽰:
另外需要注意我们这⾥需要在下⾯挂载两个主机⽬录,⼀个是/var/run/docker.sock,该⽂件是⽤于 Pod 中的容器能够共享宿主机的 Docker,这就是⼤家说的 docker in docker 的⽅式,Docker ⼆进制⽂件我们已经打包到上⾯的镜像中了,另外⼀个⽬录下/root/.kube⽬录,我们将这个⽬录挂载到容器的/root/.kube⽬录下⾯这是为了让我们能够在 Pod 的容器中能够使⽤ kubectl ⼯具来访问我们的 Kubernetes 集,⽅便我们后⾯在 Slave Pod 部署 Kubernetes 应⽤。
累了醉了就想哭歌词另外还有⼏个参数需要注意,如下图中的Time in minutes to retain slave when idle,这个参数表⽰的意思是当处于空闲状态的时候保留Slave Pod 多长时间,这个参数最好我们保存默认就⾏了,如果你设置过⼤的话,Job 任务执⾏完成后,对应的 Slave Pod 就不会⽴即被销毁删除。
如果出现了权限问题,因为 Jenkins Slave Pod 中没有配置权限,所以需要配置上 ServiceAccount,在 Slave Pod 配置的地⽅点击下⾯的⾼级,添加上对应的 ServiceAccount 即可:
如果出现配置完成后发现启动 Jenkins Slave Pod 的时候,出现 Slave Pod 连接不上,然后尝试100次连接之后销毁 Pod,然后会再创建⼀个 Slave Pod 继续尝试连接,⽆限循环,类似于下⾯的信息
到这⾥我们的 Kubernetes Plugin 插件就算配置完成了。
4 ⾃由风格测试
Kubernetes 插件的配置⼯作完成了,接下来我们就来添加⼀个 Job 任务,看是否能够在 Slave Pod 中执⾏,任务执⾏完成后看 Pod 是否会被销毁。高考查分数怎么查
在 Jenkins ⾸页点击create new jobs,创建⼀个测试的任务,输⼊任务名称,然后我们选择 Freestyle project 类型的任务:
注意在下⾯的 Label Expression 这⾥要填⼊wx-jnlp,就是前⾯我们配置的 Slave Pod 中的 Label,这两个地⽅必须保持⼀致
然后往下拉,在 Build 区域选择Execute shell
echo "测试 Kubernetes 动态⽣成 jenkins slave"
echo "==============docker in docker==========="
docker info
echo "=============kubectl============="
kubectl get pods
最后点击保存
现在我们直接在页⾯点击⽴即构建触发构建即可,然后观察 Kubernetes 集中 Pod 的变化
gnlp6这个镜像很⼤,需要下载很长时间,我都是docker提前下载的,否则很容易测试失败游戏乱码
kubectl get pods
表现爱国主义的诗句
NAME READY STATUS RESTARTS AGE
jenkins2-8b7f7bdb7-h9kzt 1/1 Running 0 22m冬季台北来看雨
jnlp-s2kfk 1/1 Running 0 19s
我们可以看到在我们点击⽴刻构建的时候可以看到⼀个新的 Pod:jnlp-s2kfk 被创建了,这就是我们的 Jenkins Slave。任务执⾏完成后我们可以看到任务信息
到这⾥证明我们的任务已经构建完成,然后这个时候我们再去集查看我们的 Pod 列表,发现 kube-ops 这个 namespace 下⾯已经没有之前的 Slave 这个 Pod 了。
执⾏完成,pod⾃动销毁。
[root@k8s-master ~]# kubectl -n kube-ops get pod
NAME READY STATUS RESTARTS AGE
jenkins2-8b7f7bdb7-h9kzt 1/1 Running 0 84m
到这⾥我们就完成了使⽤ Kubernetes 动态⽣成 Jenkins Slave
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论