K8s Pod挂载NFS共享失败求助:rpc.statd未运行报错
解决K8s Pod挂载NFS时rpc.statd未运行的报错
核心原因
K8s的NFS卷挂载操作由节点操作系统负责处理,而非容器内部进程。因此在容器内启动rpcbind无法解决问题,必须确保每个K8s节点上的rpcbind和rpc-statd服务正常运行。
解决方案
方案1:在所有K8s节点上部署rpc服务
根据节点的操作系统类型执行以下操作:
- Debian/Ubuntu系统:
sudo apt-get update && sudo apt-get install -y rpcbind nfs-common sudo systemctl enable --now rpcbind statd - RHEL/CentOS/Rocky系统:
sudo yum install -y rpcbind nfs-utils sudo systemctl enable --now rpcbind nfs-lock
方案2:添加NFS挂载参数绕过远程锁(无节点权限时使用)
如果是托管K8s集群无法操作节点,可以修改Deployment的NFS卷配置,添加nolock选项禁用远程锁:
kind: Deployment apiVersion: apps/v1 metadata: name: nfs-client-provisioner spec: selector: matchLabels: app: nfs-client-provisioner replicas: 1 strategy: type: Recreate template: metadata: labels: app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: nfs-provisioner - name: NFS_SERVER value: <NFS IP> - name: NFS_PATH value: /filesharepath volumes: - name: nfs-client-root nfs: server: <NFS IP> path: /filesharepath # 添加nolock挂载选项 mountOptions: - nolock
注意:
nolock会让文件锁仅在容器本地生效,多Pod并发读写同一NFS文件时可能引发数据一致性问题,仅适合单Pod或无并发写的场景。
验证操作
- 在节点上执行
rpcinfo -p <NFS IP>,确认能查询到NFS相关的RPC服务 - 重启Deployment使配置生效:
kubectl rollout restart deployment nfs-client-provisioner
内容的提问来源于stack exchange,提问作者Sujith Samuel
相关产品推荐
相关产品推荐

