[英]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.