当前位置: 首页 > news >正文

Kubernetes基于helm部署jenkins

Kubernetes基于helm安装jenkins

jenkins支持war包、docker镜像、系统安装包、helm安装等。在Kubernetes上使用Helm安装Jenkins可以简化安装和管理Jenkins的过程。同时借助Kubernetes,jenkins可以实现工作节点的动态调用伸缩,更好的提高资源利用率。通过Jenkins的kubernetes-plugin来实现将Jenkins运行在Kubernetes上的功能。

准备工作

  1. 已经安装并配置好了Kubernetes集群。
# k8s版本及环境信息
root@master1:~# kubectl get node -o wide
NAME      STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION     CONTAINER-RUNTIME
master1   Ready    control-plane   25h   v1.28.2   192.168.0.61   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12
node1     Ready    <none>          25h   v1.28.2   192.168.0.62   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12
node2     Ready    <none>          25h   v1.28.2   192.168.0.63   <none>        Ubuntu 24.04 LTS   6.8.0-36-generic   containerd://1.7.12# 操作系统信息
root@master1:~# cat /etc/issue
Ubuntu 24.04 LTS \n \lroot@master1:~# uname -a
Linux master1 6.8.0-36-generic #36-Ubuntu SMP PREEMPT_DYNAMIC Mon Jun 10 10:49:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
  1. 已经安装并配置好了Helm。
# helm版本
root@master1:~# helm version
version.BuildInfo{Version:"v3.15.2", GitCommit:"1a500d5625419a524fdae4b33de351cc4f58ec35", GitTreeState:"clean", GoVersion:"go1.22.4"}
  1. 已经部署了提供pv、pvc等资源的存储资源。
root@master1:~# helm ls -n openebs
NAME    NAMESPACE   REVISION        UPDATED                           STATUS          CHART           APP VERSION
openebs openebs         1     2024-07-02 14:38:40.928808834 +0800 CST deployed        openebs-4.0.1   4.0.1
root@master1:~# kubectl get pod -n openebs
NAME                                              READY   STATUS    RESTARTS   AGE
openebs-localpv-provisioner-6b8bff68bd-vmwp7      1/1     Running   0          121m
openebs-lvm-localpv-controller-778b75449c-mmvw6   5/5     Running   0          121m
openebs-lvm-localpv-node-d2trc                    2/2     Running   0          121m
openebs-lvm-localpv-node-md5wh                    2/2     Running   0          121m
openebs-zfs-localpv-controller-6665568c7c-snw4q   5/5     Running   0          121m
openebs-zfs-localpv-node-mc8tv                    2/2     Running   0          121m
openebs-zfs-localpv-node-w6nns                    2/2     Running   0          121m
root@master1:~# kubectl get sc -n openebs
NAME               PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath   openebs.io/local   Delete          WaitForFirstConsumer   false                  121m

可以参考我的另外一篇文章部署openebs,《Kubernetes云原生存储解决方案openebs部署实践-3.10.0版本(helm部署)》。

helm安装步骤

1. 添加Jenkins的Helm仓库

# 添加更新仓库
helm repo add jenkins https://charts.jenkins.io
helm repo update# 查看版本列表
helm search repo -l jenkins/jenkins# 查看最新版本
helm search repo jenkins# 下载chart包,不加--version则加载最新版本
helm pull jenkins/jenkins --version 5.1.9

关于chart版本和jenkins版本的对应关系,下面是部分映射关系:

NAMECHART VERSIONAPP VERSIONDESCRIPTION
jenkins/jenkins5.3.32.452.2Jenkins - Build great things at any scale! As t…
jenkins/jenkins5.3.22.452.2Jenkins - Build great things at any scale! As t…
jenkins/jenkins5.3.12.452.2Jenkins - Build great things at any scale! As t…
jenkins/jenkins5.1.92.440.3Jenkins - Build great things at any scale! As t…

2. 创建命名空间

kubectl create namespace jenkins

3. 安装Jenkins

