Helm 部署和体验 jenkins
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
运行在 Kubernetes 上的 Jenkins
下图来自 rancher 官方博客,在 kubernetes 环境下,jenkins 任务被交给各个 pod 执行,这些 pod 在需要时被创建,任务结束后被销毁,这样既能合理利用资源,又能给每个任务提供一致的干净的初始化环境(也可以保留 pod,如查问题的时候)
如何在 kubernetes 快速部署 jenkins
通过 Helm 可以快速且简单的部署多种应用,关于 helm 的安装和使用请参考《部署和体验Helm(2.16.1版本) 》
环境信息
本次实战的环境信息如下:
kubernetes 集群:三台 CentOS7.7 服务器
kubernetes 版本:1.15.3
helm 版本:2.16.1
jenkins 版本:2.190.3
准备工作
除了提前准备好 kubernetes 环境,还需要做好以下准备工作:
准备好 helm,您可以参考《部署和体验Helm(2.16.1版本) 》;
准备好 NFS 服务,这样就算 jenkins 的 pod 被销毁重建,也不会丢失数据,NFS 服务的搭建您可以参考《Ubuntu16环境安装和使用NFS》;
准备完成后可以开始实战了
本次实战的 namespace
本次实战使用名为 helm-jenkins 的 namespace,执行以下命令创建:
创建 PV
为了后面的 jenkins 服务顺利启动,需要预先部署好 pv:
新建名为 pv-helm-jenkins.yaml 的文件,内容如下,其中 192.168.133.142 是 NFS 服务器地址, /usr/local/work/test/002 是分配给本次实战使用的 NFS 文件夹:
执行命令 kubectl create -f pv-helm-jenkins.yaml ,创建 PV;
查看 PV 是否已经就绪:
helm 安装 jenkins
确保 helm2.16.1 版本安装完毕,并且可以正常工作:
确保以下 helm repo 准备好(如果没有可以通过 helm repo add 添加):
执行以下命令,即可创建 jenkins 的 deployment、service 等资源:
执行完毕后,控制台输出以下内容:
上述内容的第一条给出重要提示:获取 admin 账号密码的方法,执行以下命令即可:
如下图红框所示,我这里得到了 admin 密码为 Eq6WxHvJ2V :
检查服务,发现 helm-jenkins 这个 namespace 下有两个服务: my-jenkins 和 my-jenkins-agent ,前者就是 jenkins 网站,后者用来接收执行任务的 jenkins 实例的注册:
my-jenkins 这个服务的类型是 LoadBalancer,8080 端口被映射到宿主机的 31763 端口,因此,使用 kubernetes 集群中一台宿主机的 IP,再加上 31763 端口即可通过浏览器访问;
至此,jenkins 安装已完成,接下来要做必要的设置
设置 kubernetes 插件
为了让 jenkins 在以下模式工作,还需要设置 kubernetes 插件
点击下图红框中的"Manage Jenkins",进入设置页面:
由于很多插件版本较旧,页面上会有升级提示,这里暂时用不到,因此直接点击下图红框中的"Configure System":
点击下图红框 1 中的"Test Connection”按钮,您会见到红框 2 中的错误信息:
产生上述错误的原因,是由于 jenkins 容器没有权限访问 kubernetes 的 api server,为了解决此问题,要先搞清楚容器的身份,我们知道容器在 kubernetes 环境中都有自己的 serviceaccount,执行命令 kubectl get serviceaccount -n helm-jenkins 查看当前 namespace 下的 serviceaccount:
可见 jenkins 容器的 serviceaccount 是 default
知道了容器的 serviceaccount,上述问题就好解决了,我们用 RBAC 将访问 api server 所需权限绑定给 default 即可,这里为了省事儿就不将权限一一列出了,接下来直接给 default 最高权限( 生产环境千万别这么做 ,必须按需分配);
新建名为 rbac-helm-jenkins-default.yaml 的文件,内容如下:
执行命令 kubectl create -f rbac-helm-jenkins-default.yaml 使得 RBAC 生效
再次回到之前的页面点击"Test Connection"按钮,如下图,提示"Connection successful":
接下来设置 Pod 模板参数,如下图,namepsace 要设置为 helm-jenkins ,另外要记下来 Labels 的值 my-jenkins-jenkins-slave ,后面会用到:
点击底部的"Save"按钮,使设置生效;
设置完毕,接下来创建任务体验一下 kubernetes 上的 jenkins 功能
体验 Freestyle project
创建一个 Freestyle project,如下图:
如下图红框,表单中 Label Expression 的值是前面记下来的 my-jenkins-jenkins-slave :
本次任务的具体内容很简单,执行一段 shell,输出"Hello World!",如下图所示:
点击底部的"Save"按钮保存
点击下图红框中的"Build Now",即可开始构建:
如果是第一次执行,会触发 jenkins 任务 pod 的 docker 镜像的下载,您需要耐心等候一会儿;
此时去控制台执行命令 kubectl get pods -n helm-jenkins 查看 pod,会发现有新的 pod 出现,如下所示,这是执行 jenkins 任务的 pod:
返回 jenkins 页面,可见任务已经执行完毕:
再去控制台查看 pod,发现刚刚创建的 pod 已经消失了
至此,kubernetes 环境部署和体验 jenkins 的实战就完成了,希望本文带给您一些参考信息。
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/fcbc77133f0ddb9b8272aa59f】。文章转载请联系作者。
评论