用 k8s 1.20以上版本,通过 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.
原因:在 k8s 1.20 之后,出于对性能和统一 apiserver 调用方式的初衷,k8s 移除了对 SelfLink 的支持,而默认上面指定的 provisioner 版本需要 SelfLink 功能,因此 PVC 无法进行自动制备
原始解决办法:
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
gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0
但是很坑,这两种都不行!!!!!!!!!
目前解决办法
1.由于现在镜像源都被ban了网上随便找个nfs-subdir-external-provisioner镜像源
我这里随便找了个版本nfs-subdir-external-provisioner:v4.0.2
2.docker load -i nfs-subdir-external-provisionerv402.tar
3.给镜像打标签不然kubectl找不到
docker tag 932b0bface75 nfs-subdir-external-provisioner:v4.0.2
4.启动deploy
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.1.101 \
--set nfs.path=/home/nfs/rw \
--set image.repository=nfs-subdir-external-provisioner \
--set image.tag=v4.0.2 \
--set image.pullPolicy=IfNotPresent
5.kubectl get pvc 终于running了