mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Handle pod addition / removal errors
This commit is contained in:
parent
e682310dcc
commit
89a70fa407
@ -589,7 +589,9 @@ func addNominatedPods(pod *v1.Pod, meta predicates.PredicateMetadata,
|
|||||||
if util.GetPodPriority(p) >= util.GetPodPriority(pod) && p.UID != pod.UID {
|
if util.GetPodPriority(p) >= util.GetPodPriority(pod) && p.UID != pod.UID {
|
||||||
nodeInfoOut.AddPod(p)
|
nodeInfoOut.AddPod(p)
|
||||||
if metaOut != nil {
|
if metaOut != nil {
|
||||||
metaOut.AddPod(p, nodeInfoOut)
|
if err := metaOut.AddPod(p, nodeInfoOut); err != nil {
|
||||||
|
klog.Warningf("unable to add pod, nominated pod %s, incoming pod %s: %v", p.Name, pod.Name, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
podsAdded = true
|
podsAdded = true
|
||||||
}
|
}
|
||||||
@ -1098,25 +1100,35 @@ func (g *genericScheduler) selectVictimsOnNode(
|
|||||||
potentialVictims := util.SortableList{CompFunc: util.MoreImportantPod}
|
potentialVictims := util.SortableList{CompFunc: util.MoreImportantPod}
|
||||||
nodeInfoCopy := nodeInfo.Clone()
|
nodeInfoCopy := nodeInfo.Clone()
|
||||||
|
|
||||||
removePod := func(rp *v1.Pod) {
|
removePod := func(rp *v1.Pod) error {
|
||||||
nodeInfoCopy.RemovePod(rp)
|
if err := nodeInfoCopy.RemovePod(rp); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if meta != nil {
|
if meta != nil {
|
||||||
meta.RemovePod(rp, nodeInfoCopy.Node())
|
if err := meta.RemovePod(rp, nodeInfoCopy.Node()); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addPod := func(ap *v1.Pod) {
|
return nil
|
||||||
|
}
|
||||||
|
addPod := func(ap *v1.Pod) error {
|
||||||
nodeInfoCopy.AddPod(ap)
|
nodeInfoCopy.AddPod(ap)
|
||||||
if meta != nil {
|
if meta != nil {
|
||||||
meta.AddPod(ap, nodeInfoCopy)
|
if err := meta.AddPod(ap, nodeInfoCopy); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
// As the first step, remove all the lower priority pods from the node and
|
// As the first step, remove all the lower priority pods from the node and
|
||||||
// check if the given pod can be scheduled.
|
// check if the given pod can be scheduled.
|
||||||
podPriority := util.GetPodPriority(pod)
|
podPriority := util.GetPodPriority(pod)
|
||||||
for _, p := range nodeInfoCopy.Pods() {
|
for _, p := range nodeInfoCopy.Pods() {
|
||||||
if util.GetPodPriority(p) < podPriority {
|
if util.GetPodPriority(p) < podPriority {
|
||||||
potentialVictims.Items = append(potentialVictims.Items, p)
|
potentialVictims.Items = append(potentialVictims.Items, p)
|
||||||
removePod(p)
|
if err := removePod(p); err != nil {
|
||||||
|
return nil, 0, false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If the new pod does not fit after removing all the lower priority pods,
|
// If the new pod does not fit after removing all the lower priority pods,
|
||||||
@ -1139,24 +1151,34 @@ func (g *genericScheduler) selectVictimsOnNode(
|
|||||||
// violating victims and then other non-violating ones. In both cases, we start
|
// violating victims and then other non-violating ones. In both cases, we start
|
||||||
// from the highest priority victims.
|
// from the highest priority victims.
|
||||||
violatingVictims, nonViolatingVictims := filterPodsWithPDBViolation(potentialVictims.Items, pdbs)
|
violatingVictims, nonViolatingVictims := filterPodsWithPDBViolation(potentialVictims.Items, pdbs)
|
||||||
reprievePod := func(p *v1.Pod) bool {
|
reprievePod := func(p *v1.Pod) (bool, error) {
|
||||||
addPod(p)
|
if err := addPod(p); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
fits, _, _, _ := g.podFitsOnNode(pluginContext, pod, meta, nodeInfoCopy, fitPredicates, queue, false)
|
fits, _, _, _ := g.podFitsOnNode(pluginContext, pod, meta, nodeInfoCopy, fitPredicates, queue, false)
|
||||||
if !fits {
|
if !fits {
|
||||||
removePod(p)
|
if err := removePod(p); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
victims = append(victims, p)
|
victims = append(victims, p)
|
||||||
klog.V(5).Infof("Pod %v/%v is a potential preemption victim on node %v.", p.Namespace, p.Name, nodeInfo.Node().Name)
|
klog.V(5).Infof("Pod %v/%v is a potential preemption victim on node %v.", p.Namespace, p.Name, nodeInfo.Node().Name)
|
||||||
}
|
}
|
||||||
return fits
|
return fits, nil
|
||||||
}
|
}
|
||||||
for _, p := range violatingVictims {
|
for _, p := range violatingVictims {
|
||||||
if !reprievePod(p) {
|
if fits, err := reprievePod(p); err != nil {
|
||||||
|
klog.Warningf("Failed to reprieve pod %q: %v", p.Name, err)
|
||||||
|
return nil, 0, false
|
||||||
|
} else if !fits {
|
||||||
numViolatingVictim++
|
numViolatingVictim++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Now we try to reprieve non-violating victims.
|
// Now we try to reprieve non-violating victims.
|
||||||
for _, p := range nonViolatingVictims {
|
for _, p := range nonViolatingVictims {
|
||||||
reprievePod(p)
|
if _, err := reprievePod(p); err != nil {
|
||||||
|
klog.Warningf("Failed to reprieve pod %q: %v", p.Name, err)
|
||||||
|
return nil, 0, false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return victims, numViolatingVictim, true
|
return victims, numViolatingVictim, true
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user