You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中基于NFS的存储卷挂载失败问题求助

NFS Persistent Volume挂载失败排查(Jenkins部署在K8s v1.24.7)

环境信息

  • 系统:Ubuntu 18.04.6 LTS
  • Kubernetes版本:v1.24.7
  • 部署应用:Jenkins

报错信息

执行kubectl describe pod jenkins-6786789d5d-m26zw -n jenkins得到如下事件:

Events:
  Type     Reason       Age                  From               Message
  ----     ------       ----                 ----               -------
  Normal   Scheduled    25m                  default-scheduler  Successfully assigned jenkins/jenkins-6786789d5d-m26zw to worker-3
  Warning  FailedMount  5m31s (x2 over 14m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[data], unattached volumes=[kube-api-access-65npd data]: timed out waiting for the condition
  Warning  FailedMount  3m17s (x8 over 23m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[data], unattached volumes=[data kube-api-access-65npd]: timed out waiting for the condition
  Warning  FailedMount  3m6s (x19 over 25m)  kubelet            MountVolume.SetUp failed for volume "pv-nfs" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs -o nfsvers=4.1 192.168.72.136:/mnt/nfs/stg/jenkins /var/lib/kubelet/pods/853c44ed-bf2b-4e6a-b666-c1adab7f7f4b/volumes/kubernetes.io~nfs/pv-nfs
Output: mount.nfs: mounting 192.168.72.136:/mnt/nfs/stg/jenkins failed, reason given by server: No such file or directory

已知信息

  1. IT存储管理员提供的外部NFS挂载路径:192.168.72.136:/nfs-volume
  2. 已在master和节点安装包:
    apt install nfs-common
    apt install cifs-utils
    apt install nfs-kernel-server
    
  3. 已在master和worker主机/etc/fstab添加配置并成功挂载:
    192.168.72.136:/nfs-volume /mnt/nfs/stg/  nfs  defaults 0 0
    
    尝试修改为192.168.72.136:/nfs-volume /mnt/nfs/stg/ nfs rw,hard,intr 0 0后问题依旧。

PV和PVC状态

$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
pv-nfs    100Gi      RWX            Retain           Bound    jenkins/pvc-nfs   nfs                     11s

$ kubectl get pvc -n jenkins
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-nfs   Bound    pv-nfs   100Gi      RWX            nfs            17s

配置YAML

PersistentVolume配置

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
  labels:
    type: pv-nfs
spec:
  storageClassName: nfs
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  mountOptions: 
  - nfsvers=4.0
  nfs:
    server: 192.168.72.136
    path: "/mnt/nfs/stg/jenkins"
    readOnly: false

Deployment配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
  labels:
    app: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      securityContext:
        fsGroup: 0 
        runAsUser: 0
      serviceAccountName: admin
      containers:
      - name: jenkins
        image: jenkins/jenkins:latest
        securityContext:
          privileged: true
          runAsUser: 0
        ports:
        - containerPort: 8080
        volumeMounts:
          - name: data
            mountPath: /var/jenkins_home         
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: pvc-nfs

疑问

NFS服务器上的/mnt/nfs/stg/jenkins目录确实存在,请问哪里配置有误?


问题解决

核心错误在于PV中配置的NFS路径混淆了本地挂载点与NFS服务器导出路径:

你在PV的nfs.path字段写的/mnt/nfs/stg/jenkins是本地节点挂载NFS后的本地路径,而非NFS服务器上实际对外导出的路径。

IT管理员提供的NFS导出路径是192.168.72.136:/nfs-volume,你在本地将其挂载到/mnt/nfs/stg/,所以本地的/mnt/nfs/stg/jenkins对应NFS服务器上的实际路径是/nfs-volume/jenkins,K8s直接挂载NFS时必须使用服务器端的导出路径,而非本地挂载点路径。

修正步骤

  1. 修改PV的YAML配置,将nfs.path改为NFS服务器上的实际路径:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nfs
      labels:
        type: pv-nfs
    spec:
      storageClassName: nfs
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions: 
      - nfsvers=4.0
      nfs:
        server: 192.168.72.136
        path: "/nfs-volume/jenkins"  # 此处修改为NFS服务器上的实际路径
        readOnly: false
    
  2. 删除原有PV并重新创建:
    kubectl delete pv pv-nfs
    kubectl apply -f pv-nfs.yaml
    
  3. 删除原有Jenkins Pod,让Deployment重新创建Pod挂载修正后的PV:
    kubectl delete pod jenkins-6786789d5d-m26zw -n jenkins
    

额外注意事项

  • 确认NFS服务器上的/nfs-volume/jenkins目录存在且权限正确(建议设置为777或匹配Jenkins运行用户的权限,避免后续出现权限问题)。
  • 本地节点的/etc/fstab配置是用于本地挂载测试,K8s挂载NFS时无需依赖该配置,直接使用服务器导出路径即可。

内容的提问来源于stack exchange,提问作者user4948798

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:25:15