Kubernetes nfs提供程序selfLink为空

hgncfbus  于 2023-03-12  发布在  Kubernetes
关注(0)|答案(4)|浏览(327)

昨天我创建了一个新的kubernetes集群(v1.20.1,在prem上),我想添加NFS配置。唯一可用的NFS配置程序(并且仍然维护)似乎是https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
它确实要求使用您自己的配置程序,默认值(quay.io/external_storage/nfs-client-provisioner:latest)是两年前的,但我没有自己的配置程序。
当我按照没有helm图表的部署指南进行操作并检查nfs-client-provisioner日志时,我看到以下内容:

I1220 22:20:44.160099       1 leaderelection.go:185] attempting to acquire leader lease  default/fuseim.pri-ifs...
E1220 22:21:01.598029       1 event.go:259] Could not construct reference to: '&v1.Endpoints{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"fuseim.pri-ifs", GenerateName:"", Namespace:"default", SelfLink:"", UID:"c852ca40-471f-4019-a099-d72d32555022", ResourceVersion:"134579", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:63744022156, loc:(*time.Location)(0x1956800)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string{"control-plane.alpha.kubernetes.io/leader":"{\"holderIdentity\":\"nfs-client-provisioner-5999484954-n4tj7_94db294f-4261-11eb-9b30-c64536689731\",\"leaseDurationSeconds\":15,\"acquireTime\":\"2020-12-20T01:21:01Z\",\"renewTime\":\"2020-12-20T01:21:01Z\",\"leaderTransitions\":2}"}, OwnerReferences:[]v1.OwnerReference(nil), Initializers:(*v1.Initializers)(nil), Finalizers:[]string(nil), ClusterName:""}, Subsets:[]v1.EndpointSubset(nil)}' due to: 'selfLink was empty, can't make reference'. Will not report event: 'Normal' 'LeaderElection' 'nfs-client-provisioner-5999484954-n4tj7_94db294f-4261-11eb-9b30-c64536689731 became leader'
I1220 22:21:01.598123       1 leaderelection.go:194] successfully acquired lease default/fuseim.pri-ifs
I1220 22:21:01.598198       1 controller.go:631] Starting provisioner controller fuseim.pri/ifs_nfs-client-provisioner-5999484954-n4tj7_94db294f-4261-11eb-9b30-c64536689731!
I1220 22:21:01.709535       1 controller.go:680] Started provisioner controller fuseim.pri/ifs_nfs-client-provisioner-5999484954-n4tj7_94db294f-4261-11eb-9b30-c64536689731!
I1220 22:21:01.717419       1 controller.go:987] provision "default/test-claim" class "managed-nfs-storage": started
E1220 22:21:01.720318       1 controller.go:1004] provision "default/test-claim" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference
I1220 22:36:01.615073       1 controller.go:987] provision "default/test-claim" class "managed-nfs-storage": started
E1220 22:36:01.618195       1 controller.go:1004] provision "default/test-claim" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference

这是我的集群还是这个置备程序的问题?我真的不知道。
我也可以放弃这个配置程序,甚至NFS,去做别的事情。我只需要每个Pod示例的存储空间来工作,例如,存储在我的Kubernetes集群之外的volumeClaimTemplates。如果有人有任何建议,请告诉我!
先谢了亨德里克

9vw9lbht

9vw9lbht1#

您看到此错误的原因如下:KEP-1164: Deprecate and Remove SelfLink
引用上述KEP:
在v1.16中,我们将通过以下方式弃用ObjectMeta和ListMeta对象中的SelfLink字段:在字段定义中记录该字段已弃用并将被删除添加关于字段弃用的发布说明我们还将引入一个功能门,以允许禁用设置SelfLink字段,并使该功能门背后的逻辑设置不透明。

在v1.20(从v1.16开始12个月和4个版本)中,我们将关闭功能门控**,这将自动禁用设置SelfLinks。但是,仍然可以通过更改*功能门控的值来恢复行为。

在v1.21中,我们将去掉传播这些字段和字段本身的整个代码。同时,我们将检查引用该字段的地方(见下文),并去掉那些字段。
如您所见,您可以使用featureGate重新启用它:RemoveSelfLink=false,但不建议使用,并且SelfLink将在v1.21中永久删除
也可以在github上查看这个问题:Using Kubernetes v1.20.0, getting "unexpected error getting claim reference: selfLink was empty, can't make reference

fkvaft9z

fkvaft9z2#

我按照Matt链接的https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25线程中的建议,使用gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0解决了这个问题。
要与Helm值文件一起使用:

image:
    repository: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner
    tag: v4.0.0

要与Terraform Helm提供程序一起使用:

set {
    name  = "image.repository"
    value = "gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner"
  }
  set {
    name  = "image.tag"
    value = "v4.0.0"
  }

我使用了帖子中建议的特定版本,但很可能他们最近的图像会有额外的修复,所以使用该版本可能会比较谨慎。

kupeojn6

kupeojn63#

我在这里看到了同样的问题,但这不仅仅是关于selflink提供者的,我看到的问题是,自从安装了最新版本(v1.20.1)后,我的'testclaim' pvc不再能够从storageclass(managed-nfs-storage)中请求存储空间,而在1.20.1之前,这个类工作正常
所以,作为一个健全性检查,我用v1.17.16和v1.19.6测试了这个,在这两个版本中,testclaim的状态立即切换到'Bound',但是在v1.20.1中,pvc仍然处于'Pending'状态,并且永远不会更改为'Bound'。
Tx!
巴特

mftmpeh8

mftmpeh84#

使用https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm repo add nfs-subdir-external-provisioner \
  https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update
helm install nfs-provisioner \
  nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --set nfs.server=<server-ip> \
  --set nfs.path=/path/to/nfs/storage \
  --set storageClass.name=nfs-provisioner

在PVC质量标准中添加storageClassName=nfs-provisioner

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  storageClassName: nfs-provisioner
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

下面的方法已过时,但如果您必须使用它,请在API服务器静态清单/etc/kubernetes/manifests/kube-apiserver.yaml中添加--feature-gates=RemoveSelfLink=false标志,如下所示

spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false

相关问题