Kubernetes Operators 的 Operator-SDK 有一个ctrl.SetControllerReference()
功能,声称当管理的自定义资源被删除时,它会自动启用垃圾收集对象。
有时它似乎没有删除任何东西。我做错了什么?
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.Namespace", secret.Namespace, "Secret.Name", secret.Name)
return err
}