Kubernetes - 卷“<卷名称>”的 MountVolume.NewMounter 初始化失败:路径不存在

Kod*_*odi 9 kubernetes persistent-volumes persistent-volume-claims kubernetes-pod

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

给出kubectl describe pod <pod-name>以下错误。

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

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

pod 和持久卷配置如下。

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
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

Mic*_*kis 9

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

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

services:
  ...
  kubelet: 
    extra_binds:
    - "/data-1:/data-1"
Run Code Online (Sandbox Code Playgroud)


P..*_*... 4

您正在使用nodeSelectorpv告诉它用于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
Run Code Online (Sandbox Code Playgroud)

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

或者

尝试修改您的文件以添加nodeName或强制其在具有正确主机路径nodeSelectornodeAffinity同一节点上进行调度。在下面的示例中,假设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
Run Code Online (Sandbox Code Playgroud)