云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > k8s部署Jenkins

在 k8s 中部署Jenkins的实践指南(最新推荐)

作者:明明跟你说过

本文介绍了在Kubernetes(K8s)中部署Jenkins的方法和步骤,包括准备K8s集群、选择Jenkins镜像、创建存储资源、账号授权、部署Jenkins、创建Service以及访问测试,Jenkins在K8s中的部署可以实现动态资源管理、提高可靠性和容错能力、快速响应变化和统一环境等优势

一、引言

1、Jenkins简介

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

Jenkins的主要特点包括:

2、k8s简介

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

特性

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上提供了多个版本标签,以便用户选择。以下是一些常见的版本标签:

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

创建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端口,如果显示下面的页面,证明部署成功

到此这篇关于在 k8s 中部署Jenkins的实践指南的文章就介绍到这了,更多相关k8s部署Jenkins内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文