From 7dcf1fe5f8b06e9f06247bd0fdd49442f7028727 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Tue, 5 Feb 2019 12:29:37 -0600 Subject: [PATCH] kubelet: set low oom_score_adj for containers in critical pods --- pkg/kubelet/qos/BUILD | 2 ++ pkg/kubelet/qos/policy.go | 8 +++++++- pkg/kubelet/qos/policy_test.go | 22 +++++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/qos/BUILD b/pkg/kubelet/qos/BUILD index 634175a6e9..e068804aab 100644 --- a/pkg/kubelet/qos/BUILD +++ b/pkg/kubelet/qos/BUILD @@ -11,6 +11,7 @@ go_test( srcs = ["policy_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/apis/scheduling:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", ], @@ -25,6 +26,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubelet/qos", deps = [ "//pkg/apis/core/v1/helper/qos:go_default_library", + "//pkg/kubelet/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", ], ) diff --git a/pkg/kubelet/qos/policy.go b/pkg/kubelet/qos/policy.go index b7177d2a4f..344b0d99ce 100644 --- a/pkg/kubelet/qos/policy.go +++ b/pkg/kubelet/qos/policy.go @@ -17,8 +17,9 @@ limitations under the License. package qos import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" + "k8s.io/kubernetes/pkg/kubelet/types" ) const ( @@ -41,6 +42,11 @@ const ( // and 1000. Containers with higher OOM scores are killed if the system runs out of memory. // See https://lwn.net/Articles/391222/ for more information. func GetContainerOOMScoreAdjust(pod *v1.Pod, container *v1.Container, memoryCapacity int64) int { + if types.IsCriticalPod(pod) { + // Critical pods should be the last to get killed. + return guaranteedOOMScoreAdj + } + switch v1qos.GetPodQOS(pod) { case v1.PodQOSGuaranteed: // Guaranteed containers should be the last to get killed. diff --git a/pkg/kubelet/qos/policy_test.go b/pkg/kubelet/qos/policy_test.go index b713766960..deebc43978 100644 --- a/pkg/kubelet/qos/policy_test.go +++ b/pkg/kubelet/qos/policy_test.go @@ -20,8 +20,9 @@ import ( "strconv" "testing" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/kubernetes/pkg/apis/scheduling" ) const ( @@ -135,6 +136,19 @@ var ( }, }, } + + systemCritical = scheduling.SystemCriticalPriority + + critical = v1.Pod{ + Spec: v1.PodSpec{ + Priority: &systemCritical, + Containers: []v1.Container{ + { + Resources: v1.ResourceRequirements{}, + }, + }, + }, + } ) type oomTest struct { @@ -188,6 +202,12 @@ func TestGetContainerOOMScoreAdjust(t *testing.T) { lowOOMScoreAdj: 2, highOOMScoreAdj: 2, }, + { + pod: &critical, + memoryCapacity: 4000000000, + lowOOMScoreAdj: -998, + highOOMScoreAdj: -998, + }, } for _, test := range oomTests { oomScoreAdj := GetContainerOOMScoreAdjust(test.pod, &test.pod.Spec.Containers[0], test.memoryCapacity)