MountVolume.SetUp 卷 "mongo-two" 失败:lstat /var/lib/mongo:没有那个文件或目录

MountVolume.SetUp failed for volume "mongo-two": lstat /var/lib/mongo: no such file or directory

我正在尝试让 mongo-replicaset chart 正常工作。

Kubelet 在 mongo-replicaset 图表部署时报告此错误:

MountVolume.SetUp failed for volume "mongo-two": lstat /mongo/data: no such file or directory

在每个节点上,/mongo/data 文件夹 存在 ,快把我逼疯了。注意:在节点上,lstat 命令不存在,但我怀疑 kubelet 容器会带来它。?

我有 3 个持久卷:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-[one/two/three]
spec:
  capacity:
    storage: 40Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /mongo/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - [one/two/three]

StatefulSet yaml: (mongo-replicaset helm chart 3.8.0)

...
  volumeMounts:
    - mountPath: /data/db
      name: datadir
...
  volumeClaimTemplates:
  - metadata:
      creationTimestamp: null
      name: datadir
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: local-storage
      resources:
        requests:
          storage: 40Gi
...

现有目录中仍有 "no such directory".. 哪里不对?如果需要,我可以提供额外的数据。

谢谢

在您的有状态集中,您必须拥有带 subPath 字段的卷供应器。如果您从 statefulset yaml 文件中删除该 subPath 字段,您将不会遇到此错误。

问题是主机路径卷供应器中存在错误,如果 deployment/statefulset 中存在子路径字段,即使该字段为空,也会遇到 "lstat: no such file or directory" 错误。这个错误不会让 statefulset 出现,它们会进入 containerCreatingConfigErr(我在 kubeadm 上遇到过)

有关更多信息,您可以访问此 link

https://github.com/kubernetes/minikube/issues/2256

问题来自容器化的 kubelet(因为安装了 Rancher)

我在 kubelet 容器中添加了一个卷定义,没问题。

对于那些对在 Rancher - Kubernetes 安装中创建持久本地卷感兴趣的人,只需将其添加到您的集群 yaml 中,以便 kubelet 可以挂载您的卷:

services:
  kubelet:
    extra_binds:
       - /path_to_mount:/path_to_mount:rshared

不要忘记共享的两个点。