查看k8s下Jenkins的插件在宿主机的路径

配置文件如下:

复制代码
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 查看

如何一步步找到插件文件在宿主机上的真实位置(推荐操作流程)

  1. 先找到对应的 PVC

    kubectl get pvc -n devops | grep jenkins # 通常会看到类似: # data-jenkins-statefulset-0 Bound pvc-xxx-xxx 35Gi RWO nfs-client 2d

  2. 查看 PVC 绑定的 PV

    kubectl describe pvc data-jenkins-statefulset-0 -n devops

重点看这几行:

Volume: pvc-3a4b5c6d-.... VolumeMounts: /var/jenkins_home from data (rw)

  1. 查看 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-...

  1. 登录到 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 分钟内就能定位到具体目录。

建议把这个路径记录下来,后续备份、迁移、排查插件问题都会非常方便。

相关推荐
lichenyang45316 小时前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang45316 小时前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang45316 小时前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
运维开发故事3 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson5 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生6 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭6 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美7 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵7 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程