问题描述
在OpenShift 3.11集群中,我们尝试通过以前在外部NFS存储(Isilon存储)上创建的PersistentVolume和NFS卷使用NFS。 我们在Kubernetes / OpenShift层上成功创建并成功应用了PersistentVolume和PersistentVolumeClaim。 PVC正确地绑定了PV,但是在检查Deployment事件时,我们在安装NFS阶段遇到错误。
PersistentVolume:
apiVersion: v1
kind: PersistentVolume
Metadata:
name: tool1pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
path: /tool1shareenv1
server: tommytheserver.companydomain.priv
persistentVolumeReclaimPolicy: Retain
claimRef:
name: tool1claimenv1
namespace: ocpnamespace1
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
Metadata:
name: tool1claimenv1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
volumeName: tool1pvenv1
在检查开发事件时,我们会看到“没有这样的文件”:
MountVolume.SetUp Failed for volume "tool1pvenv1" : mount Failed:
exit status 32 Mounting command: systemd-run Mounting arguments: --description=Kubernetes transient mount for /var/lib/origin/openshift.local.volumes/pods/f1cb1291-fe12-01ea-bb92-0050123aa39be/volumes/kubernetes.io~nfs/tool1pvenv1 --scope -- mount -t nfs tommytheserver.companydomain.priv:/tool1shareenv1
/var/lib/origin/openshift.local.volumes/pods/f1cb9191-fe73-11ea-bb92-005056ba12be/volumes/kubernetes.io~nfs/tool1pvenv1d Output: Running scope as unit run-74039.scope. **mount.nfs: mounting tommytheserver.companydomain.priv:/tool1env1 Failed,reason given by server: No such file or directory**
我们调查了server
和path
字段,并尝试了不同的变体,例如:
PersistentVolumeVersion2:
apiVersion: v1
kind: PersistentVolume
Metadata:
name: tool1pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
path: /tool1shareenv1
server: tommytheserver.companydomain.priv/tool1shareenv1
persistentVolumeReclaimPolicy: Retain
claimRef:
name: tool1claimenv1
namespace: ocpnamespace1
但是我们仍然面临着同样的No such file
错误。
我们如何解决它?
解决方法
通常情况下,我会解决此类问题...
- 再次检查您的共享路径是否确实存在
- 获取运行Pod并在其上SSH的节点的IP地址。您可以这样获得IP:
kubectl get pod <podname> -o wide -n namespace
然后,我将确保可以连接到共享所在的nfs服务器:
telnet <nfs server> port
- 随后我将运行
dmesg
来查看与安装相关的错误 - 我会尝试使用与您的错误显示相同的参数来挂载卷。即-
mount -t nfs tommytheserver.companydomain.priv:/tool1shareenv1
如果不查看这些故障排除步骤的结果,很难提供具体的答案。但是,这就是我要采取的方法。