Kubernetes NFS PersistentVolumeClaim 的状态为 Pending

Kubernetes NFS PersistentVolumeClaim has status Pending

我正在尝试将我的 Kubernetes 集群配置为将本地 NFS 服务器用于持久卷。

我设置 PersistentVolume 如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: hq-storage-u4
  namespace: my-ns
spec:
  capacity:
    storage: 10Ti
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /data/u4
    server: 10.30.136.79
    readOnly: false

PV 在 kubectl 中看起来没问题

$ kubectl get pv
NAME            CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS     CLAIM             STORAGECLASS   REASON    AGE
hq-storage-u4   10Ti       RWX           Retain          Released   my-ns/pv-50g                               49m

然后我尝试创建 PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-50gb
  namespace: my-ns
spec:
  accessModes:
  - ReadWriteMany
  resources:
     requests:
       storage: 5Gi

Kubectl 显示 pvc 状态为 Pending

$ kubectl get pvc
NAME       STATUS    VOLUME    CAPACITY   ACCESSMODES   STORAGECLASS   AGE
pvc-50gb   Pending                                                     16m

当我尝试将卷添加到部署时,出现错误:

[SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "pvc-50gb", which is unexpected., SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "pvc-50gb", which is unexpected., SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "pvc-50gb", which is unexpected.]

如何让 pvc 进入工作状态?

我无法对您的 post 发表评论,所以我将尝试回答这个问题。

当 PVC 在我的 NFS 集群上不工作时,我遇到了 2 种错误。安装PV通常会成功,所以提供的状态信息就不多说了。

  1. PV和PVC的annotation和spec不一样。看起来不是这样的。
  2. 使用NFS资源的pod节点无法挂载该资源。在应该挂载 NFS 资源的节点上尝试 mount -t nfs 10.30.136.79:/data/u4 /mnt。这应该会成功。如果失败,可能是
    1. 缺少挂载权限。在您的 NFS 服务器中纠正 /etc/exports
    2. 防火墙阻止了 NFS 端口。修复防火墙。

还有一点,pod 中的非特权用户可能无法写入 NFS 资源。 pod 中 NFS 用户的 uid/gid 必须匹配 NFS 资源的权限。

好机会!

原来我需要把IP(我也把路径)放在引号里。修复后,pvc状态为Bound,pod可以正确挂载