我正在使用Operator SDK構建自定義 Kubernetes Operator。我使用相應的 Operator SDK 命令創建了自定義資源定義和控制器:operator-sdk add api --api-version example.com/v1alpha1 --kind=Exampleoperator-sdk add controller --api-version example.com/v1alpha1 --kind=Example在主協調循環中(對于上面的示例,自動生成的ReconcileExample.Reconcile方法),我有一些自定義業務邏輯,需要我在 Kubernetes API 中查詢具有特定字段值的同類其他對象。我突然想到,我也許可以使用默認的 API 客戶端(由控制器提供)和自定義字段選擇器:func (r *ReconcileExample) Reconcile(request reconcile.Request) (reconcile.Result, error) { ctx := context.TODO() listOptions := client.ListOptions{ FieldSelector: fields.SelectorFromSet(fields.Set{"spec.someField": "someValue"}), Namespace: request.Namespace, } otherExamples := v1alpha1.ExampleList{} if err := r.client.List(ctx, &listOptions, &otherExamples); err != nil { return reconcile.Result{}, err } // do stuff... return reconcile.Result{}, nil}當我運行該運算符并創建新Example資源時,該運算符失敗并顯示以下錯誤消息:{"level":"info","ts":1563388786.825384,"logger":"controller_example","msg":"Reconciling Example","Request.Namespace":"default","Request.Name":"example-test"}{"level":"error","ts":1563388786.8255732,"logger":"kubebuilder.controller","msg":"Reconciler error","controller":"example-controller","request":"default/example-test","error":"Index with name field:spec.someField does not exist","stacktrace":"..."}最重要的部分是名稱字段索引:spec.someField 不存在我已經搜索了關于默認 API 客戶端的 Operator SDK 文檔,并了解了一些有關客戶端內部工作原理的信息,但沒有詳細解釋此錯誤或如何修復它。此錯誤消息是什么意思,如何創建此缺失索引以按此字段值有效列出對象?
使用自定義 fieldSelector 列出來自緩存客戶端的自定義資源
慕婉清6462132
2023-07-04 16:54:10