# 查看values
helm show values jenkins/jenkins# 下面安装的参数来自于values。指定服务暴露方式为NodePort并指定端口,pv由存储类openebs-hostpath提供
helm upgrade --install jenkins jenkins/jenkins --namespace jenkins --set persistence.storageClass="openebs-hostpath" --set controller.serviceType=NodePort --set controller.nodePort=30080# 卸载安装
helm uninstall jenkins -n jenkins # 测试环境执行
root@master1:~/jenkins# helm upgrade --install jenkins jenkins/jenkins --namespace jenkins --set persistence.storageClass="openebs-hostpath" --set controller.serviceType=NodePort --set controller.nodePort=30080
Release "jenkins" does not exist. Installing it now.
NAME: jenkins
LAST DEPLOYED: Wed Jul  3 14:07:47 2024
NAMESPACE: jenkins
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo
2. Get the Jenkins URL to visit by running these commands in the same shell:export NODE_PORT=$(kubectl get --namespace jenkins -o jsonpath="{.spec.ports[0].nodePort}" services jenkins)export NODE_IP=$(kubectl get nodes --namespace jenkins -o jsonpath="{.items[0].status.addresses[0].address}")echo http://$NODE_IP:$NODE_PORT3. Login with the password from step 1 and the username: admin
4. Configure security realm and authorization strategy
5. Use Jenkins Configuration as Code by specifying configScripts in your values.yaml file, see documentation: http://$NODE_IP:$NODE_PORT/configuration-as-code and examples: https://github.com/jenkinsci/configuration-as-code-plugin/tree/master/demosFor more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engineFor more information about Jenkins Configuration as Code, visit:
https://jenkins.io/projects/jcasc/# 查看安装的资源
root@master1:~/jenkins# kubectl get all -n jenkins
NAME            READY   STATUS    RESTARTS   AGE
pod/jenkins-0   2/2     Running   0          10mNAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/jenkins         NodePort    10.102.102.102   <none>        8080:30080/TCP   10m
service/jenkins-agent   ClusterIP   10.99.77.201     <none>        50000/TCP        10mNAME                       READY   AGE
statefulset.apps/jenkins   1/1     10m

参数说明:

  • persistence.storageClass参数:用于动态申请pv,持久化jenkins数据。
  • serviceType参数:指定服务暴露的方式,nodePort范围:30000-32767。

也可以通过自定义 values.yaml 文件来配置Jenkins安装参数。例如,创建一个 myvalues.yaml 文件:

controller:JCasC:enabled: trueconfigScripts:welcome-message: |jenkins:systemMessage: "Welcome to Jenkins on Kubernetes with Helm"installPlugins:- kubernetes- workflow-aggregator- git- configuration-as-codeserviceType: NodePort

然后使用以下命令安装Jenkins:

helm install jenkins jenkins/jenkins --namespace jenkins -f myvalues.yaml

4. 配置jenkins

  1. 查询admin密码
kubectl --namespace jenkins get secret jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode
# 或者
kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo# 我这里获取的随机密码
EepJvUf9a8ryLo1JPDzdqo
  1. 配置Jenkins插件源
root@master1:~# kubectl get pod -n jenkins
NAME        READY   STATUS    RESTARTS   AGE
jenkins-0   2/2     Running   0          22m
root@master1:~# kubectl exec -itn jenkins jenkins-0 sh$ echo $JENKINS_HOME
/var/jenkins_home$ cp $JENKINS_HOME/hudson.model.UpdateCenter.xml{,.bak}$ sed -i 's#https://updates.jenkins.io/update-center.json#https://mirrors.huaweicloud.com/jenkins/updates/update-center.json#g' $JENKINS_HOME/hudson.model.UpdateCenter.xml

5. 访问Jenkins

svc设置为NodePort方式,通过节点ip+30080端口访问:

kubectl --namespace jenkins get svc

用户名为admin,密码为上面查到的随机密码。

在这里插入图片描述

参考资料

  1. jenkins 5.3.3 · jenkins/jenkinsci (artifacthub.io)
  2. charts/stable/jenkins at master · helm/charts (github.com)
  3. Jenkins

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python入门 2024/7/8
  • 【RIP实验-熟悉基础配置】
  • Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)
  • tomcat 安装和优化
  • 6月30日功能测试Day10
  • 【1】A-Frame整体介绍
  • hdu物联网硬件实验3 按键和中断
  • 解码技术债:AI代码助手与智能体的革新之道
  • PostgreSQL的使用
  • 【续集】Java之父的退休之旅:从软件殿堂到多彩人生的探索
  • QT学习积累——如何提高Qt遍历list的效率
  • 从GPT-1到GPT-3 预训练语言模型的演进与突破
  • 【INTEL(ALTERA)】为什么我使用 PIO 边缘捕获中断的 Nios® II 设计不能正常工作?
  • 灵活多变的对象创建——工厂方法模式(Python实现)
  • 怎么将几首音乐合并在一起?这四种合并方法大家都在用!
  • Android单元测试 - 几个重要问题
  • axios 和 cookie 的那些事
  • Git初体验
  • JAVA之继承和多态
  • js操作时间(持续更新)
  • Next.js之基础概念(二)
  • Web标准制定过程
  • 不上全站https的网站你们就等着被恶心死吧
  • 第十八天-企业应用架构模式-基本模式
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 观察者模式实现非直接耦合
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)965
  • 数组的操作
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 想写好前端,先练好内功
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 正则与JS中的正则
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​Linux·i2c驱动架构​
  • ​批处理文件中的errorlevel用法
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # C++之functional库用法整理
  • $.ajax中的eval及dataType
  • (c语言)strcpy函数用法
  • (LLM) 很笨
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读40-45)图像描述1
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)c52学习之旅-静态数码管
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @ModelAttribute注解使用