Как правильно выполнять сборку мусора с помощью Operator SDK?

Operator-SDK для операторов Kubernetes имеет ctrl.SetControllerReference() , в которой утверждается, что она включает автоматический сбор объектов мусора при удалении управляющего настраиваемого ресурса.

Иногда кажется, что ничего не удаляет. Что я сделал не так?


person I'll Eat My Hat    schedule 23.04.2021    source источник


Ответы (1)


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
}
person I'll Eat My Hat    schedule 23.04.2021