Change:
I use extenders to add webhook for default-scheduler: And set to ignore scheuler error when scheduler extender is not working. But I got an error: . I suppose work fine in predicate path, but not work fine in bind path. The Ignorable logic in kube-scheduler: 637: and, 905: the is not judge in . Schedule should not error when set . extenders to kube-scheduler config(which has filterVerb and bindVerb and ignorable flag), example: and add config flag in kube-scheduler pod start up command. a scheduler-extender() and then stop it. a pod and you will see the schedule error. No response <details</details<detailsLocal environment </details<details</details<details</details<details</details<details</details
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig scheduling
/cc
/assign
Maybe this is not a bug but as designed, because bind is more critical than filter, what would you do in bind? I have no history context, cc
Hi, Kerthcet, in my scene, I use extender to bind IP(from my own network system) to my pod's annotaion. I'm aware of the critical of binding path, but, what If the extender is broken, how to skip it and continue? The scheduler extender design has supported ignorable, but only work for filter path make no sense for extender both has filter and bind. Maybe we can add an option to allow user to chose what can be ignored. Thanks for your reply anyway~
Reiterating the mentions to trigger a notification: <detailsIn response to : Maybe this is not a bug but as designed, because bind is more critical than filter, what would you do in bind? I have no history context, cc I'm aware of the critical of binding path, but, what If the extender is broken, how to skip it and continue? The scheduler extender design has supported ignorable, but only work for filter path make no scence for extender both has filter and bind. Maybe we can add an option to allow user to chose what can be ignored. thanks for your reply anyway~ Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
So even the extender bind failed, will not impact your pod scheduling, right?
Yup
Right, if the field is there, we should support it. It's up to the cluster administrator to judge whether it makes sense to ignore a failed extender during bind.

Discussion:
// IsIgnorable returns true indicates scheduling should not fail when this extender // is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well. <ins> // Both Filter and Bind actions are supported. </ins> IsIgnorable() bool }

sched.finishBinding(logger, fwk, assumed, targetNode, status) }() <del> bound, err := sched.extendersBinding(assumed, targetNode) </del> <ins> bound, err := sched.extendersBinding(logger, assumed, targetNode) </ins> if bound { return framework.AsStatus(err) }

} // TODO(#87159): Move this to a Plugin. <del> func (sched *Scheduler) extendersBinding(pod *v1.Pod, node string) (bool, error) { </del> <ins> func (sched *Scheduler) extendersBinding(logger klog.Logger, pod *v1.Pod, node string) (bool, error) { </ins> for _, extender := range sched.Extenders { if !extender.IsBinder() || !extender.IsInterested(pod) { continue } <del> return true, extender.Bind(&v1.Binding{ </del> <ins> err := extender.Bind(&v1.Binding{ </ins> ObjectMeta: metav1.ObjectMeta{Namespace: pod.Namespace, Name: pod.Name, UID: pod.UID}, Target:     v1.ObjectReference{Kind: "Node", Name: node}, }) <ins> if err != nil && extender.IsIgnorable() { logger.Info("Skipping extender in bind as it returned error and has ignorable flag set", "extender", extender, "err", err) continue } return true, err </ins> } return false, nil }

ignorable         bool gotBind           bool isPrioritizer     bool <ins> errBind           bool </ins> } func (f *fakeExtender) Name() string {

func (f *fakeExtender) Bind(binding *v1.Binding) error { if f.isBinder { <ins> if f.errBind { return errors.New("bind error") } </ins> f.gotBind = true return nil }

}, wantBinderID: -1, // default binding. }, <ins> { name:    "ignore when extender bind failed", podName: "pod1", extenders: []framework.Extender{ &fakeExtender{isBinder: true, errBind: true, interestedPodName: "pod1", ignorable: true}, }, wantBinderID: -1, // default binding. }, </ins> } for _, test := range table {