问题描述
用于 Kubernetes Operators 的 Operator-SDK 有一个 ctrl.SetControllerReference()
函数,该函数声称它可以在删除管理自定义资源时自动启用垃圾收集对象。
解决方法
ctrl.SetControllerReference()
仅更改本地对象的 metadata.ownerReferences
。
它不会自动为您调用 reconciler.Update()
。
因此,更改从未保留,Owner
也从未更改。
创建对象的正确方法是在调用ctrl.SetControllerReference()
之前先调用reconciler.Create()
,例如
if err := ctrl.SetControllerReference(mycrd,secret,r.Scheme); err != nil {
log.Error(err,"Failed to set controller reference")
return err
}
log.Info("Creating a new Secret","Secret.Namespace",secret.Namespace,"Secret.Name",secret.Name)
if err = r.Create(ctx,secret); err != nil {
log.Error(err,"Failed to create new Secret",secret.Name)
return err
}