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. ...
随机推荐
- HCNP Routing&Switching之BGP路由宣告
前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...
- python反序列化1(__reduce__)
part1:不求甚解的复现 对于服务端源码: 编写恶意序列化对象生成程序: 将生成的恶意序列化对象输入服务端user,使其执行系统命令.(上面那俩其实都行) part2:原理解释 b'xxx'是 ...
- Java:HashMap类小记
Java:HashMap类小记 对 Java 中的 HashMap类,做一个微不足道的小小小小记 概述 HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复 ...
- python的random模块生成随机数
python的random函数 random.random() 生成0-1之间的随机数 random.uniform(a,b)生成a,b之间的浮点数 random.randint(a,b)生成a,b之 ...
- WPF PropertyChanged实现子属性通知
今天用WPF的View绑定了ViewModel的一个属性类,结果在属性类的子属性修改时,没有通知到UI. 如有要显示一个学生信息,采用WPF MVVM的模式,则前端代码 <StackPanel& ...
- .Net(c#)汉字和Unicode编码互相转换实例
{"name": "\u676d\u5dde", "href": "www.baidu.com"} 经常遇到这样内容的j ...
- Vue&Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理
关于我在Winform框架.混合框架.Bootstrap开发框架中的简易审批性工作流模块,我写过不少文章,有兴趣可以参考<工作流模块>的随笔进行了解,本篇随笔在完成了Vue&Ele ...
- 某企业桌面虚拟化项目-Citrix虚拟桌面解决方案
xxx桌面虚拟化项目Citrix解决方案 xxx桌面虚拟化项目 Citrix解决方案 1 项目背景 秉承"尊重个性.创造价值.贡献于社会"的企业理念和开拓创新的精神,xxx所制造. ...
- robot_framewok自动化测试--(6)Collections 库
Collections 库 Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 在使用之前需要在测试套件(项目)中添加: 1. ...
- 解决虚拟机安装linux系统无法全屏问题 & vmtools安装
修改设置 1) 如下图右单击虚拟机名,选择[settings-],调出虚拟机设置界面. 2) 在设置界面选择[hardware]->[CD/DVD2(IDE)]->[Connection] ...