diff --git a/pkg/kubelet/qos/qos.go b/pkg/kubelet/qos/qos.go index df9b1b3640..00e347f9ac 100644 --- a/pkg/kubelet/qos/qos.go +++ b/pkg/kubelet/qos/qos.go @@ -68,11 +68,13 @@ func GetPodQOS(pod *api.Pod) QOSClass { } } // process limits + qosLimitsFound := sets.NewString() for name, quantity := range container.Resources.Limits { if !supportedQoSComputeResources.Has(string(name)) { continue } if quantity.Cmp(zeroQuantity) == 1 { + qosLimitsFound.Insert(string(name)) delta := quantity.Copy() if _, exists := limits[name]; !exists { limits[name] = *delta @@ -82,7 +84,8 @@ func GetPodQOS(pod *api.Pod) QOSClass { } } } - if len(limits) != len(supportedQoSComputeResources) { + + if len(qosLimitsFound) != len(supportedQoSComputeResources) { isGuaranteed = false } } diff --git a/pkg/kubelet/qos/qos_test.go b/pkg/kubelet/qos/qos_test.go index f32d568ca2..de490d44ef 100644 --- a/pkg/kubelet/qos/qos_test.go +++ b/pkg/kubelet/qos/qos_test.go @@ -135,6 +135,12 @@ func TestGetPodQOS(t *testing.T) { }), expected: Burstable, }, + { + pod: newPod("burstable-no-limits", []api.Container{ + newContainer("burstable", getResourceList("100m", "100Mi"), getResourceList("", "")), + }), + expected: Burstable, + }, { pod: newPod("burstable-guaranteed", []api.Container{ newContainer("burstable", getResourceList("1", "100Mi"), getResourceList("2", "100Mi")), @@ -142,6 +148,13 @@ func TestGetPodQOS(t *testing.T) { }), expected: Burstable, }, + { + pod: newPod("burstable-unbounded-but-requests-match-limits", []api.Container{ + newContainer("burstable", getResourceList("100m", "100Mi"), getResourceList("200m", "200Mi")), + newContainer("burstable-unbounded", getResourceList("100m", "100Mi"), getResourceList("", "")), + }), + expected: Burstable, + }, { pod: newPod("burstable-1", []api.Container{ newContainer("burstable", getResourceList("10m", "100Mi"), getResourceList("100m", "200Mi")),