mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
scheduler: code clean up for predicates/metadata
This commit is contained in:
parent
d92a250636
commit
bcaa991676
@ -37,7 +37,7 @@ import (
|
|||||||
// PredicateMetadata interface represents anything that can access a predicate metadata.
|
// PredicateMetadata interface represents anything that can access a predicate metadata.
|
||||||
type PredicateMetadata interface {
|
type PredicateMetadata interface {
|
||||||
ShallowCopy() PredicateMetadata
|
ShallowCopy() PredicateMetadata
|
||||||
AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error
|
AddPod(addedPod *v1.Pod, node *v1.Node) error
|
||||||
RemovePod(deletedPod *v1.Pod, node *v1.Node) error
|
RemovePod(deletedPod *v1.Pod, node *v1.Node) error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,8 +350,10 @@ func NodeLabelsMatchSpreadConstraints(nodeLabels map[string]string, constraints
|
|||||||
|
|
||||||
// returns a pointer to a new topologyPairsMaps
|
// returns a pointer to a new topologyPairsMaps
|
||||||
func newTopologyPairsMaps() *topologyPairsMaps {
|
func newTopologyPairsMaps() *topologyPairsMaps {
|
||||||
return &topologyPairsMaps{topologyPairToPods: make(map[topologyPair]podSet),
|
return &topologyPairsMaps{
|
||||||
podToTopologyPairs: make(map[string]topologyPairSet)}
|
topologyPairToPods: make(map[topologyPair]podSet),
|
||||||
|
podToTopologyPairs: make(map[string]topologyPairSet),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *topologyPairsMaps) addTopologyPair(pair topologyPair, pod *v1.Pod) {
|
func (m *topologyPairsMaps) addTopologyPair(pair topologyPair, pod *v1.Pod) {
|
||||||
@ -478,18 +480,18 @@ func (meta *predicateMetadata) RemovePod(deletedPod *v1.Pod, node *v1.Node) erro
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddPod changes predicateMetadata assuming that `newPod` is added to the
|
// AddPod changes predicateMetadata assuming that the given `addedPod` is added to the
|
||||||
// system.
|
// system.
|
||||||
func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error {
|
func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, node *v1.Node) error {
|
||||||
addedPodFullName := schedutil.GetPodFullName(addedPod)
|
addedPodFullName := schedutil.GetPodFullName(addedPod)
|
||||||
if addedPodFullName == schedutil.GetPodFullName(meta.pod) {
|
if addedPodFullName == schedutil.GetPodFullName(meta.pod) {
|
||||||
return fmt.Errorf("addedPod and meta.pod must not be the same")
|
return fmt.Errorf("addedPod and meta.pod must not be the same")
|
||||||
}
|
}
|
||||||
if nodeInfo.Node() == nil {
|
if node == nil {
|
||||||
return fmt.Errorf("invalid node in nodeInfo")
|
return fmt.Errorf("node not found")
|
||||||
}
|
}
|
||||||
// Add matching anti-affinity terms of the addedPod to the map.
|
// Add matching anti-affinity terms of the addedPod to the map.
|
||||||
topologyPairsMaps, err := getMatchingAntiAffinityTopologyPairsOfPod(meta.pod, addedPod, nodeInfo.Node())
|
topologyPairsMaps, err := getMatchingAntiAffinityTopologyPairsOfPod(meta.pod, addedPod, node)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -498,14 +500,13 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei
|
|||||||
affinity := meta.pod.Spec.Affinity
|
affinity := meta.pod.Spec.Affinity
|
||||||
podNodeName := addedPod.Spec.NodeName
|
podNodeName := addedPod.Spec.NodeName
|
||||||
if affinity != nil && len(podNodeName) > 0 {
|
if affinity != nil && len(podNodeName) > 0 {
|
||||||
podNode := nodeInfo.Node()
|
|
||||||
// It is assumed that when the added pod matches affinity of the meta.pod, all the terms must match,
|
// It is assumed that when the added pod matches affinity of the meta.pod, all the terms must match,
|
||||||
// this should be changed when the implementation of targetPodMatchesAffinityOfPod/podMatchesAffinityTermProperties
|
// this should be changed when the implementation of targetPodMatchesAffinityOfPod/podMatchesAffinityTermProperties
|
||||||
// is changed
|
// is changed
|
||||||
if targetPodMatchesAffinityOfPod(meta.pod, addedPod) {
|
if targetPodMatchesAffinityOfPod(meta.pod, addedPod) {
|
||||||
affinityTerms := GetPodAffinityTerms(affinity.PodAffinity)
|
affinityTerms := GetPodAffinityTerms(affinity.PodAffinity)
|
||||||
for _, term := range affinityTerms {
|
for _, term := range affinityTerms {
|
||||||
if topologyValue, ok := podNode.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}
|
||||||
meta.topologyPairsPotentialAffinityPods.addTopologyPair(pair, addedPod)
|
meta.topologyPairsPotentialAffinityPods.addTopologyPair(pair, addedPod)
|
||||||
}
|
}
|
||||||
@ -514,7 +515,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei
|
|||||||
if targetPodMatchesAntiAffinityOfPod(meta.pod, addedPod) {
|
if targetPodMatchesAntiAffinityOfPod(meta.pod, addedPod) {
|
||||||
antiAffinityTerms := GetPodAntiAffinityTerms(affinity.PodAntiAffinity)
|
antiAffinityTerms := GetPodAntiAffinityTerms(affinity.PodAntiAffinity)
|
||||||
for _, term := range antiAffinityTerms {
|
for _, term := range antiAffinityTerms {
|
||||||
if topologyValue, ok := podNode.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}
|
||||||
meta.topologyPairsPotentialAntiAffinityPods.addTopologyPair(pair, addedPod)
|
meta.topologyPairsPotentialAntiAffinityPods.addTopologyPair(pair, addedPod)
|
||||||
}
|
}
|
||||||
@ -523,7 +524,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei
|
|||||||
}
|
}
|
||||||
// Update meta.podSpreadCache if meta.pod has hard spread constraints
|
// Update meta.podSpreadCache if meta.pod has hard spread constraints
|
||||||
// and addedPod matches that
|
// and addedPod matches that
|
||||||
if err := meta.podSpreadCache.addPod(addedPod, meta.pod, nodeInfo.Node()); err != nil {
|
if err := meta.podSpreadCache.addPod(addedPod, meta.pod, node); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ func TestPredicateMetadata_AddRemovePod(t *testing.T) {
|
|||||||
existingPodsMeta1, nodeInfoMap := getMeta(st.FakePodLister(test.existingPods))
|
existingPodsMeta1, nodeInfoMap := getMeta(st.FakePodLister(test.existingPods))
|
||||||
// Add test.addedPod to existingPodsMeta1 and make sure meta is equal to allPodsMeta
|
// Add test.addedPod to existingPodsMeta1 and make sure meta is equal to allPodsMeta
|
||||||
nodeInfo := nodeInfoMap[test.addedPod.Spec.NodeName]
|
nodeInfo := nodeInfoMap[test.addedPod.Spec.NodeName]
|
||||||
if err := existingPodsMeta1.AddPod(test.addedPod, nodeInfo); err != nil {
|
if err := existingPodsMeta1.AddPod(test.addedPod, nodeInfo.Node()); err != nil {
|
||||||
t.Errorf("error adding pod to meta: %v", err)
|
t.Errorf("error adding pod to meta: %v", err)
|
||||||
}
|
}
|
||||||
if err := predicateMetadataEquivalent(allPodsMeta, existingPodsMeta1); err != nil {
|
if err := predicateMetadataEquivalent(allPodsMeta, existingPodsMeta1); err != nil {
|
||||||
|
@ -597,7 +597,7 @@ func addNominatedPods(pod *v1.Pod, meta predicates.PredicateMetadata,
|
|||||||
if podutil.GetPodPriority(p) >= podutil.GetPodPriority(pod) && p.UID != pod.UID {
|
if podutil.GetPodPriority(p) >= podutil.GetPodPriority(pod) && p.UID != pod.UID {
|
||||||
nodeInfoOut.AddPod(p)
|
nodeInfoOut.AddPod(p)
|
||||||
if metaOut != nil {
|
if metaOut != nil {
|
||||||
if err := metaOut.AddPod(p, nodeInfoOut); err != nil {
|
if err := metaOut.AddPod(p, nodeInfoOut.Node()); err != nil {
|
||||||
klog.Warningf("unable to add pod, nominated pod %s, incoming pod %s: %v", p.Name, pod.Name, err)
|
klog.Warningf("unable to add pod, nominated pod %s, incoming pod %s: %v", p.Name, pod.Name, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1128,7 +1128,7 @@ func (g *genericScheduler) selectVictimsOnNode(
|
|||||||
addPod := func(ap *v1.Pod) error {
|
addPod := func(ap *v1.Pod) error {
|
||||||
nodeInfoCopy.AddPod(ap)
|
nodeInfoCopy.AddPod(ap)
|
||||||
if meta != nil {
|
if meta != nil {
|
||||||
if err := meta.AddPod(ap, nodeInfoCopy); err != nil {
|
if err := meta.AddPod(ap, nodeInfoCopy.Node()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user