![](/img/trans.png)
[英]How to deploy an operator(created by operator-sdk v1.0) without installing operator-sdk in production environment?
[英]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 上啟用垃圾收集。
- 使用 NamespacedName 讀取 ContainerSet
- 如果有錯誤或已被刪除,請返回
- 從 ContainerSetSpec 創建新的所需 DeploymentSpec
- 閱讀 Deployment 並將 Deployment.Spec 與 ContainerSet.Spec 進行比較
- 如果觀察到的 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.