From b367177f3ff08e462a51993b3bcc1b17d3700d8b Mon Sep 17 00:00:00 2001 From: "Da K. Ma" Date: Thu, 8 Mar 2018 09:25:06 +0800 Subject: [PATCH] Admit BestEffort if it tolerates memory pressure. Signed-off-by: Da K. Ma --- pkg/kubelet/eviction/BUILD | 2 ++ pkg/kubelet/eviction/eviction_manager.go | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/pkg/kubelet/eviction/BUILD b/pkg/kubelet/eviction/BUILD index 33c570f3b43..7eb9a2dc121 100644 --- a/pkg/kubelet/eviction/BUILD +++ b/pkg/kubelet/eviction/BUILD @@ -78,6 +78,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubelet/eviction", deps = [ "//pkg/api/v1/resource:go_default_library", + "//pkg/apis/core/v1/helper:go_default_library", "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/features:go_default_library", "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", @@ -89,6 +90,7 @@ go_library( "//pkg/kubelet/server/stats:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/format:go_default_library", + "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/util:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/kubelet/eviction/eviction_manager.go b/pkg/kubelet/eviction/eviction_manager.go index 19d23e712f9..d8dbaab25be 100644 --- a/pkg/kubelet/eviction/eviction_manager.go +++ b/pkg/kubelet/eviction/eviction_manager.go @@ -31,6 +31,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" apiv1resource "k8s.io/kubernetes/pkg/api/v1/resource" + v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" "k8s.io/kubernetes/pkg/features" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" @@ -42,6 +43,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/server/stats" kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" + "k8s.io/kubernetes/pkg/scheduler/algorithm" ) const ( @@ -136,6 +138,16 @@ func (m *managerImpl) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAd if notBestEffort { return lifecycle.PodAdmitResult{Admit: true} } + + // When node has memory pressure and TaintNodesByCondition is enabled, check BestEffort Pod's toleration: + // admit it if tolerates memory pressure taint, fail for other tolerations, e.g. OutOfDisk. + if utilfeature.DefaultFeatureGate.Enabled(features.TaintNodesByCondition) && + v1helper.TolerationsTolerateTaint(attrs.Pod.Spec.Tolerations, &v1.Taint{ + Key: algorithm.TaintNodeMemoryPressure, + Effect: v1.TaintEffectNoSchedule, + }) { + return lifecycle.PodAdmitResult{Admit: true} + } } // reject pods when under memory pressure (if pod is best effort), or if under disk pressure.