将Jenkins部署在kubernetes集群中

【将Jenkins部署在kubernetes集群中】学向勤中得,萤窗万卷书。这篇文章主要讲述将Jenkins部署在kubernetes集群中相关的知识,希望能为你提供帮助。

  大家好!我是李大白!
    本篇文章分享在kubernetes集群中部署Jenkins服务。


目录
  • 前言
  • 环境说明
  • 1、kubernetes集群
  • 2、数据持久化
  • 使用NFS提供数据持久的配置
  • 1)安装NFS服务端
  • 2)创建共享目录
  • 3)安装客户端驱动
  • 创建命名空间
  • 创建pv
  • 创建PVC
  • 创建Sa账号并做RBAC授权
  • 通过 deployment 部署 jenkins
  • 查看资源状态
  • 登录Jenkins
  • 1、浏览器访问Jenkins
  • 2、管理员密码获取
  • 3、重启Jenkins
  • Jenkins配置
  • 1)安装kubernetes插件
  • 2)安装blueocean 插件
  • 3)配置Jenkins连接到K8S集群
  • 精品文章推荐


前言本文主要介绍在kubernetes集群中部署Jenkins的详细操作步骤。


环境说明1、kubernetes集群
我的kubernetes集群是1master2node的集群
[root@sc-master1 ~]# kubectl get nodes
NAMESTATUSROLESAGEVERSION
sc-master1Readycontrol-plane,master23dv1.20.6
sc-node1Ready< none> 23dv1.20.6
sc-node2Ready< none> 13dv1.20.6


2、数据持久化
本处我使用了NFS来持久化存储Jenkins的数据,NFS的搭建请看我前面的文章:??kubernetes使用NFS作为存储的操作步骤(保姆式分享)??
  • NFS服务端地址:192.168.2.212
  • 共享目录:  /data/nfs/jenkins
使用NFS提供数据持久的配置1)安装NFS服务端
[root@nfs-212 ~]# yuminstall -ynfs-utils
[root@nfs-212 ~]# systemctl start nfs
[root@nfs-212 ~]# systemctl enable nfs
[root@nfs-212 ~]# systemctl status nfs
[root@nfs-212 ~]# chkconfig nfs on//设置为开机自启
注意:正在将请求转发到“systemctl enable nfs.service”。

2)创建共享目录
[root@nfs-212 ~]#mkdir-p/data/nfs/efk#创建共享目录
[root@nfs-212 ~]#cat /etc/exports
/data/nfs/jenkins192.168.2.0/24(rw,no_root_squash)
[root@nfs-212 ~]#exportfs -arv//使配置文件生效
exporting 192.168.2.0/24:/data/nfs/jenkins
[root@nfs-212 ~]#systemctl restart nfs
[root@nfs-212 ~]#showmount-e localhost//检查共享目录信息
Export list for localhost:
/data/nfs/jenkins192.168.2.0/24 .

3)安装客户端驱动
客户端即是kubernetes集群中的每个节点,每个节点都需要本步骤操作。
[root@sc-node2 ~]#yum -y install nfs-utils
[root@sc-node2 ~]#systemctl start nfs-utils
[root@sc-node2 ~]# systemctl enable nfs-utils
[root@sc-node2 ~]# systemctl statusnfs-utils



创建命名空间单独创建一个命名空间,将Jenkins相关的资源都放到该命名空间下,方便维护和管理。
[root@sc-master1 ~]#kubectl create namespace jenkins-k8s
[root@sc-master1 ~]#kubectl get ns
NAMESTATUSAGE
jenkins-k8sActive15s
...

.
创建pv
  • 编写资源清单文件
[root@sc-master1 ~]#vim jenkins-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv
spec:
capacity:
storage: 10Gi# 大小
accessModes:# 访问模式
- ReadWriteMany# 多路读写
nfs:
server: 192.168.2.212#NFS服务器地址
path: /data/nfs/jenkins# 共享目录

  • 创建资源对象
[root@sc-master1 ~]#kubectl apply-fjenkins-pv.yaml



创建PVC
[root@sc-master1 ~]#vim jenkins-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jenkins-pvc
namespace: jenkins-k8s
spec:
resources:
requests:
storage: 10Gi
accessModes:
- ReadWriteMany
[root@sc-master1 ~]#kubectl apply -f jenkins-pvc.yaml
[root@sc-master1 ~]#kubectl -n jenkins-k8s get pvc
NAMESTATUSVOLUMECAPACITYACCESS MODESSTORAGECLASSAGE
jenkins-pvcBoundjenkins-pv10GiRWX3m3s

