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

qq24tv8q  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(3)|浏览(328)

我正在尝试使用WSL设置使用本地存储的本地永久卷。但Pod状态停止在挂起
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已创建并存在于本地计算机上,但无法由容器访问。
和持久卷配置,如下所示。

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

任何帮助都将不胜感激。

dl5txlt9

dl5txlt91#

如果在RKE集群上运行,这个问题可能是由于每个kubelet也作为容器运行,因此它看不到运行它的节点的文件系统。
解决方案是在cluster.yml中配置群集时添加额外的绑定挂载(用于kubelet服务)。例如,要将节点上的/data-1挂载为kubelet上的/data-1

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

pkwftd7m2#

您正在为pv使用nodeSelector,告诉它为卷使用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
8hhllhi2

8hhllhi23#

Talos上,类似于另一个答案中的RKE引擎,它也运行容器化的kubelet,必须在MachineConfig.kubelet中配置extraMounts,例如:

extraMounts:
  - destination: /var/mnt/nvme1
    type: bind
    source: /var/mnt/nvme1
    options:
      - bind
      - rshared
      - rw

相关问题