K8s v1.20 无法挂载 nfs provisioner

selfLink was empty, can't make reference

Posted by Ksd on May 12, 2021

如果你的 K8S 集群是 v1.20+,在 nfs provisioner 创建 pvc 时,nfs provisioner 会报错:

I0512 03:01:54.863533       1 controller.go:926] provision "default/v1" class "nfs-provisioner": started
E0512 03:01:54.867892       1 controller.go:943] provision "default/v1" class "nfs-provisioner": unexpected error getting claim reference: selfLink was empty, can't make reference

这是因为 在 k8s 1.20 中,已根据 release notes删除 selfLink 参数。

要解决这个问题只需要在kube-api添加--feature-gates=RemoveSelfLink=false 即可,参考:kubernetes-sigs/nfs-subdir-external-provisioner#25

如果你使用的是 rancher 集群,可以通过一下方式修改 kube-api 参数:

1. 编辑集群

2. Edit as YAML

3. 在 YAML 中修改kube-api参数

    kube-api:
      always_pull_images: false
      pod_security_policy: false
      secrets_encryption_config:
        enabled: false
      service_node_port_range: 30000-32767
      extra_args:
        feature-gates: 'RemoveSelfLink=false'

4. Save –> Done

此时,集群将会自动更新

等待集群更新成功后,查看之前创建失败的 pvc 和 pod,此时,pvc 和 pod 应该都创建成功