scheduler: add pod Overhead support for requests

Signed-off-by: Eric Ernst <eric.ernst@intel.com>
This commit is contained in:
Eric Ernst
2019-05-23 10:47:17 -07:00
parent 30c9f097ca
commit 62e9717386
5 changed files with 134 additions and 16 deletions

View File

@@ -26,6 +26,9 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/kubernetes/pkg/features"
)
func TestNewResource(t *testing.T) {
@@ -540,6 +543,9 @@ func TestNodeInfoClone(t *testing.T) {
}
func TestNodeInfoAddPod(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PodOverhead, true)()
nodeName := "test-node"
pods := []*v1.Pod{
{
@@ -567,6 +573,9 @@ func TestNodeInfoAddPod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
},
},
},
{
@@ -580,8 +589,7 @@ func TestNodeInfoAddPod(t *testing.T) {
{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("200m"),
v1.ResourceMemory: resource.MustParse("1Ki"),
v1.ResourceCPU: resource.MustParse("200m"),
},
},
Ports: []v1.ContainerPort{
@@ -594,6 +602,10 @@ func TestNodeInfoAddPod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
}
@@ -604,15 +616,15 @@ func TestNodeInfoAddPod(t *testing.T) {
},
},
requestedResource: &Resource{
MilliCPU: 300,
Memory: 1524,
MilliCPU: 1300,
Memory: 1000,
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
},
nonzeroRequest: &Resource{
MilliCPU: 300,
Memory: 1524,
MilliCPU: 1300,
Memory: 209716200, //200MB + 1000 specified in requests/overhead
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
@@ -653,6 +665,9 @@ func TestNodeInfoAddPod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
},
},
},
{
@@ -666,8 +681,7 @@ func TestNodeInfoAddPod(t *testing.T) {
{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("200m"),
v1.ResourceMemory: resource.MustParse("1Ki"),
v1.ResourceCPU: resource.MustParse("200m"),
},
},
Ports: []v1.ContainerPort{
@@ -680,6 +694,10 @@ func TestNodeInfoAddPod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
},
@@ -702,12 +720,23 @@ func TestNodeInfoAddPod(t *testing.T) {
}
func TestNodeInfoRemovePod(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PodOverhead, true)()
nodeName := "test-node"
pods := []*v1.Pod{
makeBasePod(t, nodeName, "test-1", "100m", "500", "", []v1.ContainerPort{{HostIP: "127.0.0.1", HostPort: 80, Protocol: "TCP"}}),
makeBasePod(t, nodeName, "test-2", "200m", "1Ki", "", []v1.ContainerPort{{HostIP: "127.0.0.1", HostPort: 8080, Protocol: "TCP"}}),
}
// add pod Overhead
for _, pod := range pods {
pod.Spec.Overhead = v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
}
}
tests := []struct {
pod *v1.Pod
errExpected bool
@@ -723,15 +752,15 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
requestedResource: &Resource{
MilliCPU: 300,
Memory: 1524,
MilliCPU: 1300,
Memory: 2524,
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
},
nonzeroRequest: &Resource{
MilliCPU: 300,
Memory: 1524,
MilliCPU: 1300,
Memory: 2524,
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
@@ -772,6 +801,10 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
{
@@ -799,6 +832,10 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
},
@@ -830,6 +867,10 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
errExpected: false,
@@ -840,15 +881,15 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
requestedResource: &Resource{
MilliCPU: 200,
Memory: 1024,
MilliCPU: 700,
Memory: 1524,
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
},
nonzeroRequest: &Resource{
MilliCPU: 200,
Memory: 1024,
MilliCPU: 700,
Memory: 1524,
EphemeralStorage: 0,
AllowedPodNumber: 0,
ScalarResources: map[v1.ResourceName]int64(nil),
@@ -888,6 +929,10 @@ func TestNodeInfoRemovePod(t *testing.T) {
},
},
NodeName: nodeName,
Overhead: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("500m"),
v1.ResourceMemory: resource.MustParse("500"),
},
},
},
},