打印

persistentvolume-controller waiting for a volume to be created分析与解决

persistentvolume-controller waiting for a volume to be created分析与解决

persistentvolume-controller  waiting for a volume to be created分析与解决

之前一直通过Kubernetes NFS-Client Provisioner在Kubernetes环境中创建Dynamic NFS Persistent Volume给Pod等使用

随着Kubernetes版本的不断升级,在Pod中使用NFS-Client-Provisioner通过PVC创建动态PV时报错了

分析日志
1、查看Pod
# oc get pod
NAME                                            READY   STATUS    RESTARTS   AGE
test-pod                                        0/1     Pending   0          9m44s

Pending状态,无法创建成功;

那就查看Pod具体描述,发现是没有可用的PVC可以绑定!肯定是没有创建成功PVC,继续查
# oc describe test-pod

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  0s    default-scheduler  0/6 nodes are available: 6 pod has unbound immediate PersistentVolumeClaims.


2、查看PVC
# oc get pvc
NAME         STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS          AGE
test-claim   Pending                                      managed-nfs-storage   17m

也是Pending状态

查看PVC具体描述
# oc describe pvc test-claim
Events:
  Type    Reason                Age               From                         Message
  ----    ------                ----              ----                         -------
  Normal  ExternalProvisioning  9s (x7 over 91s)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "fuseim.pri/ifs" or manually created by system administrator


3、查看nfs-client-provisioner Pod的日志
oc logs nfs-client-provisioner-68f498954f-v9sww

发现报错selfLink为空,不能创建引用
controller.go:1004] provision "default/test-claim" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference


4、结论
于是,上网查询方得知从Kubernetes 1.20版本开始,默认禁止使用selfLink
对于OpenShift来讲4.7还可以用,参才如下,OpenShift 4.8及以上就要注意了。
bring selflinks back for 4.7, they will be removed in 4.8
https://github.com/openshift/api/commit/c8c8f6d0f4a8ac4ff4ad7d1a84b27e1aa7ebf9b4

Guthub Issues
Deprecate and remove SelfLink
https://github.com/kubernetes/enhancements/issues/1164


那么,从Kubernetes 1.20版本开始,我们可以使用新的版本叫Kubernetes NFS Subdir External Provisioner,它就是从Kubernetes NFS-Client Provisioner迁移过来的新项目
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

使用过程基本上一致,除了镜像名称改变之类的,详细参考官网以及此文
How do I create a storage class for NFS dynamic storage provisioning in an OpenShift environment?
https://www.ibm.com/support/pages/how-do-i-create-storage-class-nfs-dynamic-storage-provisioning-openshift-environment


其他参考
https://stackoverflow.com/questions/65376314/kubernetes-nfs-provider-selflink-was-empty
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25
拥抱智慧地球!地球守护使者!

TOP