将Jenkins部署在kubernetes集群中

Posted 键客李大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将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 
NAME STATUS ROLES AGE VERSION
sc-master1 Ready control-plane,master 23d v1.20.6
sc-node1 Ready <none> 23d v1.20.6
sc-node2 Ready <none> 13d v1.20.6

将Jenkins部署在kubernetes集群中_Linux

2、数据持久化

本处我使用了NFS来持久化存储Jenkins的数据,NFS的搭建请看我前面的文章:​​kubernetes使用NFS作为存储的操作步骤(保姆式分享)​

  • NFS服务端地址:192.168.2.212
  • 共享目录: /data/nfs/jenkins

使用NFS提供数据持久的配置

1)安装NFS服务端

[root@nfs-212 ~]# yum  install -y  nfs-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/jenkins 192.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/jenkins 192.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 status nfs-utils


创建命名空间

单独创建一个命名空间,将Jenkins相关的资源都放到该命名空间下,方便维护和管理。

[root@sc-master1 ~]#  kubectl create namespace jenkins-k8s
[root@sc-master1 ~]# kubectl get ns
NAME STATUS AGE
jenkins-k8s Active 15s
...

.

创建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  -f  jenkins-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
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jenkins-pvc Bound jenkins-pv 10Gi RWX 3m3s

可以看到,创建的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
NAME SECRETS AGE
default 1 15d
jenkins-sa 1 12d

通过 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
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
jenkins-56b9748f8b-ct5th 1/1 Running 6 12s 10.244.119.230 sc-node1 <none> <none>

[root@sc-master1 Jenkins]# kubectl -n jenkins-k8s get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins-svc NodePort 10.103.27.77 <none> 8080:30003/TCP 12d

将Jenkins部署在kubernetes集群中_Jenkins_02


登录Jenkins

1、浏览器访问Jenkins

浏览器输入:

将Jenkins部署在kubernetes集群中_运维_03

2、管理员密码获取

nfs服务端jenkins-home/secrets/initialAdminPassword文件内容。

或者进入到容器中查看。登录后需要修改密码。

将Jenkins部署在kubernetes集群中_Jenkins_04

将Jenkins部署在kubernetes集群中_运维_05

选择“安装推荐的插件”在线安装推荐的插件。

网络有时不稳定会安装失败,重复安装即可。

将Jenkins部署在kubernetes集群中_Jenkins_06

将Jenkins部署在kubernetes集群中_运维_07

将Jenkins部署在kubernetes集群中_运维_08

3、重启Jenkins

浏览器输入:http://192.168.2.11:30003/restart

将Jenkins部署在kubernetes集群中_kubernetes_09

点击“是”完成重启

将Jenkins部署在kubernetes集群中_运维_10

Jenkins配置

1)安装kubernetes插件

系统管理——>系统配置——Cloud(云)——kubernetes

将Jenkins部署在kubernetes集群中_运维_11

将Jenkins部署在kubernetes集群中_运维_12

将Jenkins部署在kubernetes集群中_kubernetes_13


安装插件后还需要重启Jenkins服务。重启方法见前面。

2)安装blueocean 插件

Manage Jnekins------>插件管理------>可选插件------>搜索 blueocean

详细操作参考 在Jenkins中安装kubernetes插件。


3)配置Jenkins连接到K8S集群

【系统管理】-->【系统配置】-->【Cloud】:

将Jenkins部署在kubernetes集群中_Linux_14

将Jenkins部署在kubernetes集群中_Jenkins_15

将Jenkins部署在kubernetes集群中_运维_16

将Jenkins部署在kubernetes集群中_云原生_17


添加Pod模板

将Jenkins部署在kubernetes集群中_Jenkins_18


添加容器

将Jenkins部署在kubernetes集群中_Jenkins_19

添加卷

将Jenkins部署在kubernetes集群中_云原生_20


添加SA账号

将Jenkins部署在kubernetes集群中_Jenkins_21

然后点击【应用】

将Jenkins部署在kubernetes集群中_运维_22



精品文章推荐

 ​



将Jenkins部署在kubernetes集群中_Linux_23


以上是关于将Jenkins部署在kubernetes集群中的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins-部署到 kubernetes

如何使用 Jenkins 将 Docker 容器从 Amazon ECR 自动部署到 Kubernetes

Jenkins容器自动化部署与持续集成(Kubernetes)

[系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD