在【k8s】中部署Jenkins的实践指南

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Jenkins简介

2、k8s简介

3、什么在k8s中部署Jenkins

二、准备工作

1、准备k8s集群

2、Jenkins官方镜像版本介绍

3、Jenkins镜像准备

三、在Kubernetes中部署Jenkins

1、准备存储资源

2、准备账号

3、部署Jenkins

4、创建Service

5、访问测试


一、引言

1、Jenkins简介

Jenkins 是一个开源的自动化服务器,主要用于持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)。它由Sun Microsystems的前员工在2004年左右开发,最初命名为Hudson。后来由于一些商标争议,项目改名为Jenkins,并且迅速成为构建、测试和部署软件项目的流行工具。

Jenkins的主要特点包括:

  1. 持续集成与持续交付:Jenkins可以自动监控版本控制系统中的代码变更,触发构建过程,运行测试,并根据结果决定是否部署到生产环境。这有助于快速发现集成问题并缩短开发周期。
  2. 插件生态系统:Jenkins拥有庞大的插件库,支持几乎所有现代软件开发中可能用到的工具和技术,比如Git、Maven、Gradle等。
  3. 易于扩展:由于Jenkins是基于Java编写的,因此它非常灵活,用户可以通过编写自定义脚本或插件来扩展其功能。
  4. 分布式构建:Jenkins支持通过“主从”架构进行分布式构建,允许将构建任务分配给多个节点,以提高效率和资源利用率。
  5. 图形化界面:Jenkins提供了直观的Web界面,使得配置和管理CI/CD流程变得简单。
  6. Pipeline即代码:Jenkins Pipeline是一个特性集,它允许用户定义其CI/CD流程为代码的形式(通常使用Groovy语言),这样可以将其纳入版本控制,并与其他团队成员共享。
  7. 安全性:Jenkins提供了一些安全特性和认证机制,确保只有授权用户才能执行特定的操作。
  8. 社区和支持:作为一个开源项目,Jenkins有一个活跃的社区,提供文档、论坛讨论以及第三方服务和支持。

 

2、k8s简介

Kubernetes(通常简写为K8s)是一个开源平台,用于自动化部署、扩展和管理容器化的应用程序。它最初由Google设计并开发,并于2014年捐赠给了云原生计算基金会(CNCF)。Kubernetes提供了强大的机制来管理分布式系统中的应用,使其能够在物理机或虚拟机集群上运行。

特性

  1. 自动化容器编排:自动重启失败的容器、替换和重新调度容器、水平扩展容器等。
  2. 自我修复:如果某个节点故障,Kubernetes会自动将该节点上的工作负载迁移到其他健康的节点上。
  3. 横向扩展:通过简单的命令、用户界面或者基于CPU使用情况自动调整应用的规模。
  4. 服务发现与负载均衡:无需修改代码即可实现服务之间的通信,Kubernetes为容器提供了自己的IP地址以及一个DNS名称,并且可以负载均衡分配到容器上。
  5. 自动发布与回滚:逐步发布新的版本,同时监视应用健康状况,如有问题则自动回滚更改。
  6. 密钥与配置管理:让您可以轻松地管理和分发密码、OAuth令牌和其他敏感数据,而无需重建镜像。 

 

3、什么在k8s中部署Jenkins

在Kubernetes(简称K8s)中部署Jenkins,可以带来许多好处,尤其是对于那些需要高效、可扩展和可靠的持续集成/持续交付(CI/CD)流程的企业或团队。

1. 动态资源管理

  • 想象一下,你有一家餐厅,有时候客人很多,有时候客人很少。如果每次客人都很多时,你都需要临时雇佣更多的服务员,而当客人少时又得解雇他们,这样不仅麻烦还浪费资源。而在Kubernetes中部署Jenkins就像是有一个智能管理系统,它可以根据当前的工作负载自动调整所需的服务员数量(即Jenkins构建节点)。当有很多构建任务时,系统会自动增加更多“服务员”来帮忙;反之,则减少“服务员”,从而更有效地利用资源。

