Alleviate race between scheduler and kubelet

If the scheduler learns of a node change and schedules based on it
before the kubelet learns of the node change, the pod will fail.
k3s-v1.14.6
Darren Shepherd 2019-02-23 22:18:59 -07:00 committed by Erik Wilson
parent 202115d9f7
commit 36bccb5d80
1 changed files with 14 additions and 0 deletions

View File

@ -18,6 +18,7 @@ package lifecycle
import (
"fmt"
"time"
"k8s.io/klog"
@ -55,6 +56,19 @@ func NewPredicateAdmitHandler(getNodeAnyWayFunc getNodeAnyWayFuncType, admission
}
func (w *predicateAdmitHandler) Admit(attrs *PodAdmitAttributes) PodAdmitResult {
result := w.admit(attrs)
for i := 0; i < 10; i++ {
if result.Admit {
break
}
time.Sleep(time.Second)
result = w.admit(attrs)
}
return result
}
func (w *predicateAdmitHandler) admit(attrs *PodAdmitAttributes) PodAdmitResult {
node, err := w.getNodeAnyWayFunc()
if err != nil {
klog.Errorf("Cannot get Node info: %v", err)