Kubernetes - MountVolume.NewMounter 卷“<volume-name>”初始化失败:路径不存在
Kubernetes - MountVolume.NewMounter initialization failed for volume "<volume-name>" : path does not exist
我正在尝试使用 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
如有任何帮助,我们将不胜感激。
您正在使用 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
出现在所有可调度节点上
或
尝试修改您的文件以添加 nodeName
或 nodeSelector
或 nodeAffinity
以强制将其安排在具有正确主机路径的同一节点上。在下面的示例中,假设 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
如果 运行 在 Rancher Kubernetes Engine (RKE) 集群上,这个问题可能是因为每个 kubelet 也作为容器运行。因此,它看不到它运行的节点的文件系统。
解决方案是在 cluster.yml
中配置集群时添加额外的绑定安装(用于 kubelet
服务)。例如,要在节点上安装 /data-1
作为 kubelet 上的 /data-1
:
services:
...
kubelet:
extra_binds:
- "/data-1:/data-1"
我正在尝试使用 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
如有任何帮助,我们将不胜感激。
您正在使用 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
出现在所有可调度节点上
或
尝试修改您的文件以添加 nodeName
或 nodeSelector
或 nodeAffinity
以强制将其安排在具有正确主机路径的同一节点上。在下面的示例中,假设 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
如果 运行 在 Rancher Kubernetes Engine (RKE) 集群上,这个问题可能是因为每个 kubelet 也作为容器运行。因此,它看不到它运行的节点的文件系统。
解决方案是在 cluster.yml
中配置集群时添加额外的绑定安装(用于 kubelet
服务)。例如,要在节点上安装 /data-1
作为 kubelet 上的 /data-1
:
services:
...
kubelet:
extra_binds:
- "/data-1:/data-1"