2. 提高可靠性和容错能力

  • 如果你的餐厅只有一个厨房,一旦这个厨房出现问题,整个餐厅就无法正常运营了。同样,在传统设置下,如果Jenkins主节点出现故障,所有的构建任务都会停止。但在Kubernetes环境中,即使一个节点出问题,其他健康的节点可以立即接管工作,确保服务不间断。

3. 快速响应变化

  • 假设你的餐厅突然接到一个大型宴会订单,你需要快速准备好额外的食物和服务。有了Kubernetes的帮助,Jenkins可以迅速扩展其处理能力,就像瞬间增加了多个厨房一样,以应对突如其来的大量工作。完成后,还可以快速缩减规模,节省成本。

4. 统一环境

  • 无论是在家中准备食物还是在商业厨房里烹饪,保持一致的食谱和做法是非常重要的。将Jenkins部署到Kubernetes上,意味着你可以确保开发、测试和生产环境尽可能地相似,避免由于环境差异导致的问题。

 

二、准备工作

1、准备k8s集群

这里我们用的k8s版本为 1.23.1,大家也可以使用其他的k8s发行版本,如果还未安装k8s请参考下面的文章。

《在Centos中搭建 K8s 1.23 集群超详细讲解》

《深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤》

2、Jenkins官方镜像版本介绍

官方镜像的推荐

  • Jenkins官方推荐使用 jenkinsci/blueocean 这个镜像。与直接下载Jenkins的镜像相比,Blue Ocean镜像提供了更为现代和直观的用户界面,使得Jenkins的使用和管理变得更加容易。因此,对于新用户或者希望简化Jenkins使用的用户来说,推荐使用jenkinsci/blueocean镜像。

镜像版本标签

Jenkins官方镜像在Docker Hub上提供了多个版本标签,以便用户选择。以下是一些常见的版本标签:

  • latest:表示最新版本的Jenkins,包括最新的功能和安全更新。然而,由于它是最新的版本,可能存在一些未知的问题或不稳定因素。
  • lts:表示长期支持版本的Jenkins,通常更稳定且经过更多的测试。它适合用于生产环境,因为提供了更多的安全更新和稳定性修复。
  • 具体版本号:例如2.401.1、1.24.1-bcc31d32159f等,表示特定版本的Jenkins。用户可以根据自己的需求选择特定的版本号。

 

3、Jenkins镜像准备

这里我们使用的Jenkins版本为2.410,镜像我放在个人资源中了,大家也可以自行下载或使用其他的发行版本。

上传至worker节点后,执行下面的命令解压

docker load -i jenkins-2.410.tar.gz

如果k8s版本大于1.23,则执行下面的命令

ctr -n=k8s.io images import jenkins2.410

三、在Kubernetes中部署Jenkins

1、准备存储资源

我们准备一个PVC,将Jenkins的数据持久化到当中,以免pod漂移到其他节点后,历史数据丢失。

下面简单介绍下如何创建PVC,更详细的可以参考《k8s PV与PVC持久化存储详解与实际应用分享》这篇文章

首先准备一个NFS共享目录

yum install nfs-utils -y
systemctl enable nfs --now
mkdir /data/jenkins -p
vim /etc/exports
# 添加下面的内容
/data/jenkins *(rw,no_root_squash)
#保存、退出
exportfs -arv

创建一个名称空间,用于部署Jenkins

