将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
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
1、浏览器访问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了!
以上是关于将Jenkins部署在kubernetes集群中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jenkins 将 Docker 容器从 Amazon ECR 自动部署到 Kubernetes
Jenkins容器自动化部署与持续集成(Kubernetes)
[系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源