k8s中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的
,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。
问题:
使用 k8s 1.28版本,通过
kubectl get pvc
,发现 PVC一直处于
Pending
状态。通过
kubectl describe pvc [pvc名称]
描述,发现如下错误:
Waiting for a volume to be created either by the external provisioner 'fuseim.pri/ifs' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
原因:
在 k8s 1.20 之后,出于对性能和统一 apiserver 调用方式的初衷,k8s 移除了对
SelfLink
的支持,而默认上面指定的 provisioner 版本需要 SelfLink 功能,因此 PVC 无法进行自动制备。
说明:
使用的二进制方式安装的 k8s 1.28 版本,并没有
/etc/kubernetes/manifests/kube-apiserver.yaml
这个文件。网上通篇说的关于 SelfLink 的问题就是那两种解决方案。
1.启用SelfLink
kube-apiserver.yaml 新增:–feature-gates=RemoveSelfLink=false
2.使用不需要SelfLink的provisioner
比如:registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
但是,这两种方案,在 k8s 1.28 版本中,并不生效!!!
解决Pending方案:
1.使用
helm
安装
nfs驱动
,并修改成自己的
nfs服务器ip
和
path
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \--setnfs.server=192.168.0.32 \--setnfs.path=/data/nfs/rw
,将驱动修改成 helm安装的驱动接口修改自己的 StorageClass文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
namespace: kube-system
provisioner: cluster.local/nfs-subdir-external-provisioner # 修改此处!!!外部制备器提供者,编写为提供者的名称parameters:archiveOnDelete:"false"reclaimPolicy: Retain
volumeBindingMode: Immediate
本文结束,谢谢
版权归原作者 扛麻袋的少年 所有, 如有侵权,请联系我们删除。