簡體   English   中英

如何使用 Kubebuilder-v3 / operator-sdk 發送事件

[英]How to send Events with Kubebuilder-v3 / operator-sdk

Kubebuilder V3 文檔解釋說它討論“如何將多個事件批處理到單個協調調用中”。 但是,我在此文檔中找不到有關事件管理的任何信息。

您能否提供有關如何使用Kubebuilder-v3/operator-sdk發送事件的信息/代碼示例?

由於您詢問發送事件,您應該使用EventRecorder

book-v1中記錄的獲取事件記錄器的方法曾經

mgr.GetRecorder("containerset-controller")

但是,更新后的 v3 文檔中似乎不再存在等效文檔。 新的替代方案是:

mgr.GetEventRecorderFor("containerset-controller")

例如

func newReconciler(mgr manager.Manager) reconcile.Reconciler {
  return &ReconcileContainerSet{
    Client:   mgr.GetClient(),
    scheme:   mgr.GetScheme(),
    recorder: mgr.GetEventRecorderFor("containerset-controller"),
  }
}

生成的record.EventRecorder可以像以前一樣在您的協調器中使用:

recorder.Event(&obj, apiv1.EventTypeNormal, "Created", "something was created")

但是,引用的摘錄

“如何將多個事件批處理到一個協調調用中”。

指的是完全不同的東西;

reconcile。對相同名稱/命名空間的請求在入隊時進行批處理和重復數據刪除。 這允許控制器優雅地處理單個 object 的大量事件。將多個事件源多路復用到單個 object 類型將跨事件批處理不同 object 類型的請求。

官方文檔中的這一部分應該回答您的問題:

Controller的這個業務邏輯在Reconcile function中實現。 此 function 采用 ContainerSet 的命名空間和名稱,允許將多個事件一起批處理到單個 Reconcile 調用中。 此處顯示的 function 使用 ContainerSet.Spec 中指定的副本和映像創建或更新部署。 請注意,它會為 Deployment 設置 OwnerReference,以便在刪除 ContainerSet 后在 Deployment 上啟用垃圾收集。

  1. 使用 NamespacedName 讀取 ContainerSet
  2. 如果有錯誤或已被刪除,請返回
  3. 從 ContainerSetSpec 創建新的所需 DeploymentSpec
  4. 閱讀 Deployment 並將 Deployment.Spec 與 ContainerSet.Spec 進行比較
  5. 如果觀察到的 Deployment.Spec 與所需的規范不匹配 - 未找到部署:創建新的部署 - 找到了部署並需要更改:更新部署

在那里您還可以找到帶有代碼的示例。

此頁面似乎有助於理解如何發送事件: https://book-v1.book.kubebuilder.io/beyond_basics/creating_events.html using the standard client-go EventRecorder

但是,對於 Kubebuilder v3,它不是最新的。

感謝@coderanger 在 k8s 堆棧頻道上對這個主題的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM