From 30063c263f44701b4758d0129405257dd9db0148 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Thu, 8 Aug 2019 12:56:16 -0500 Subject: [PATCH] UPSTREAM: 80491: Changed IsCriticalPod to return true in case of static pods --- vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD | 1 - .../pkg/kubelet/eviction/eviction_manager.go | 3 +-- vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go | 2 +- .../k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go | 2 +- .../kubernetes/pkg/kubelet/status/status_manager.go | 2 +- .../pkg/kubelet/status/status_manager_test.go | 4 ++-- .../kubernetes/pkg/kubelet/types/pod_update.go | 11 ++++++++++- .../kubernetes/pkg/kubelet/types/pod_update_test.go | 12 ++++++++++++ 8 files changed, 28 insertions(+), 9 deletions(-) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD index 65968751a8d2..11cb9c2c7186 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/BUILD @@ -57,7 +57,6 @@ go_library( "//pkg/kubelet/eviction/api:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/metrics:go_default_library", - "//pkg/kubelet/pod:go_default_library", "//pkg/kubelet/server/stats:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/format:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go index 919a1a5e0a71..3abef50ce321 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/eviction/eviction_manager.go @@ -37,7 +37,6 @@ import ( evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/metrics" - kubepod "k8s.io/kubernetes/pkg/kubelet/pod" "k8s.io/kubernetes/pkg/kubelet/server/stats" kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" @@ -548,7 +547,7 @@ func (m *managerImpl) evictPod(pod *v1.Pod, gracePeriodOverride int64, evictMsg // If the pod is marked as critical and static, and support for critical pod annotations is enabled, // do not evict such pods. Static pods are not re-admitted after evictions. // https://github.com/kubernetes/kubernetes/issues/40573 has more details. - if kubepod.IsStaticPod(pod) { + if kubelettypes.IsStaticPod(pod) { // need mirrorPod to check its "priority" value; static pod doesn't carry it if mirrorPod, ok := m.mirrorPodFunc(pod); ok && mirrorPod != nil { // skip only when it's a static and critical pod diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go index 6926c4d9a6b7..e70d4d70c5ca 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go @@ -1644,7 +1644,7 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { } // Create Mirror Pod for Static Pod if it doesn't already exist - if kubepod.IsStaticPod(pod) { + if kubetypes.IsStaticPod(pod) { podFullName := kubecontainer.GetPodFullName(pod) deleted := false if mirrorPod != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go index 5b708ef2a1ce..066e44f3cda5 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go @@ -287,7 +287,7 @@ func (pm *basicManager) GetUIDTranslations() (podToMirror map[kubetypes.Resolved mirrorToPod = make(map[kubetypes.MirrorPodUID]kubetypes.ResolvedPodUID, len(pm.translationByUID)) // Insert empty translation mapping for all static pods. for uid, pod := range pm.podByUID { - if !IsStaticPod(pod) { + if !kubetypes.IsStaticPod(pod) { continue } podToMirror[uid] = "" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go index 9bb3a69b4196..d867985dcc36 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go @@ -577,7 +577,7 @@ func (m *manager) needsReconcile(uid types.UID, status v1.PodStatus) bool { return false } // If the pod is a static pod, we should check its mirror pod, because only status in mirror pod is meaningful to us. - if kubepod.IsStaticPod(pod) { + if kubetypes.IsStaticPod(pod) { mirrorPod, ok := m.podManager.GetMirrorPodByPod(pod) if !ok { klog.V(4).Infof("Static pod %q has no corresponding mirror pod, no need to reconcile", format.Pod(pod)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go index 8b64f11646c9..7d597c8ec47a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go @@ -520,7 +520,7 @@ func TestStaticPod(t *testing.T) { t.Logf("Create the static pod") m.podManager.AddPod(staticPod) - assert.True(t, kubepod.IsStaticPod(staticPod), "SetUp error: staticPod") + assert.True(t, kubetypes.IsStaticPod(staticPod), "SetUp error: staticPod") status := getRandomPodStatus() now := metav1.Now() @@ -836,7 +836,7 @@ func TestDoNotDeleteMirrorPods(t *testing.T) { m.podManager.AddPod(staticPod) m.podManager.AddPod(mirrorPod) t.Logf("Verify setup.") - assert.True(t, kubepod.IsStaticPod(staticPod), "SetUp error: staticPod") + assert.True(t, kubetypes.IsStaticPod(staticPod), "SetUp error: staticPod") assert.True(t, kubepod.IsMirrorPod(mirrorPod), "SetUp error: mirrorPod") assert.Equal(t, m.podManager.TranslatePodUID(mirrorPod.UID), kubetypes.ResolvedPodUID(staticPod.UID)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go index b8017e6a4963..571309f5021b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" kubeapi "k8s.io/kubernetes/pkg/apis/core" @@ -147,6 +147,9 @@ func (sp SyncPodType) String() string { // or equal to SystemCriticalPriority. Both the default scheduler and the kubelet use this function // to make admission and scheduling decisions. func IsCriticalPod(pod *v1.Pod) bool { + if IsStaticPod(pod) { + return true + } if utilfeature.DefaultFeatureGate.Enabled(features.PodPriority) { if pod.Spec.Priority != nil && IsCriticalPodBasedOnPriority(*pod.Spec.Priority) { return true @@ -202,3 +205,9 @@ func IsCriticalPodBasedOnPriority(priority int32) bool { } return false } + +// IsStaticPod returns true if the pod is a static pod. +func IsStaticPod(pod *v1.Pod) bool { + source, err := GetPodSource(pod) + return err == nil && source != ApiserverSource +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go index 33551173392b..66ef83686d85 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go @@ -184,6 +184,18 @@ func TestIsCriticalPod(t *testing.T) { }, expected: true, }, + { + pod: v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod5", + Namespace: "kube-system", + Annotations: map[string]string{ + ConfigSourceAnnotationKey: "abc", + }, + }, + }, + expected: true, + }, } for i, data := range cases { actual := IsCriticalPod(&data.pod)