簡體   English   中英

獲取在 kubebuilder 中觸發 controller 的事件類型

[英]Getting the type of event, that triggered a controller in kubebuilder

我剛剛開始使用 kubebuilder 和 Golang 來使用自定義資源擴展我們的 Kubernetes 集群。 我很想根據實際調用它的事件在協調器功能中做不同的事情。

資源是否創建? 更新了嗎? 被刪除了嗎?

這些事件中的每一個都會觸發 controller,但是,我似乎無法找到可能看到哪些事件實際發生了。 我可以通過編寫這樣的協調器來解決這個問題:

func (r *ServiceDescriptorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    service := &batchv1.ServiceDescriptor{}
    if err := r.Get(context.TODO(), req.NamespacedName, service); err != nil && errors.IsNotFound(err) {
        fmt.Println("Resource was not found -> must have been deleted")
    else {
        fmt.Println("No errors found -> Resource must have been created or updated")
    }
}

然而,這感覺奇怪的隱含和有點hacky。

是否有一種干凈的(可能是本機的)方法來獲取協調器調用的事件類型?

您將無法做到這一點,因為該系統被設計為基於級別的,並且它不是由單個事件更改觸發,而是由從 apiserver 獲取的實際集群 state 觸發。

查看reconcile.go你會注意到在第 84行有這樣的評論:

協調是基於級別的,這意味着操作不是由單個事件的更改驅動,而是由從 apiserver 或本地緩存讀取的實際集群 state 驅動。 例如,如果響應 Pod 刪除事件,則請求不會包含 Pod 已刪除,而是協調 function 在讀取集群 state 並看到 Pod 丟失時觀察到這一點。

第 44行:

請求包含協調 Kubernetes object 所需的信息。 這包括唯一標識 object 的信息 - 它的名稱和命名空間。 它不包含有關任何特定事件或 object 內容本身的信息

暫無
暫無

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

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