Как генерировать события для определенного ресурса Kubernetes Go Operator

Я пишу оператор Kubernetes на Go и хочу генерировать события так же, как это делают поды, т. е. в каждой точке согласования я хочу написать событие, которое можно проверить с помощью kubectl describe myresource.

Я нашел пакет, который позволил бы мне это сделать, но я не понимаю, как его использовать: https://github.com/kubernetes/client-go/blob/master/tools/record/event.go

Пример скелетного кода:

type MyResourceReconciler struct {
    client.Client
    Log    logr.Logger
    Scheme *runtime.Scheme
}

var logger logr.Logger

func (r *MyResourceReconciler) SetupWithManager(mgr ctrl.Manager) error {
    return ctrl.NewControllerManagedBy(mgr).
        Named("MyResource-controller").
        For(&v1.MyResource{}).
        Complete(r)
}

func (r *MyResourceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    logger = r.Log.V(0).WithValues("MyResource", req.NamespacedName)
    logger.Info("reconcile called")

    // TODO: Record event for req.NamespacedName

    return reconcile.Result{}, nil
}



Ответы (1)


В книге Kubebuilder v1 есть хороший пример того, как создавать и писать Events с помощью EventRecorder из client-go.

См. книгу Kubebuilder v1 — Создание событий и запись событий

person Jonas    schedule 05.04.2021
comment
Я не знал об этой части сайта kubebuilder.io, спасибо! - person Cris; 05.04.2021