8.3 k8s部署jenkins,通过pv/pvc结合NFS服务器持久化
1.制作jenkins docker镜像
1.1 下载jenkins
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.303.2/jenkins.war
1.2 准备JDK(版本>=1.8)
jdk-8u192-linux-x64.tar.gz
1.3 编写Dockerfile
基础镜像使用的是centos7
FROM 192.168.1.110/base/centos:7
LABEL maintainer="yanql<yanqianling@faxuan.net>"
ADD jdk-8u192-linux-x64.tar.gz /usr/local/
ADD jenkins.war /apps/jenkins/
ADD run_jenkins.sh /usr/bin/
ENV JAVA_HOME /usr/local/jdk1.8.0_192
ENV PATH ${PATH}:${JAVA_HOME}/bin
EXPOSE 8080
CMD ["/usr/bin/run_jenkins.sh"]
1.4 run_jenkins.sh脚本
#!/bin/sh
cd /apps/jenkins && java -server -Xms1024m -Xmx1024m -Xss512k -jar jenkins-2.303.2.war --webroot=/apps/jenkins/jenkis-data --httpPort=8080
tail -f /etc/hosts
1.5 生成镜像
docker build -t 192.168.1.110/web/jenkins-2.303.2:v20211023-1211 .
1.6 测试镜像
docker run -d -p 8080:8080 192.168.1.110/web/jenkins-2.303.2:v20211023-1211
浏览器访问测试

1.7 将镜像上传至本地harbor
docker push 192.168.1.110/web/jenkins-2.303.2:v20211023-1211
2.为jenkins数据存储持久化部署创建PV/PVC
2.1 nfs 创建相关目录
jenkins会使用一下2个目录存储数据 '/apps/jenkins/jenkis-data','/root/.jenkins'
mkdir -p /data/k8s-data/jenkins/datadir-pv
mkdir -p /data/k8s-data/jenkins/root-datadir-pv
2.2 编写pv/pvc yaml
kind: PersistentVolume
metadata:
name: jenkins-datadir-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.2.10
path: /data/k8s-data/jenkins/datadir-pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-root-datadir-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.2.10
path: /data/k8s-data/jenkins/root-datadir-pv
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-datadir-pvc
namespace: yan-test
spec:
accessModes:
- ReadWriteOnce
volumeName: jenkins-datadir-pv
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-root-datadir-pvc
namespace: yan-test
spec:
accessModes:
- ReadWriteOnce
volumeName: jenkins-root-datadir-pv
resources:
requests:
storage: 10Gi
2.3 创建pv/pvc并查看
# 创建
kubectl apply -f pv/jenkin-pv.yaml
# 查看
root@k8-deploy:~/k8s-yaml/jenkins/yaml/pv# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
jenkins-datadir-pv 20Gi RWO Retain Bound yan-test/jenkins-datadir-pvc 3d1h
jenkins-root-datadir-pv 20Gi RWO Retain Bound yan-test/jenkins-root-datadir-pvc 3d1h
root@k8-deploy:~/k8s-yaml/jenkins/yaml/pv# kubectl get pvc -n yan-test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jenkins-datadir-pvc Bound jenkins-datadir-pv 20Gi RWO 3d1h
jenkins-root-datadir-pvc Bound jenkins-root-datadir-pv 20Gi RWO 3d1h
3.部署jenkins服务器
3.1 编写deployment,svc yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: yan-test
spec:
type: NodePort
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
nodePort: 38080
selector:
app: jenkins
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: yan-test
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: server
image: 192.168.1.110/web/jenkins-2.303.2:v20211023-1211
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
volumeMounts:
- mountPath: "/apps/jenkins/jenkis-data"
name: jenkins-datadir-vl
- mountPath: "/root/.jenkins"
name: jenkins-root-datadir-vl
volumes:
- name: jenkins-datadir-vl
persistentVolumeClaim:
claimName: jenkins-datadir-pvc
- name: jenkins-root-datadir-vl
persistentVolumeClaim:
claimName: jenkins-root-datadir-pvc
3.2 创建
root@k8-deploy:~/k8s-yaml/jenkins/yaml# kubectl apply -f jenkins.yaml
service/jenkins created
deployment.apps/jenkins created
3.2 查看验证
# kubectl describe pod jenkins-7f4c78cdd5-48hb8 -n yan-test
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 45s default-scheduler Successfully assigned yan-test/jenkins-7f4c78cdd5-48hb8 to 192.168.2.18
Normal Pulling 44s kubelet Pulling image "192.168.1.110/web/jenkins-2.303.2:v20211023-1211"
Normal Pulled 16s kubelet Successfully pulled image "192.168.1.110/web/jenkins-2.303.2:v20211023-1211" in 28.065811801s
Normal Created 13s kubelet Created container server
Normal Started 12s kubelet Started container server
root@k8-deploy:~/k8s-yaml/jenkins/yaml# kubectl get pod -n yan-test
NAME READY STATUS RESTARTS AGE
jenkins-7f4c78cdd5-48hb8 1/1 Running 0 56s
root@k8-deploy:~/k8s-yaml/jenkins/yaml# kubectl exec jenkins-7f4c78cdd5-48hb8 -n yan-test -it -- bash
[root@jenkins-7f4c78cdd5-48hb8 /]# df -h
Filesystem Size Used Avail Use% Mounted on
...
192.168.2.10:/data/k8s-data/jenkins/root-datadir-pv 98G 22G 72G 24% /root/.jenkins
192.168.2.10:/data/k8s-data/jenkins/datadir-pv 98G 22G 72G 24% /apps/jenkins/jenkis-data
...
4.验证测试jenkins服务
4.1 查看登录密码

