在Kubernetes集群运行Java单体服务Jenkins并实现数据持久化
1.在Kubernetes集群运行Java单体服务Jenkins并实现数据持久化
在k8s集群中基于java命令,通过war包或jar包运行单体服务,
本次以jenkins.war包部署为例,jenkins的数据保存至外部存储(NFS或者PVC),
其他java应用可结合实际需求考虑是否需要将数据保存至外部存储。
1.1.镜像目录文件
.
├── Dockerfile
├── build-command.sh
├── docker-entrypoint.sh
├── jenkins-2.319.2.war
├── jenkins-2.426.3.war
└── jenkins-2.541.1.war
1 directory, 6 files
1.2.构建镜像
# bash build-command.sh
即将开始就像构建,请稍等!
3
2
1
[+] Building 418.1s (10/10)
=> [internal] load build definition from Dockerfile 0.1s
[+] Building 419.6s (10/10) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 743B 0.1s
=> [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk 0.6s
=> [auth] pub-images/sapmachine:pull token for harbor.zhou-kai.com 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/4] FROM harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04@sha2 1.1s
=> => resolve harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04@sha2 0.5s
=> [internal] load build context 21.5s
=> => transferring context: 96.28MB 21.4s
=> [2/4] RUN apt update && apt install git maven -y 66.2s
=> [3/4] ADD jenkins-2.541.1.war /apps/jenkins/jenkins.war 2.4s
=> [4/4] ADD docker-entrypoint.sh /usr/bin/ 0.3s
=> exporting to docker image format 346.6s
=> => exporting layers 54.8s
=> => exporting manifest sha256:67c4e5f41c268f1e7d0ee5086a06f0eeec1c293ac3ccffdc4a7e5 0.0s
=> => exporting config sha256:d12e80f12118f159556e8c8408320ea7221d3574a2baec23d894aa4 0.0sf => => sending tarball 291.6s
Loaded image: harbor.zhou-kai.com/myserver/jenkins:v2.541.1
即将开始镜像上传,请稍等!
3
2
1
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:67c4e5f41c268f1e7d0ee5086a06f0eeec1c293ac3ccffdc4a7e59ff225c36d3)
manifest-sha256:67c4e5f41c268f1e7d0ee5086a06f0eeec1c293ac3ccffdc4a7e59ff225c36d3: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:52f949ffef456bd9e79b99409eb59d11d1155dbc5269c76d1442ed84cfd32650: done |++++++++++++++++++++++++++++++++++++++|
config-sha256:d12e80f12118f159556e8c8408320ea7221d3574a2baec23d894aa408325a36a: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:a3629ac5b9f4680dc2032439ff2354e73b06aecc2e68f0035a2d7c001c8b4114: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:231628878931cb2e916a9a678eb219b283e31fcf07667b01271007b0ac0f8193: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:c61640bd1195b51474d9f4ecf1cc528ec1a76c63f53b823d055072a3bfcae0b3: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:950e179158c76ff0cbfde2044f9d9f9cb66401c9ea4a88885f9f9a6053a6ccbc: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:9076c6215f9e7d1dc8e5d2c3a037b983a98bbc3b7ca6a570408372b75aa4f168: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:ad046dfead5dcf7bfc5c7d0ea3a4a092c32914802acfdb3487562e149fe859a8: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:dfe12aee1cd9fa6bb4b0f1669459b402e6e29bb0e00f264d5fcd5780daa055bf: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:31a957acce2ee3aa7ade8e1087e3e74b0b430b71f478fb8b715b3acedf4c5bd8: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:c34bf244863291dad611edb297af9f587148bebae1fe08852087c7d574438c22: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:0e518ba6a2e13cbf08e1f3e5589a269dc04eb25e7fd47454c7b34c1124de7d91: done |++++++++++++++++++++++++++++++++++++++|
elapsed: 36.8s total: 641.9 (17.4 MiB/s)
镜像上传成功!
1.3.验证镜像
nerdctl run -it --rm -p 8088:8080 harbor.zhou-kai.com/myserver/jenkins:v2.541.1
1.4.创建PV/PVC
需要两个PVC,一个保存jenkins的数据,一个保存.jenkins的数据。
(注意在NFS服务器准备好对应目录)
# cat jenkins-persistentvolume.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-datadir-pv
namespace: myserver
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
server: 172.31.7.109
path: /data/k8sdata/myserver/jenkins-data
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-root-datadir-pv
namespace: myserver
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
server: 172.31.7.109
path: /data/k8sdata/myserver/jenkins-root-data
# cat jenkins-persistentvolumeclaim.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-datadir-pvc
namespace: myserver
spec:
volumeName: jenkins-datadir-pv
#storageClassName: "myserver-nfs-storageclass"
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 80Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-root-data-pvc
namespace: myserver
spec:
volumeName: jenkins-root-datadir-pv
#storageClassName: "myserver-nfs-storageclass"
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 80Gi
1.5.验证PV/PVC
# kubectl -n myserver get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
jenkins-datadir-pv 100Gi RWO Retain Bound myserver/jenkins-datadir-pvc <unset> 12m
jenkins-root-datadir-pv 100Gi RWO Retain Bound myserver/jenkins-root-data-pvc <unset>
# kubectl -n myserver get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
jenkins-datadir-pvc Bound jenkins-datadir-pv 100Gi RWO <unset> 3m21s
jenkins-root-data-pvc Bound jenkins-root-datadir-pv 100Gi RWO <unset> 3m21s
1.6.Jenkins YAML文件
# tree
.
├── 1.jenkins-deployment.yaml
├── 2.jenkins-service.yaml
└── pv
├── jenkins-persistentvolume.yaml
└── jenkins-persistentvolumeclaim.yaml
2 directories, 4 files
1.7.运行Jenkins服务
root@master01:/opt/k8s-data/yaml/myserver/jenkins# kubectl apply -f 1.jenkins-deployment.yaml
deployment.apps/myserver-jenkins-deployment created
root@master01:/opt/k8s-data/yaml/myserver/jenkins# kubectl apply -f 2.jenkins-service.yaml
service/myserver-jenkins-service created
1.8.验证pod
# kubectl -n myserver get pod
NAME READY STATUS RESTARTS AGE
dns-debug 1/1 Running 52 (3m4s ago) 2d23h
myserver-jenkins-deployment-7ff8dfd7bc-nxcj9 1/1 Running 0 74s
1.8.验证Web访问Jenkins服务


浙公网安备 33010602011771号