0

Kubernetes Operators 的 Operator-SDK 有一个ctrl.SetControllerReference()功能,声称当管理的自定义资源被删除时,它会自动启用垃圾收集对象。

有时它似乎没有删除任何东西。我做错了什么?

4

1 回答 1

0

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
}
于 2021-04-23T22:15:46.140 回答