root@k8-deploy:~/k8s-yaml/jenkins/yaml# kubectl exec jenkins-7f4c78cdd5-48hb8 -n yan-test -it -- bash
[root@jenkins-7f4c78cdd5-48hb8 /]# cat /root/.jenkins/secrets/initialAdminPassword
3cef3596ebdb4af592f331383023897
4.2 重启jenkins是初始化安装的插件生效
因为数据都放在了nfs存储上,所以重建jenkins不会导致数据丢失。
kubectl delete -f jenkins.yaml
kubectl apply -f jenkins.yaml
4.3如果密码已更改,但有忘记admin密码了可以参考。
https://www.cnblogs.com/aerospace191/p/14063088.html
8.3 k8s部署jenkins,通过pv/pvc结合NFS服务器持久化的更多相关文章
- 8.2 k8s 基于StatefulSet运行mysql 一主多从 ,数据通过pv/pvc结合NFS服务器持久化
1.准备mysql和xtrabackup镜像 下载mysql官方镜像并上传到本地harbor docker pull mysql:5.7 docker tag m ysql:5.7 192.168.1 ...
- k8s系列---存储卷pv/pvc。configMap/secert
因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...
- k8s集群,使用pvc方式实现数据持久化存储
环境: 系统 华为openEulerOS(CentOS7) k8s版本 1.17.3 master 192.168.1.244 node1 192.168.1.245 介绍: 在Kubernetes中 ...
- K8S系列第九篇(持久化存储,emptyDir、hostPath、PV/PVC)
更多k8s内容,请关注威信公众好:新猿技术生态圈 一.数据持久化 Pod是由容器组成的,而容器宕机或停止之后,数据就随之丢了,那么这也就意味着我们在做Kubernetes集群的时候就不得不考虑存储的问 ...
- k8s-数据持久化存储卷,nfs,pv/pvc
目录 数据持久化-储存卷 官方文档 存储卷类型 1.emptyDir 2.hostpath 3.pv/pvc(推荐使用) nfs官方文档 安装测试nfs pv/pvc管理nfs 官方文档 pv/pvc ...
- k8s的持久化存储PV&&PVC
1.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volu ...
- 6.k8s.存储Volume.PV.PVC
#Volume Volume 解决数据持久化和容器间共享数据 Kubernetes支持几十种类型的后端存储卷 #hostPath挂载实例,挂载Node节点/tmp/test-volume目录到容器/t ...
- kubernetes(14):k8s基于NFS部署storageclass实现pv自动供给
k8s基于NFS部署storageclass实现pv自动供给 https://www.cnblogs.com/Smbands/p/11059843.html https://www.jianshu.c ...
- 8.1 k8s使用PV/PVC做数据持久化运行redis服务,数据保存至NFS
1.制作redis docker镜像 1.1 准备alpine基础镜像 # 下载 docker pull alpine:3.13 # 更改tag docker tag alpine:3.13 192. ...
随机推荐
- Kali安装OWASP
我是2019版的kali,里面并没有自带OWASP工具,因为OWASP不再更新的因素,所以新版kali将它移除了 安装OWASP apt-get install zaproxy #以下都是安装软件时 ...
- 分割迭代器Spliterator源码文档翻译
前言 身体是革命的本钱,不舒服了2周,现在好点了. 学习JDK8的Stream,Spliterator这个分割迭代器是必须要重视的. Notes:下方蓝色文字是自己的翻译(如果有问题请指正).黑色文字 ...
- 天脉2(ACoreOS653)操作系统学习01
天脉2(ACoreOS653)操作系统学习01 由于我的毕业设计涉及相关嵌入式操作系统,故最近学了学天脉2操作系统. 一.ARINC653标准 1.ARINC653标准是什么? ARINC 653 : ...
- [no_code][Beta] 中期组内总结
$( "#cnblogs_post_body" ).catalog() 目前scrum meeting beta阶段目前共7次.在alpha阶段我们博客发布时间比较匆忙,是扣分项, ...
- 2019OO第三单元作业总结
OO第三单元的作业主题是JML规格化设计,作业以图及图的最短路径相关计算为载体,体现接口的规格化设计. ------------------------------------------------ ...
- 贪心-Saruman‘s Army POJ - 3069
万恶之源 目录 题意 思路 贪心的原则是什么呢? 错解 正解 代码实现 书上的代码 我的代码 比较一下 问题 题意 给定若干个点的坐标,与范围R.每个点可以选择是否标记,标记后这个点的左右范围R内的所 ...
- 数组中只出现过一次的数字 牛客网 剑指Offer
数组中只出现过一次的数字 牛客网 剑指Offer 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. def FindNumsAppearOnce ...
- git安装心得
每天码代码打卡任务,老师需要我们提交链接,这就需要我们把自己打的代码文件上传到GitHub上来,以此获得链接. 自己是一个新人,安装git也是什么都不懂(跟着网上的教程也总是能出错) 安装正常操作:h ...
- C++ 指针的引用和指向引用的指针
指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形 ...
- 子查询 & 联合查询
子查询 嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert.update.delete.select等,一般select作为外层语句较多.外面如果为select语句, ...