hello云胜

技术与生活

0%

报错现象

简单来说就是创建pod进入pending状态,继续看日志发现最终原因是创建pv失败。

我这个集群使用的是nfs作为storageClass

查看nfs-provisioner的日志,发现报错

![image-20231027180250101](D:\github\docs\云原生\k8s\nfs 创建pv失败.assets\image-20231027180250101.png)

信息为

1
unexpected error getting claim reference: selfLink was empty, can’t make reference

查询多方资料

从kubernetes 1.20版本开始 禁用了 selfLink。

enhancements/keps/sig-api-machinery/1164-remove-selflink at master · kubernetes/enhancements (github.com)

我之前安装的一直是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
2
3
4
spec:
containers:
- command:
- kube-apiserver

下添加一行

1
- --feature-gates=RemoveSelfLink=false

然后重启api-server

1
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

不建议用这个方法,改了之后api-server起不来了