运行在Kubernetes上的Jenkins

下图来自rancher官方博客,在kubernetes环境下,jenkins任务被交给各个pod执行,这些pod在需要时被创建,任务结束后被销毁,这样既能合理利用资源,又能给每个任务提供一致的干净的初始化环境(也可以保留pod,如查问题的时候)

如何在kubernetes快速部署jenkins

通过Helm可以快速且简单的部署多种应用,关于helm的安装和使用请参考《部署和体验Helm(2.16.1版本)》

环境信息

本次实战的环境信息如下:

  1. kubernetes集群:三台CentOS7.7服务器
  2. kubernetes版本:1.15.3
  3. helm版本:2.16.1
  4. jenkins版本:2.190.3

准备工作

除了提前准备好kubernetes环境,还需要做好以下准备工作:

  • 准备好helm,您可以参考《部署和体验Helm(2.16.1版本)》
  • 准备好NFS服务,这样就算jenkins的pod被销毁重建,也不会丢失数据,NFS服务的搭建您可以参考《Ubuntu16环境安装和使用NFS》
    准备完成后可以开始实战了

本次实战的namespace

本次实战使用名为helm-jenkins的namespace,执行以下命令创建:

kubectl create namespace helm-jenkins

创建PV

为了后面的jenkins服务顺利启动,需要预先部署好pv:

  • 新建名为pv-helm-jenkins.yaml的文件,内容如下,其中192.168.133.142是NFS服务器地址,/usr/local/work/test/002是分配给本次实战使用的NFS文件夹:
apiVersion: v1kind: PersistentVolumemetadata: name: helm-jenkins namespace: helm-jenkinsspec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle nfs: path: /usr/local/work/test/002 server: 192.168.133.142
  • 执行命令kubectl create -f pv-helm-jenkins.yaml,创建pv
  • 查看pv是否已经就绪:
[root@node1 helm-jenkins]# kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEhelm-jenkins 10Gi RWO Recycle Available 5s 14h

helm安装jenkins

  • 确保helm2.16.1版本安装完毕,并且可以正常工作:
[root@node1 helm-jenkins]# helm versionClient: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}Server: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
  • 确保以下helm repo准备好(如果没有可以通过helm repo add添加):
[root@node1 helm-jenkins]# helm repo listNAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 执行以下命令,即可创建jenkins的deployment、service等资源:
helm install --namespace helm-jenkins --name my-jenkins stable/jenkins
  • 执行完毕后,控制台输出以下内容:
NOTES:1. Get your 'admin' user password by running: printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo2. Get the Jenkins URL to visit by running these commands in the same shell: NOTE: It may take a few minutes for the LoadBalancer IP to be available. You can watch the status of by running 'kubectl get svc --namespace helm-jenkins -w my-jenkins' export SERVICE_IP=$(kubectl get svc --namespace helm-jenkins my-jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}") echo http://$SERVICE_IP:8080/login3. Login with the password from step 1 and the username: admin

上述内容的第一条给出重要提示:获取admin账号密码的方法,执行以下命令即可:

printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo

如下图红框所示,我这里得到了admin密码为Eq6WxHvJ2V:

  • 检查服务,发现helm-jenkins这个namespace下有两个服务:my-jenkinsmy-jenkins-agent,前者就是jenkins网站,后者用来接收执行任务的jenkins实例的注册:
[root@node1 helm-jenkins]# kubectl get svc -n helm-jenkinsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmy-jenkins LoadBalancer 10.233.10.35  8080:31763/TCP 31mmy-jenkins-agent ClusterIP 10.233.35.20  50000/TCP 31m
  • 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:
[root@node1 helm-jenkins]# kubectl get serviceaccount -n helm-jenkinsNAME SECRETS AGEdefault 1 3h55m

可见jenkins容器的serviceaccount是default

  • 知道了容器的serviceaccount,上述问题就好解决了,我们用RBAC将访问api server所需权限绑定给default即可,这里为了省事儿就不将权限一一列出了,接下来直接给default最高权限(生产环境千万别这么做,必须按需分配);
  • 新建名为rbac-helm-jenkins-default.yaml的文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: rbac-helm-jenkins-default namespace: helm-jenkinsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- kind: ServiceAccount name: default namespace: helm-jenkins
  • 执行命令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:
