mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
optimize anti-affinity predicate
This commit is contained in:
parent
b141a990c3
commit
2d3c8fe6b9
@ -780,7 +780,6 @@ func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, allNodes []*sched
|
|||||||
return newTopologyPairsMaps(), newTopologyPairsMaps(), nil
|
return newTopologyPairsMaps(), newTopologyPairsMaps(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
errCh := schedutil.NewErrorChannel()
|
|
||||||
var lock sync.Mutex
|
var lock sync.Mutex
|
||||||
topologyPairsAffinityPodsMaps = newTopologyPairsMaps()
|
topologyPairsAffinityPodsMaps = newTopologyPairsMaps()
|
||||||
topologyPairsAntiAffinityPodsMaps = newTopologyPairsMaps()
|
topologyPairsAntiAffinityPodsMaps = newTopologyPairsMaps()
|
||||||
@ -802,8 +801,10 @@ func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, allNodes []*sched
|
|||||||
}
|
}
|
||||||
|
|
||||||
antiAffinityTerms := GetPodAntiAffinityTerms(affinity.PodAntiAffinity)
|
antiAffinityTerms := GetPodAntiAffinityTerms(affinity.PodAntiAffinity)
|
||||||
|
antiAffinityProperties, err := getAffinityTermProperties(pod, antiAffinityTerms)
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
processNode := func(i int) {
|
processNode := func(i int) {
|
||||||
nodeInfo := allNodes[i]
|
nodeInfo := allNodes[i]
|
||||||
@ -825,14 +826,9 @@ func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, allNodes []*sched
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check anti-affinity properties.
|
// Check anti-affinity properties.
|
||||||
for _, term := range antiAffinityTerms {
|
for i, term := range antiAffinityTerms {
|
||||||
namespaces := priorityutil.GetNamespacesFromPodAffinityTerm(pod, &term)
|
p := antiAffinityProperties[i]
|
||||||
selector, err := metav1.LabelSelectorAsSelector(term.LabelSelector)
|
if priorityutil.PodMatchesTermsNamespaceAndSelector(existingPod, p.namespaces, p.selector) {
|
||||||
if err != nil {
|
|
||||||
errCh.SendErrorWithCancel(err, cancel)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if priorityutil.PodMatchesTermsNamespaceAndSelector(existingPod, namespaces, selector) {
|
|
||||||
if topologyValue, ok := node.Labels[term.TopologyKey]; ok {
|
if topologyValue, ok := node.Labels[term.TopologyKey]; ok {
|
||||||
pair := topologyPair{key: term.TopologyKey, value: topologyValue}
|
pair := topologyPair{key: term.TopologyKey, value: topologyValue}
|
||||||
nodeTopologyPairsAntiAffinityPodsMaps.addTopologyPair(pair, existingPod)
|
nodeTopologyPairsAntiAffinityPodsMaps.addTopologyPair(pair, existingPod)
|
||||||
@ -845,11 +841,7 @@ func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, allNodes []*sched
|
|||||||
appendResult(node.Name, nodeTopologyPairsAffinityPodsMaps, nodeTopologyPairsAntiAffinityPodsMaps)
|
appendResult(node.Name, nodeTopologyPairsAffinityPodsMaps, nodeTopologyPairsAntiAffinityPodsMaps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
workqueue.ParallelizeUntil(ctx, 16, len(allNodes), processNode)
|
workqueue.ParallelizeUntil(context.Background(), 16, len(allNodes), processNode)
|
||||||
|
|
||||||
if err := errCh.ReceiveError(); err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return topologyPairsAffinityPodsMaps, topologyPairsAntiAffinityPodsMaps, nil
|
return topologyPairsAffinityPodsMaps, topologyPairsAntiAffinityPodsMaps, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user