如何为某个资源 Kubernetes Go Operator 生成事件

问题描述

我正在用 Go 编写一个 Kubernetes Operator,我想以与 Pod 相同的方式生成事件,即在协调的每个点我想编写一个可以使用 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
}

解决方法

Kubebuilder v1 一书有一个很好的例子,说明如何使用来自 EventsEventRecorder 创建编写 client-go

Kubebuilder v1 book - Create Events and Write Events

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...