现象
在 k8s cluster 创建 pvc 时,遇到了一个坑,pvc 在创建完成后一直处于 pending 状态。在进故障排查时,发现 provisioner 的 container 日志中出现了以下内容:
unexpected error getting claim reference: selfLink was empty, can't make reference
一番查找后,发现 github 上已有关于该问题的解决方案和相关介绍。
出现该问题的原因是由于 kubernetes 在 1.20.0 以后的版本中将 selfLink 移除而导致。相关文章可以参考以下链接:
Troubleshooting
修改 api-server 的配置文件,默认路径为:/etc/kubernetes/manifests/kube-apiserver.yaml
在文件中找到如下内容,并插入 - --feature-gates=RemoveSelfLink=false
参数。
|
|
kubelet 会监听 api-server 文件,如果有改动,kubelet 会自动删除当前运行的 api-server 的 pod, 然后重新创建一个新的 api-server pod. 如果有多个 Kubernetes Master 节点,则需要在每一个 Master 节点上都修改该文件,并使各节点上的参数保持一致。
如果 api-server 自动重启失败,可尝试通过命令kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
手动启动。
Reference
Using Kubernetes v1.20.0, getting “unexpected error getting claim reference: selfLink was empty, can’t make reference” 附两个关于什么是 selfLink 的说明,目前仍然不是很理解。 Question: what’s the functionality of SelfLink in ObjectMeta? ObjectMeta