mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	fix inter-pod anti-affinity issue
This commit is contained in:
		@@ -96,7 +96,7 @@ func (c *CachedNodeInfo) GetNodeInfo(id string) (*v1.Node, error) {
 | 
			
		||||
	node, err := c.Get(id)
 | 
			
		||||
 | 
			
		||||
	if apierrors.IsNotFound(err) {
 | 
			
		||||
		return nil, fmt.Errorf("node '%v' not found", id)
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -1125,6 +1125,10 @@ func (c *PodAffinityChecker) getMatchingAntiAffinityTerms(pod *v1.Pod, allPods [
 | 
			
		||||
		if affinity != nil && affinity.PodAntiAffinity != nil {
 | 
			
		||||
			existingPodNode, err := c.info.GetNodeInfo(existingPod.Spec.NodeName)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				if apierrors.IsNotFound(err) {
 | 
			
		||||
					glog.Errorf("Node not found, %v", existingPod.Spec.NodeName)
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			existingPodMatchingTerms, err := getMatchingAntiAffinityTermsOfExistingPod(pod, existingPod, existingPodNode)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ go_library(
 | 
			
		||||
        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/api/core/v1"
 | 
			
		||||
	apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/client-go/util/workqueue"
 | 
			
		||||
	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
 | 
			
		||||
@@ -137,6 +138,10 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node
 | 
			
		||||
	processPod := func(existingPod *v1.Pod) error {
 | 
			
		||||
		existingPodNode, err := ipa.info.GetNodeInfo(existingPod.Spec.NodeName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if apierrors.IsNotFound(err) {
 | 
			
		||||
				glog.Errorf("Node not found, %v", existingPod.Spec.NodeName)
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		existingPodAffinity := existingPod.Spec.Affinity
 | 
			
		||||
@@ -189,6 +194,7 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node
 | 
			
		||||
	}
 | 
			
		||||
	processNode := func(i int) {
 | 
			
		||||
		nodeInfo := nodeNameToInfo[allNodeNames[i]]
 | 
			
		||||
		if nodeInfo.Node() != nil {
 | 
			
		||||
			if hasAffinityConstraints || hasAntiAffinityConstraints {
 | 
			
		||||
				// We need to process all the nodes.
 | 
			
		||||
				for _, existingPod := range nodeInfo.Pods() {
 | 
			
		||||
@@ -206,6 +212,7 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	workqueue.Parallelize(16, len(allNodeNames), processNode)
 | 
			
		||||
	if pm.firstError != nil {
 | 
			
		||||
		return nil, pm.firstError
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user