可以看到,创建的PVC跟PV已经成功绑定!


创建Sa账号并做RBAC授权Jenkins使用该sa账号访问kubernetes集群中的资源,需要对该sa账号授予相关的权限。
[root@sc-master1 ~]#vim jenkins-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins-sa# sa名称
namespace: jenkins-k8s
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins-clusterrole
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: jenkins-sa
namespace: jenkins-k8s

  •   更新资源对象
[root@sc-master1 ~]#kubectl apply-f jenkins-sa.yaml
[root@sc-master1 ~]#kubectl -n jenkins-k8s get sa
NAMESECRETSAGE
default115d
jenkins-sa112d

通过 deployment 部署 jenkins
  • 编写资源清单文件
[root@sc-master1 Jenkins]# vim jenkins-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins-k8s
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
serviceAccount: jenkins-sa
containers:
- name: jenkins
image: jenkins/jenkins:2.297-alpine
imagePullPolicy: IfNotPresent
ports:
- name: web
containerPort: 8080
protocol: TCP
- name: agent
containerPort: 50000
protocol: TCP
resources:
limits:
cpu: 1000m
memory: 1Gi
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-pvc
# 创建Jenkins服务
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-svc
namespace: jenkins-k8s
labels:
app: jenkins
spec:
selector:
app: jenkins
type: NodePort# 使用NodePort类型访问Services服务
ports:
- name: web
port: 8080# service端口
targetPort: web
nodePort: 30003# 映射到主机的端口

  • 更新资源对象
[root@sc-master1 Jenkins]# kubectl apply -f jenkins-deploy.yaml

查看资源状态
[root@sc-master1 Jenkins]# kubectl -n jenkins-k8s get pod -owide
NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATED NODEREADINESS GATES
jenkins-56b9748f8b-ct5th1/1Running612s10.244.119.230sc-node1< none> < none>

[root@sc-master1 Jenkins]# kubectl -n jenkins-k8s get services
NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
jenkins-svcNodePort10.103.27.77< none> 8080:30003/TCP12d




登录Jenkins1、浏览器访问Jenkins
浏览器输入:

2、管理员密码获取
nfs服务端jenkins-home/secrets/initialAdminPassword文件内容。
或者进入到容器中查看。登录后需要修改密码。


选择“安装推荐的插件”在线安装推荐的插件。
网络有时不稳定会安装失败,重复安装即可。



3、重启Jenkins
浏览器输入:http://192.168.2.11:30003/restart

点击“是”完成重启

Jenkins配置1)安装kubernetes插件
系统管理——> 系统配置——Cloud(云)——kubernetes





安装插件后还需要重启Jenkins服务。重启方法见前面。
2)安装blueocean 插件
Manage Jnekins------> 插件管理------> 可选插件------> 搜索 blueocean
详细操作参考 在Jenkins中安装kubernetes插件。


3)配置Jenkins连接到K8S集群
【系统管理】--> 【系统配置】--> 【Cloud】:






l  添加Pod模板



l  添加容器

l  添加卷



l  添加SA账号

然后点击【应用】



精品文章推荐
  • ??kubernetes使用NFS作为存储的操作步骤(保姆式分享)??
  • ??harbor密码丢失,忘记Harbor密码???
  • ??Helm部署Harbor,实现高可用的镜像仓库(超详细分享)~后附踩坑记录??
  • ??Harbor配置优化,配置文件深度解析!??
  • ??Prometheus监控Harbor实战(全网首发)??
  •   ???企业内网如何搭建安全的Harbor服务?(超详细)??
  • ??Harbor镜像仓库漏洞扫描_如何检测你的镜像是否安全???
  • ??k8s节点如何从Harbor中拉取镜像的?镜像拉取凭证的配置??
  • ??Harbor一键部署——初学者如何快速了解它???
  • ??【Harbor故障排查篇】docker login连接被拒绝???
  • ??  一图看懂pod亲和性调度策略,再也不担心学不废了!??
  • ??如何维护好公司的Harbor服务,看完这篇小白也会维护Harbor了!??
  ?








    推荐阅读