mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-01 07:47:56 +00:00
Support ignore scheduler extender error when binding
Signed-off-by: sunbinnnnn <sunbinnnnn@hotmail.com>
This commit is contained in:
parent
1b6b3ba013
commit
87816ffb2c
@ -71,5 +71,6 @@ type Extender interface {
|
||||
|
||||
// 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.
|
||||
// Both Filter and Bind actions are supported.
|
||||
IsIgnorable() bool
|
||||
}
|
||||
|
@ -942,7 +942,7 @@ func (sched *Scheduler) bind(ctx context.Context, fwk framework.Framework, assum
|
||||
sched.finishBinding(logger, fwk, assumed, targetNode, status)
|
||||
}()
|
||||
|
||||
bound, err := sched.extendersBinding(assumed, targetNode)
|
||||
bound, err := sched.extendersBinding(logger, assumed, targetNode)
|
||||
if bound {
|
||||
return framework.AsStatus(err)
|
||||
}
|
||||
@ -950,15 +950,20 @@ func (sched *Scheduler) bind(ctx context.Context, fwk framework.Framework, assum
|
||||
}
|
||||
|
||||
// TODO(#87159): Move this to a Plugin.
|
||||
func (sched *Scheduler) extendersBinding(pod *v1.Pod, node string) (bool, error) {
|
||||
func (sched *Scheduler) extendersBinding(logger klog.Logger, pod *v1.Pod, node string) (bool, error) {
|
||||
for _, extender := range sched.Extenders {
|
||||
if !extender.IsBinder() || !extender.IsInterested(pod) {
|
||||
continue
|
||||
}
|
||||
return true, extender.Bind(&v1.Binding{
|
||||
err := extender.Bind(&v1.Binding{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: pod.Namespace, Name: pod.Name, UID: pod.UID},
|
||||
Target: v1.ObjectReference{Kind: "Node", Name: node},
|
||||
})
|
||||
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
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ type fakeExtender struct {
|
||||
ignorable bool
|
||||
gotBind bool
|
||||
isPrioritizer bool
|
||||
errBind bool
|
||||
}
|
||||
|
||||
func (f *fakeExtender) Name() string {
|
||||
@ -127,6 +128,9 @@ func (f *fakeExtender) Prioritize(
|
||||
|
||||
func (f *fakeExtender) Bind(binding *v1.Binding) error {
|
||||
if f.isBinder {
|
||||
if f.errBind {
|
||||
return errors.New("bind error")
|
||||
}
|
||||
f.gotBind = true
|
||||
return nil
|
||||
}
|
||||
@ -1223,6 +1227,14 @@ func TestSchedulerBinding(t *testing.T) {
|
||||
},
|
||||
wantBinderID: -1, // default binding.
|
||||
},
|
||||
{
|
||||
name: "ignore when extender bind failed",
|
||||
podName: "pod1",
|
||||
extenders: []framework.Extender{
|
||||
&fakeExtender{isBinder: true, errBind: true, interestedPodName: "pod1", ignorable: true},
|
||||
},
|
||||
wantBinderID: -1, // default binding.
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range table {
|
||||
|
Loading…
Reference in New Issue
Block a user