kubectl create namespace jenkins-k8s

 编写pv的yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:name: jenkins-k8s-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManynfs:server: 192.168.40.181path: /data/jenkins
  • kind: PersistentVolume:定义了这个资源对象的类型是一个PersistentVolume(持久卷)。PersistentVolume是集群中的一段存储,它独立于Pod的生命周期而存在。
  • metadata: 开始元数据部分,这里包含了资源对象的一些基本信息。
    • name: jenkins-k8s-pv:给这个PersistentVolume指定一个名称,这里是jenkins-k8s-pv。在Kubernetes集群中,每个资源对象都需要一个唯一的名称。
  • spec::开始定义PersistentVolume的具体规格和配置。
    • capacity::定义了这个持久卷的容量。
      • storage: 10Gi:指定了持久卷的存储大小为10GiB(Gibibytes)。
    • accessModes::描述了持久卷可以被访问的方式或模式。
    • - ReadWriteMany:表示这个卷可以被多个节点同时以读写方式挂载。其他可能的访问模式包括ReadWriteOnce(只能由一个节点以读写方式挂载)和ReadOnlyMany(可以被多个节点以只读方式挂载)。
  • nfs::指定了这个持久卷使用NFS(网络文件系统)作为其后端存储机制。
    • server: 192.168.40.181:指定了NFS服务器的IP地址,这里是192.168.40.181。
    • path: /data/jenkins:指定了NFS服务器上共享的路径,即实际存储数据的位置,在这个例子中是/data/jenkins。

创建PV

kubectl  apply -f pv.yaml

  

编写创建PVC的yaml文件

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: jenkins-k8s-pvcnamespace: jenkins-k8s
spec:resources:requests:storage: 10GiaccessModes:- ReadWriteMany

 创建PVC

kubectl apply -f  pvc.yaml

  

2、准备账号

创建sa账号

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

进行RBAC授权

kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s  --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

3、部署Jenkins

准备yaml文件

kind: Deployment
apiVersion: apps/v1
metadata:name: jenkinsnamespace: jenkins-k8s
spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:serviceAccount: jenkins-k8s-sacontainers:- name: jenkinsimage:  jenkins/jenkins:2.410imagePullPolicy: IfNotPresentports:- containerPort: 8080name: webprotocol: TCP- containerPort: 50000name: agentprotocol: TCPresources:limits:cpu: 2000mmemory: 2Girequests:cpu: 500mmemory: 512MilivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12volumeMounts:- name: jenkins-volumesubPath: jenkins-homemountPath: /var/jenkins_homevolumes:- name: jenkins-volumepersistentVolumeClaim:claimName: jenkins-k8s-pvc

部署Jenkins

kubectl apply -f jenkins-deployment.yaml

4、创建Service

部署成功后,创建一个service,以供外部访问

编写yaml文件

apiVersion: v1
kind: Service
metadata:name: jenkins-servicenamespace: jenkins-k8slabels:app: jenkins
spec:selector:app: jenkinstype: NodePortports:- name: webport: 8080targetPort: webnodePort: 30089- name: agentport: 50000targetPort: agent

创建service

kubectl apply -f  service.yaml

5、访问测试

浏览器输入worker节点的IP+30089端口,如果显示下面的页面,证明部署成功

  

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法营Day59 | 寻找存在的路径, 冗余连接,冗余连接II

寻找存在的路径 这题使用并查集即可。并查集加路径压缩。 #include <iostream> using namespace std; int find(int* father,int u){return father[u] u ? u : father[u] find(father,father[u]); }bool isSame(int* father,int u,int v){return find(father,u) fi…

正则表达式(2)匹配规则

正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合&#xff0c;并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类&#xff1a;[abc…

【QWEN】机器人控制器的控制周期越短精度越高吗

好的&#xff0c;用户问的是“机器人控制器的控制周期越短精度越高吗”。我需要根据提供的知识库内容来回答这个问题。首先&#xff0c;我得回忆一下知识库里的相关信息。 知识库里有几篇相关的文章。比如&#xff0c;[3]提到控制周期越短&#xff0c;控制性能的上限越高&…

[总概]Vue2/3React Diff算法

根据搜索结果,大部分文档都详细描述了Vue的Diff算法原理、优化策略以及实现细节。例如,网页1详细介绍了Vue Diff算法的核心设计,包括双端比较和key的作用;Vue3中的快速Diff算法; 通常,解释一个算法可以从其基本原理、核心策略、优化手段、源码实现以及应用场景等方面展开…

