报错现象
简单来说就是创建pod进入pending状态,继续看日志发现最终原因是创建pv失败。
我这个集群使用的是nfs作为storageClass
查看nfs-provisioner的日志,发现报错

信息为
1 | unexpected error getting claim reference: selfLink was empty, can’t make reference |
查询多方资料
从kubernetes 1.20版本开始 禁用了 selfLink。
我之前安装的一直是1.18版本。这次安装的是k8s的1.25版本。但是还是按照以前的安装步骤操作的,所有出现这个问题。
解决方法
使用新的不基于 SelfLink 功能的 provisioner 镜像,重新创建 provisioner 容器。
若你能科学上网,可使用这个镜像:
1 | gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0 |
国内可使用这个镜像:
1 | registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0 |
该方法亲测有效
不建议的方案
在网上还看到这种方法,但是实际尝试之后api-server起不来,不建议使用。
这种方案应该是只适用于1.21~1.24的k8s版本
编辑/etc/kubernetes/manifests/kube-apiserver.yaml
在
1 | spec: |
下添加一行
1 | - --feature-gates=RemoveSelfLink=false |
然后重启api-server
1 | kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml |
不建议用这个方法,改了之后api-server起不来了