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
已知信息
- IT存储管理员提供的外部NFS挂载路径:
192.168.72.136:/nfs-volume - 已在master和节点安装包:
apt install nfs-common apt install cifs-utils apt install nfs-kernel-server - 已在master和worker主机
/etc/fstab添加配置并成功挂载:
尝试修改为192.168.72.136:/nfs-volume /mnt/nfs/stg/ nfs defaults 0 0192.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时必须使用服务器端的导出路径,而非本地挂载点路径。
修正步骤
- 修改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 - 删除原有PV并重新创建:
kubectl delete pv pv-nfs kubectl apply -f pv-nfs.yaml - 删除原有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
相关产品推荐
相关产品推荐