【MySQL_03】数据库基本--核心概念

文章目录 一、数据库基础1.1 数据库基础定义1.2 数据库分类与典型产品1.3 数据库模型1.4 数据库层次结构1.5 数据库核心机制1.6 数据表和视图1.61 数据表&#xff08;Table&#xff09;1.62 视图&#xff08;View&#xff09; 1.7 键类型1.8 MySQL数据类型1.9 数据库范式化 二、…

FreeRTOS第16篇:FreeRTOS链表实现细节04_为什么FreeRTOS选择“侵入式链表”

文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 传统链表 vs. 侵入式链表 在嵌入式系统中,内存和性能的优化至关重要。FreeRTOS选择侵入式链表而非传统链表,其背后是内…

STM32读写片内FLASH 笔记

文章目录 前言STM32F105的内部ROM分布STM32F10x的闪存擦写解锁FPECMain FLASH 的编写 main Flash的擦除注意点 前言 在通过OTA的方式对设备进行升级&#xff0c;若在使用内部FLASH装载固件程序的方式下&#xff0c;需要擦写 内部FLASH 从而实现把新的固件程序写入到 内部FLASH…

Python爬虫实战:爬取财金网实时财经信息

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 在当今数字化时代,互联网数据呈爆炸式增长,其中蕴含着巨大的商业价值、研究价值和社会价值。从金融市场动态分析到行业趋势研究,从舆情监测到学术信息收…

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…

996引擎-问题处理:实现自定义道具变身卡

996引擎-问题处理:实现自定义道具变身卡 方案一、修改角色外观(武器、衣服、特效) 实现变身先看效果创建个NPC测试效果方案二、利用 Buff 实现变身创建:变身Buff配buff表,实现人物变形测试NPC创建道具:变身卡配item表,添加道具:变身卡触发函数参考资料方案一、修改角色外…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 &#xff0c;本文不仅介绍其文生图和文生视频的使用秘籍&#xff0c;还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果&#xff08;我录制的GIF动图&#xff09; 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…

如何快速判断IP是否为代理

1.探究IP地址的地理分布 代理IP的所在位置&#xff0c;往往与用户实际所在地不吻合。可以通过运用WHOIS查询工具或在线IP地址定位服务&#xff0c;输入所需查询的IP&#xff0c;即可获得其地理位置信息。 若该信息显示的位置并非用户所在城市或显示为知名代理服务器节点&…

从CL1看生物计算机的创新突破与发展前景:技术、应用与挑战的多维度剖析

一、引言 1.1 研究背景与意义 随着科技的飞速发展&#xff0c;计算机技术已经成为推动现代社会进步的核心力量之一。从最初的电子管计算机到如今的大规模集成电路计算机&#xff0c;计算机的性能得到了极大的提升&#xff0c;应用领域也不断拓展。然而&#xff0c;传统计算机…

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-CSDN博客 目录 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型…

zabbix图表中文显示方框

问题&#xff1a; zabbix安装完成后&#xff0c;查看图形&#xff0c;下方中文显示为方框 思路&#xff1a; 替换字体文件&#xff0c;或者修改配置文件指向中文可以正常显示的字体文件 方案&#xff1a; 查找资料确认影响因素 通过资料查询得知&#xff0c;使用的字体文…

【Linux-网络】HTTP的清风与HTTPS的密语

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…

通过数据库网格架构构建现代分布式数据系统

在当今微服务驱动的世界中&#xff0c;企业在跨分布式系统管理数据方面面临着越来越多的挑战。数据库网格架构已成为应对这些挑战的强大解决方案&#xff0c;它提供了一种与现代应用架构相匹配的分散式数据管理方法。本文将探讨数据库网格架构的工作原理&#xff0c;以及如何使…

RangeError: Radix must be an integer between 2 and 36

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

荆为好的专栏推荐

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 专栏推荐特别篇1. 后端专栏推荐2. 云原生专栏…