mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Merge pull request #80491 from hpandeycodeit/static_pod_priority
Changed IsCriticalPod to return true in case of static pods
This commit is contained in:
commit
806ced34a4
@ -56,7 +56,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",
|
||||
|
@ -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"
|
||||
@ -547,7 +546,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
|
||||
|
@ -1634,7 +1634,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 {
|
||||
|
@ -307,7 +307,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] = ""
|
||||
|
@ -559,7 +559,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))
|
||||
|
@ -519,7 +519,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()
|
||||
@ -805,7 +805,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))
|
||||
|
||||
|
@ -146,6 +146,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 pod.Spec.Priority != nil && IsCriticalPodBasedOnPriority(*pod.Spec.Priority) {
|
||||
return true
|
||||
}
|
||||
@ -193,3 +196,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
|
||||
}
|
||||
|
@ -171,6 +171,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)
|
||||
|
Loading…
Reference in New Issue
Block a user