如何修复 Kubernetes NFS 挂载错误“no such file or directory”。

5
我正在试着在我部署了其他k8s服务的同一集群中使用NFS存储卷。但是,其中一个使用NFS的服务失败了,并显示以下输出:mount.nfs: mounting nfs.default.svc.cluster.local:/opt/shared-shibboleth-idp failed, reason given by server: No such file or directory

nfs PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: nfs.default.svc.cluster.local # nfs is from svc {{ include "nfs.name" .}}
    path: "/opt/shared-shibboleth-idp"
< p > < code > nfs服务 的描述


  helm git:(ft-helm)  kubectl describe svc nfs
Name:              nfs
Namespace:         default
Labels:            app=nfs
                   chart=nfs-1.0.0
                   heritage=Tiller
Annotations:       <none>
Selector:          role=nfs
Type:              ClusterIP
IP:                10.19.251.72
Port:              mountd  20048/TCP
TargetPort:        20048/TCP
Endpoints:         10.16.1.5:20048
Port:              nfs  2049/TCP
TargetPort:        2049/TCP
Endpoints:         10.16.1.5:2049
Port:              rpcbind  111/TCP
TargetPort:        111/TCP
Endpoints:         10.16.1.5:111

并且 nfs 部署

  helm git:(ft-helm)  kubectl describe replicationcontrollers telling-quoll-nfs
Name:         telling-quoll-nfs
Namespace:    default
Selector:     role=nfs
Labels:       app=nfs
              chart=nfs-1.0.0
              heritage=Tiller
Annotations:  <none>
Replicas:     1 current / 1 desired
Pods Status:  1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  role=nfs
  Containers:
   nfs:
    Image:        k8s.gcr.io/volume-nfs:0.8
    Ports:        20048/TCP, 2049/TCP, 111/TCP
    Host Ports:   0/TCP, 0/TCP, 0/TCP
    Environment:  <none>
    Mounts:
      /exports from nfs (rw)
  Volumes:
   nfs:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nfs-pv-provisioning-demo
    ReadOnly:   false
Events:         <none>

它被用在哪里

volumeMounts:
   # names must match the volume names below
   - name: RELEASE-NAME-shared-shib
     mountPath: "/opt/shared-shibboleth-idp"
;
;
volumes:
  - name: RELEASE-NAME-shared-shib
    persistentVolumeClaim:
       claimName: nfs
;
;

k8s 版本

  helm git:(ft-helm)  kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-20T04:49:16Z", GoVersion:"go1.12.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"13+", GitVersion:"v1.13.7-gke.8", GitCommit:"7d3d6f113e933ed1b44b78dff4baf649258415e5", GitTreeState:"clean", BuildDate:"2019-06-19T16:37:16Z", GoVersion:"go1.11.5b4", Compiler:"gc", Platform:"linux/amd64"}

3
有时候你可能需要手动创建文件夹或目录。 - damitj07
请确认 /opt/shared-shibboleth-idp 目录在您的 NFS 上存在并且可以访问。 - Patrick W
@PatrickW /opt 目录是存在的,但是 shared-shibboleth-idp 目录不存在。这正是我想要挂载的。 - Shammir
2
因此,挂载操作只能挂载现有的卷和路径。目录在 pod 上不需要存在,但必须存在于 nfs 上。 - Patrick W
@Shammir请接受以下答案。这将更容易被遇到类似问题的社区成员看到。 - PjoterS
显示剩余4条评论
1个回答

2

正如 Patrick Wdamitj07 在评论中提到的:

在尝试挂载之前,您需要手动创建文件夹或目录,否则 Kubernetes 将会因为目标目录不存在而引发错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接