配置文件如下:
StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: jenkins-statefulset
namespace: devops
spec:
serviceName: "jenkins-hl"
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
nodeSelector:
devops: "true"
serviceAccount: jenkins-sa
volumes:
- name: volume-localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
containers:
- name: jenkins-container
image: jenkins/jenkins:2.492.3-lts
imagePullPolicy: IfNotPresent
securityContext: # 添加参数启用容器root权限
privileged: true
runAsUser: 0 # root身份运行
env:
- name: JAVA_OPTS
value: "-Xms2048m -Xmx2048m -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
ports:
- name: http
containerPort: 8080
- name: agent
containerPort: 50000 #jenkins通讯需要设置8080,50000两个端口
resources:
limits:
cpu: 500m
memory: 2Gi
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: data
mountPath: /var/jenkins_home
- name: volume-localtime
mountPath: /etc/localtime
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "nfs-client"
resources:
requests:
storage: 35Gi
怎么查看宿主机存放Jenkins插件所在的地址?
在你提供的这个 StatefulSet 配置中,Jenkins 下载的插件、jobs 配置、用户数据等全部内容都存储在下面这个挂载路径对应的持久卷里:
volumeMounts: - name: data mountPath: /var/jenkins_home
也就是说:
容器内路径 :/var/jenkins_home
实际存放位置 :由 volumeClaimTemplates 动态创建的 PVC(PersistentVolumeClaim)
插件等文件最终在宿主机上的位置
最终位置取决于你集群使用的 StorageClass nfs-client 具体把 PV 绑定到了哪个 NFS 共享目录。
大多数情况下,使用 nfs-client StorageClass 的实际文件位置有以下几种常见情况(按概率从高到低排序):
| 序号 | 存储方式 | 宿主机大概率路径示例 | 如何确认具体路径 |
|---|---|---|---|
| 1 | 集群内统一 NFS 服务器 | /data/nfs/jenkins/data-jenkins-statefulset-0-pvc-xxxxx |
最常见方式,看 NFS 服务器导出目录 |
| 2 | nfs-subdir-external-provisioner | /nfs-data/devops-data-jenkins-statefulset-0-pvc-xxxxx |
看 provisioner 命名规则(通常带 namespace+名称) |
| 3 | 每个节点本地目录(较少见) | 某个节点上的 /mnt/nfs/jenkins/... |
看节点上 nfs 挂载点 |
| 4 | Longhorn / Rook Ceph 等分布式存储 | 基本看不到真实路径,通常在 Longhorn UI 或 Ceph 里查看 | 通过存储系统 UI 查看 |
如何一步步找到插件文件在宿主机上的真实位置(推荐操作流程)
-
先找到对应的 PVC
kubectl get pvc -n devops | grep jenkins # 通常会看到类似: # data-jenkins-statefulset-0 Bound pvc-xxx-xxx 35Gi RWO nfs-client 2d
-
查看 PVC 绑定的 PV
kubectl describe pvc data-jenkins-statefulset-0 -n devops
重点看这几行:
Volume: pvc-3a4b5c6d-.... VolumeMounts: /var/jenkins_home from data (rw)
-
查看 PV 的详细信息(最关键一步)
kubectl describe pv pvc-3a4b5c6d-... # 把上面看到的 pv 名字填进来
你会看到类似这样的信息:
NFS: Server: 192.168.10.200 Path: /kubernetes/nfs/devops/data-jenkins-statefulset-0-pvc-3a4b5c6d-...
此时你就已经找到答案了: 宿主机上(或 NFS 服务器上)的真实路径 就是:
/kubernetes/nfs/devops/data-jenkins-statefulset-0-pvc-3a4b5c6d-...
-
登录到 NFS 服务器(或挂载了该 NFS 的节点),直接进入该目录:
cd /kubernetes/nfs/devops/data-jenkins-statefulset-0-pvc-3a4b5c6d-... ls -la # 你会看到熟悉的 jenkins 目录结构 plugins/ jobs/ users/ config.xml hudson.model.UpdateCenter.xml secret.key ...
总结一句话
Jenkins 下载的插件文件在宿主机上的位置 = NFS 服务器(或挂载点)上 PVC 对应的目录
最常见的路径形式为:
/你的NFS导出根目录/命名空间_资源名称_序号_pvc-xxxxx/plugins/
执行上面第 1→2→3 步,你基本 2 分钟内就能定位到具体目录。
建议把这个路径记录下来,后续备份、迁移、排查插件问题都会非常方便。