kubernetes error: selfLink was empty

kubernetes troubleshooting

现象

在 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 移除而导致。相关文章可以参考以下链接:

Deprecate and remove SelfLink

Troubleshooting

修改 api-server 的配置文件,默认路径为:/etc/kubernetes/manifests/kube-apiserver.yaml 在文件中找到如下内容,并插入 - --feature-gates=RemoveSelfLink=false 参数。

1
2
3
4
spec:
  containers:
  - command:
    - kube-apiserver

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

Built with Hugo
Theme Stack designed by Jimmy