Fix MaxPods feature in scheduler
This commit is contained in:
		@@ -2366,10 +2366,24 @@ func TestHandlePortConflicts(t *testing.T) {
 | 
				
			|||||||
	testKubelet.fakeCadvisor.On("RootFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
						testKubelet.fakeCadvisor.On("RootFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
						kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: kl.nodeName}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: kl.nodeName},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
	kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
						kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: kl.nodeName}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: kl.nodeName},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spec := api.PodSpec{NodeName: kl.nodeName, Containers: []api.Container{{Ports: []api.ContainerPort{{HostPort: 80}}}}}
 | 
						spec := api.PodSpec{NodeName: kl.nodeName, Containers: []api.Container{{Ports: []api.ContainerPort{{HostPort: 80}}}}}
 | 
				
			||||||
@@ -2427,10 +2441,24 @@ func TestHandleHostNameConflicts(t *testing.T) {
 | 
				
			|||||||
	testKubelet.fakeCadvisor.On("RootFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
						testKubelet.fakeCadvisor.On("RootFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
						kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: "127.0.0.1"}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: "127.0.0.1"},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
	kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
						kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: "127.0.0.1"}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: "127.0.0.1"},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pods := []*api.Pod{
 | 
						pods := []*api.Pod{
 | 
				
			||||||
@@ -2486,10 +2514,24 @@ func TestHandleNodeSelector(t *testing.T) {
 | 
				
			|||||||
	testKubelet := newTestKubelet(t)
 | 
						testKubelet := newTestKubelet(t)
 | 
				
			||||||
	kl := testKubelet.kubelet
 | 
						kl := testKubelet.kubelet
 | 
				
			||||||
	kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
						kl.nodeLister = testNodeLister{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: testKubeletHostname, Labels: map[string]string{"key": "B"}}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: testKubeletHostname, Labels: map[string]string{"key": "B"}},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
	kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
						kl.nodeInfo = testNodeInfo{nodes: []api.Node{
 | 
				
			||||||
		{ObjectMeta: api.ObjectMeta{Name: testKubeletHostname, Labels: map[string]string{"key": "B"}}},
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: api.ObjectMeta{Name: testKubeletHostname, Labels: map[string]string{"key": "B"}},
 | 
				
			||||||
 | 
								Status: api.NodeStatus{
 | 
				
			||||||
 | 
									Allocatable: api.ResourceList{
 | 
				
			||||||
 | 
										api.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}}
 | 
						}}
 | 
				
			||||||
	testKubelet.fakeCadvisor.On("MachineInfo").Return(&cadvisorapi.MachineInfo{}, nil)
 | 
						testKubelet.fakeCadvisor.On("MachineInfo").Return(&cadvisorapi.MachineInfo{}, nil)
 | 
				
			||||||
	testKubelet.fakeCadvisor.On("DockerImagesFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
						testKubelet.fakeCadvisor.On("DockerImagesFsInfo").Return(cadvisorapiv2.FsInfo{}, nil)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -425,6 +425,10 @@ func podName(pod *api.Pod) string {
 | 
				
			|||||||
func podFitsResourcesInternal(pod *api.Pod, nodeName string, nodeInfo *schedulercache.NodeInfo, info *api.Node) (bool, error) {
 | 
					func podFitsResourcesInternal(pod *api.Pod, nodeName string, nodeInfo *schedulercache.NodeInfo, info *api.Node) (bool, error) {
 | 
				
			||||||
	allocatable := info.Status.Allocatable
 | 
						allocatable := info.Status.Allocatable
 | 
				
			||||||
	allowedPodNumber := allocatable.Pods().Value()
 | 
						allowedPodNumber := allocatable.Pods().Value()
 | 
				
			||||||
 | 
						if int64(len(nodeInfo.Pods()))+1 > allowedPodNumber {
 | 
				
			||||||
 | 
							return false,
 | 
				
			||||||
 | 
								newInsufficientResourceError(podCountResourceName, 1, int64(len(nodeInfo.Pods())), allowedPodNumber)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	podRequest := getResourceRequest(pod)
 | 
						podRequest := getResourceRequest(pod)
 | 
				
			||||||
	if podRequest.milliCPU == 0 && podRequest.memory == 0 {
 | 
						if podRequest.milliCPU == 0 && podRequest.memory == 0 {
 | 
				
			||||||
		return true, nil
 | 
							return true, nil
 | 
				
			||||||
@@ -451,13 +455,6 @@ func (r *NodeStatus) PodFitsResources(pod *api.Pod, nodeName string, nodeInfo *s
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return false, err
 | 
							return false, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// TODO: move the following podNumber check to podFitsResourcesInternal when Kubelet allows podNumber check (See #20263).
 | 
					 | 
				
			||||||
	allocatable := info.Status.Allocatable
 | 
					 | 
				
			||||||
	allowedPodNumber := allocatable.Pods().Value()
 | 
					 | 
				
			||||||
	if int64(len(nodeInfo.Pods()))+1 > allowedPodNumber {
 | 
					 | 
				
			||||||
		return false,
 | 
					 | 
				
			||||||
			newInsufficientResourceError(podCountResourceName, 1, int64(len(nodeInfo.Pods())), allowedPodNumber)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return podFitsResourcesInternal(pod, nodeName, nodeInfo, info)
 | 
						return podFitsResourcesInternal(pod, nodeName, nodeInfo, info)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -775,6 +772,7 @@ func RunGeneralPredicates(pod *api.Pod, nodeName string, nodeInfo *schedulercach
 | 
				
			|||||||
	if !fit {
 | 
						if !fit {
 | 
				
			||||||
		return fit, err
 | 
							return fit, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fit, err = PodFitsHost(pod, nodeName, nodeInfo)
 | 
						fit, err = PodFitsHost(pod, nodeName, nodeInfo)
 | 
				
			||||||
	if !fit {
 | 
						if !fit {
 | 
				
			||||||
		return fit, err
 | 
							return fit, err
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user