在【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: 10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    server: 192.168.40.181
    path: /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-pvc
  namespace: jenkins-k8s
spec:
  resources:
    requests:
      storage: 10Gi
  accessModes:
  - 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: jenkins
  namespace: jenkins-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins-k8s-sa
      containers:
      - name: jenkins
        image:  jenkins/jenkins:2.410
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        - containerPort: 50000
          name: agent
          protocol: TCP
        resources:
          limits:
            cpu: 2000m
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 512Mi
        livenessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        volumeMounts:
        - name: jenkins-volume
          subPath: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-volume
        persistentVolumeClaim:
          claimName: jenkins-k8s-pvc

部署Jenkins

kubectl apply -f jenkins-deployment.yaml

4、创建Service

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

编写yaml文件

apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: jenkins-k8s
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  type: NodePort
  ports:
  - name: web
    port: 8080
    targetPort: web
    nodePort: 30089
  - name: agent
    port: 50000
    targetPort: agent

创建service

kubectl apply -f  service.yaml

5、访问测试

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

  

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ae 效果详解:VR 发光

Ae菜单:效果/沉浸式视频/VR 发光 Immersive Video/VR Glow VR 发光 VR Glow效果用于在 VR 视频中创建光晕效果,并针对等距柱状投影(Equirectangular)进行优化,以确保全景画面中的光晕均匀分布,不受画面边缘…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中,经历过传统的 pro code 阶段,即活动页面完全由前端开发编码实现,直到 2020 年接入公司内部的低代码活动平台,满足了大部分日常活动的需求,运营可自主配置活动并上线,释…

ESP8266UDP透传

1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. PC 连⼊入 ESP8266 softAP 就是连接wifi 3.查询ESP8266设备的IP地址 ATCIFSR 响应: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

私有云基础架构与运维(二)

二.私有云基础架构 【项目概述】 经过云计算基础知识及核心技术的学习后,希望进一步了解 IT 基础架构的演变过 程,通过学习传统架构、集群架构以及私有云基础架构的相关知识,认识企业从传统 IT 基 础架构到私有云基础架构转型的必要性。…

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

DeepSeek R1-32B微调实战指南 ├── 1. 环境准备 │ ├── 1.1 硬件配置 │ │ ├─ 全参数微调:4*A100 80GB │ │ └─ LoRA微调:单卡24GB │ ├── 1.2 软件依赖 │ │ ├─ PyTorch 2.1.2+CUDA │ │ └─ Unsloth/ColossalAI │ └── 1.3 模…

vue3 vite项目安装eslint

npm install eslint -D 安装eslint库 npx eslint --init 初始化配置,按项目实际情况选 自动生成eslint.config.js,可以添加自定义rules 安装ESLint插件 此时打开vue文件就会标红有问题的位置 安装prettier npm install prettier eslint-config-pr…

【五.LangChain技术与应用】【10.LangChain ChatPromptTemplate(下):复杂场景下的应用】

凌晨两点的西二旗,你盯着监控大屏上跳动的错误日志,智能客服系统在流量洪峰中像纸船一样摇晃。用户骂声塞满弹窗:“等了十分钟就这?”“刚才说的怎么不认了?”“我要人工!!”——这时候你需要的不只是ChatPromptTemplate,而是给对话系统装上航天级操控台。 一、模板组…

javascrip网页设计案例,SuperSlide+bootstrap+html经典组合

概述 JavaScript作为一种强大的脚本语言,在网页设计领域发挥着举足轻重的作用,能够为网页赋予丰富的交互性与动态功能。以下通过具体案例来深入理解其应用。​ 假设要打造一个旅游网站,该网站具备诸多实用功能。在响应式设计方面&#xff0…

python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据

文章目录 使用数据获取渠道自动填充数据QTEASY数据拉取功能数据拉取接口refill_data_source()数据拉取API的功能特性多渠道拉取数据实现下载流量控制实现错误重试日志记录其他功能 qteasy是一个功能全面且易用的量化交易策略框架, Github地址在这里。使用它&#x…

Vite 6 升级指南:CJS 和 ESM 的爱恨情仇

Vite 6 升级指南:CJS 和 ESM 的爱恨情仇 前言:老朋友 CJS,新欢 ESM 说到 JavaScript 模块化,CJS 和 ESM 这俩货简直像是两代人的思维碰撞。前者是 Node.js 的老朋友,后者是前端新时代的宠儿。Vite 6 直接把 CJS 踢出…

FreeRTOS任务状态查询

一.任务相关API vTaskList(),创建一个表格描述每个任务的详细信息 char biaoge[1000]; //定义一个缓存 vTaskList(biaoge); //将表格存到这缓存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet(&#xf…

【3】VS Code 新建上位机项目---C#窗体与控件开发

【3】VS Code 新建上位机项目---C#窗体与控件开发 1 窗体1.1 新建窗体1.2 windows程序与窗口的关系1.3 windows程序的事件1.3.1 定义事件与处理事件1.3.2 关联事件1.3.3 Windows窗体对象创建与显示(show与ShowDialog())2 控件与容器2.1 常用容器2.1.1 Groupbox2.1.2 Pannel2.1.…

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具(AI IDE)——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro,支持切换满血版DeepSeek R1&V3, 可以帮助各阶段开发者与AI流畅协作,更快、更高质量地完…

ubuntu 20.04下ZEDmini安装使用

提前安装好显卡驱动和cuda,如果没有安装可以参考我的这两篇文章进行安装: ubuntu20.04配置YOLOV5(非虚拟机)_ubuntu20.04安装yolov5-CSDN博客 ubuntu20.04安装显卡驱动及问题总结_乌班图里怎么备份显卡驱动-CSDN博客 还需要提前…

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距

一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…

Spring(1)——mvc概念,部分常用注解

1、什么是Spring Web MVC? Spring MVC 是一种基于 Java 的实现了 MVC(Model-View-Controller,模型 - 视图 - 控制器)设计模式的 Web 应用框架,它是 Spring 框架的一个重要组成部分,用于构建 Web 应用程序。…

PY32MD320单片机 QFN32封装,内置多功能三相 NN 型预驱。

PY32MD320单片机是普冉半导体的一款电机专用MCU,芯片采用了高性能的 32 位 ARM Cortex-M0 内核,主要用于电机控制。PY32MD320嵌入高达 64 KB Flash 和 8 KB SRAM 存储器,最高工作频率 48 MHz。PY32MD320单片机的工作温度范围为 -40 ~ 105 ℃&…

《OkHttp:工作原理 拦截器链深度解析》

目录 一、OKHttp 的基本使用 1. 添加依赖 2. 发起 HTTP 请求 3. 拦截器(Interceptor) 4. 高级配置 二、OKHttp 核心原理 1. 责任链模式(Interceptor Chain) 2. 连接池(ConnectionPool) 3. 请求调度…

HeidiSQL:一款免费的数据库管理工具

HeidiSQL 是一款免费的图形化数据库管理工具,支持 MySQL、MariaDB、Microsoft SQL、PostgreSQL、SQLite、Interbase 以及 Firebird,目前只能在 Windows 平台使用。 HeidiSQL 的核心功能包括: 免费且开源,所有功能都可以直接使用。…