首页 > 解决方案 > 卷“mongo-two”的 MountVolume.SetUp 失败:lstat /var/lib/mongo:没有这样的文件或目录

问题描述

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

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
...

现有目录上仍然有“没有这样的目录”。有什么不正确的?如果需要,我可以提供额外的数据。

谢谢

标签: kubernetespersistent-volumes

解决方案


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

我在 kubelet 容器中添加了一个卷定义,就可以了。

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

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

不要忘记两个点 rshared。


推荐阅读