【问题标题】:Kubernetes - MountVolume.NewMounter initialization failed for volume "<volume-name>" : path does not existKubernetes - 卷“<volume-name>”的 MountVolume.NewMounter 初始化失败:路径不存在
【发布时间】:2021-09-30 19:54:36
【问题描述】:

我正在尝试使用 WSL 使用本地存储设置本地持久卷。但是 pod STATUS 停止在 Pending

kubectl describe pod &lt;pod-name&gt; 给出以下错误。

Warning FailedMount 21s (x7 over 53s) kubelet MountVolume.NewMounter initialization failed for volume "pv1" : path "/mnt/data" does not exist

路径/mnt/data已创建并存在于本地机器上,但容器无法访问。

pod 和 Persistent 卷配置如下。

apiVersion : v1
kind : PersistentVolume
metadata :
   name : pv1
spec :
  capacity :
    storage : 2Gi
  accessModes :
    - ReadWriteOnce
  persistentVolumeReclaimPolicy : Retain
  storageClassName : local-storage
  local : 
    fsType : ext4
    path : /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1

---

apiVersion : v1
kind : PersistentVolumeClaim
metadata : 
  name : pvc1
spec :
  resources :
    requests :
      storage : 1Gi
  accessModes :
    - ReadWriteOnce
  storageClassName : local-storage

---

apiVersion : v1
kind : Pod
metadata :
  name : pod1
spec :
  containers:
  - name: www
    image: nginx:alpine
    ports:
      - containerPort: 80
        name: www
    volumeMounts:
      - name: www-store
        mountPath: /usr/share/nginx/html
  volumes :
    - name : www-store
      persistentVolumeClaim :
        claimName : pvc1

任何帮助将不胜感激。

【问题讨论】:

    标签: kubernetes kubernetes-pod persistent-volumes persistent-volume-claims


    【解决方案1】:

    您正在使用nodeSelector 作为pv,告诉它使用node1 作为音量,机会是 1. node1 不存在/mnt/data 目录,这卷是hostPath 2. node1 可能有/mnt/data,但pod 被安排在没有/mnt/data 目录的其他节点上:

    apiVersion : v1
    kind : PersistentVolume
    metadata :
       name : pv1
    spec :
      capacity :
        storage : 2Gi
      accessModes :
        - ReadWriteOnce
      persistentVolumeReclaimPolicy : Retain
      storageClassName : local-storage
      local : 
        fsType : ext4
        path : /mnt/data
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - node1
    

    解决方案: 确保 /mnt/data 存在于所有可调度节点上

    尝试修改您的文件以添加 nodeNamenodeSelectornodeAffinity 以强制将其安排在具有正确 hostPath 的同一节点上。在下面的示例中,假设node1 存在/mnt/data 目录。

    apiVersion : v1
    kind : Pod
    metadata :
      name : pod1
    spec :
      nodeName: node1 #<------------this
      containers:
      - name: www
        image: nginx:alpine
        ports:
          - containerPort: 80
            name: www
        volumeMounts:
          - name: www-store
            mountPath: /usr/share/nginx/html
      volumes :
        - name : www-store
          persistentVolumeClaim :
            claimName : pvc1
    

    【讨论】:

      【解决方案2】:

      如果在 Rancher Kubernetes Engine (RKE) 集群上运行,这个问题可能是因为每个 kubelet 也作为容器运行。因此,它确实看到了它运行的节点的文件系统。

      解决方案是在cluster.yml 中配置集群时添加额外的绑定挂载(用于kubelet 服务)。例如,要将节点上的/data-1 挂载为kubelet 上的/data-1

      services:
        ...
        kubelet: 
          extra_binds:
          - "/data-1:/data-1"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        • 2015-01-15
        • 2015-11-06
        • 2017-07-21
        • 1970-01-01
        相关资源
        最近更新 更多