[root@node1 helm-jenkins]# kubectl get pods -n helm-jenkinsNAME READY STATUS RESTARTS AGEdefault-66vcq 0/1 ContainerCreating 0 1smy-jenkins-74bcdfc566-jbw28 1/1 Running 0 5h5m
  • 返回jenkins页面,可见任务已经执行完毕:
  • 再去控制台查看pod,发现刚刚创建的pod已经消失了
  • 至此,kubernetes环境部署和体验jenkins的实战就完成了,希望本文带给您一些参考信息。

欢迎关注公众号:程序员欣宸

helm安装_Helm部署和体验jenkins相关推荐

  1. helm安装istio_istio部署-helm

    参考 1. Istio Chart 目录结构 PATH: istio-1.1.7/install/kubernetes/helm 1.1 Chart.yaml Chart 的基础信息文件,其中包含版本 ...

  2. faiss python安装_faiss部署初体验

    部署环境介绍 python2.7.13 Anaconda2 Faiss开源代码包 C++编译环境 安装步骤介绍 Anaconda2安装 Anaconda2安装openblas,并软链接到/usr/li ...

  3. Jenkins详细安装配置部署--超详细

    Jenkins详细安装配置部署--超详细 一.什么是CI/CD 二.Gitlab内置持续集成 持续集成(CI) 持续交付(CD) 2.1 Gitlab的CI/CD优势 2.2 Gitlab的CI/CD ...

  4. helm安装_如何利用 Helm 在 Kubernetes 上快速部署 Jenkins

    Jenkins 做为最著名的 CI/CD 工具,在全世界范围内被广泛使用,而随着以 Kubernetes 为首的云平台的不断发展与壮大,在 Kubernetes 上运行 Jenkins 的需求越来越多 ...

  5. jenkins pipeline_Jenkins流水线(pipeline)实战之:从部署到体验

    关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...

  6. jenkins war包_Jenkins的安装和部署(jenkins教程)

    一.jenkins的下载.安装以及环境的搭建部署. 1.什么是jenkins以及它的作用: Jenkins 是一个可扩展的持续集成(CI)平台.它只是一个平台,真正运作的都是插件. Jenkins的主 ...

  7. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  8. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  9. 【Jenkins】win 10 / win 11:Jenkins 的下载、安装、部署(Jenkins 2.134 基于 Java 8)

    目录 一.Jenkins的下载 二.Jenkins的安装 三.安装后初次登录Jenkins 四.部署自动化集成环境 一.Jenkins的下载 Jenkins官网下载地址:Jenkins   点击前往下 ...

最新文章

  1. php计算属相,一个判断干支、属相和星座的php函数
  2. MyBatis基础知识汇总
  3. windowsphone开发_[app开发定制公司]开发app需要什么技术呢?
  4. snort完整安装(snort-2.8.3.1)
  5. When IT meets Coupon
  6. linux怎么查端口是否被占用,LINUX中如何查看某个端口是否被占用
  7. 雷军:小米将扩招5000名工程师!多个领域需要用到C++
  8. mysql jpa总分数_JPA 查询COUNT示例
  9. TS字面量进行类型声明
  10. AlvinZH双掉坑里了
  11. vue修改计算属性的值_Vue语法高级之计算属性和侦听器
  12. sql server 2000能否得到一个表的最后更新日期?
  13. 《C++标准程序库》——STL迭代器
  14. 使用Junit对Android应用进行单元测试
  15. 读取QQ ClientKey C++版本
  16. ubuntu录制屏幕傻瓜操作 ubuntu screen capture
  17. npp夜光数据介绍 viirs_对 VIIRS/NPP 夜光数据的解读
  18. 3.19美团实习面试一面二面(已offer)
  19. 怎样将ppt转换成pdf软件
  20. 沃尔沃自动驾驶卡车Vera开始在瑞典港口运货 最高时速40公里

热门文章

  1. text 两端对齐 小程序_leetcode 68 文本左右对齐
  2. 施工部署主要不包括_专项施工方案编制至少应该包括以下内容及管片选型主要依据以下原则...
  3. Win7旗舰版系统时间不准确怎么办
  4. Android平台Camera2数据如何对接RTMP推流到服务器
  5. Highcharts双饼图使用实例
  6. SpringAOP+自定义注解实现日志功能
  7. spring boot配置dubbo注意事项
  8. 学习Spring Boot:(十五)使用Lombok来优雅的编码
  9. Java核心类库篇3——util
  10. matlab 粘连分割代码,【求助】图像中粘连字符切分代码,求注释!!!