From 73abcdc0deaacfa6e435009f1598c7db83cef233 Mon Sep 17 00:00:00 2001 From: j4ckstraw Date: Mon, 29 Jan 2024 20:27:39 +0800 Subject: [PATCH 1/2] feat: export mid resource metrics Signed-off-by: j4ckstraw --- pkg/koordlet/statesinformer/impl/states_node.go | 6 ++++++ pkg/koordlet/statesinformer/impl/states_pods.go | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/pkg/koordlet/statesinformer/impl/states_node.go b/pkg/koordlet/statesinformer/impl/states_node.go index 58ca0946b..c2c212b88 100644 --- a/pkg/koordlet/statesinformer/impl/states_node.go +++ b/pkg/koordlet/statesinformer/impl/states_node.go @@ -206,4 +206,10 @@ func recordNodeResources(node *corev1.Node) { metrics.RecordNodeResourceAllocatable(string(apiext.BatchCPU), metrics.UnitInteger, float64(batchCPU.Value())) batchMemory := node.Status.Allocatable.Name(apiext.BatchMemory, resource.BinarySI) metrics.RecordNodeResourceAllocatable(string(apiext.BatchMemory), metrics.UnitByte, float64(batchMemory.Value())) + + // record node allocatable of MidCPU & MidMemory + midCPU := node.Status.Allocatable.Name(apiext.MidCPU, resource.DecimalSI) + metrics.RecordNodeResourceAllocatable(string(apiext.MidCPU), metrics.UnitInteger, float64(midCPU.Value())) + midMemory := node.Status.Allocatable.Name(apiext.MidMemory, resource.BinarySI) + metrics.RecordNodeResourceAllocatable(string(apiext.MidMemory), metrics.UnitByte, float64(midMemory.Value())) } diff --git a/pkg/koordlet/statesinformer/impl/states_pods.go b/pkg/koordlet/statesinformer/impl/states_pods.go index d3747d9b9..116ec27da 100644 --- a/pkg/koordlet/statesinformer/impl/states_pods.go +++ b/pkg/koordlet/statesinformer/impl/states_pods.go @@ -291,4 +291,17 @@ func recordContainerResourceMetrics(container *corev1.Container, containerStatus if q, ok := container.Resources.Limits[apiext.BatchMemory]; ok { metrics.RecordContainerResourceLimits(string(apiext.BatchMemory), metrics.UnitByte, containerStatus, pod, float64(util.QuantityPtr(q).Value())) } + // record pod requests/limits of MidCPU & MidMemory + if q, ok := container.Resources.Requests[apiext.MidCPU]; ok { + metrics.RecordContainerResourceRequests(string(apiext.MidCPU), metrics.UnitInteger, containerStatus, pod, float64(util.QuantityPtr(q).Value())) + } + if q, ok := container.Resources.Requests[apiext.MidMemory]; ok { + metrics.RecordContainerResourceRequests(string(apiext.MidMemory), metrics.UnitInteger, containerStatus, pod, float64(util.QuantityPtr(q).Value())) + } + if q, ok := container.Resources.Limits[apiext.MidCPU]; ok { + metrics.RecordContainerResourceLimits(string(apiext.MidCPU), metrics.UnitByte, containerStatus, pod, float64(util.QuantityPtr(q).Value())) + } + if q, ok := container.Resources.Limits[apiext.MidMemory]; ok { + metrics.RecordContainerResourceLimits(string(apiext.MidMemory), metrics.UnitByte, containerStatus, pod, float64(util.QuantityPtr(q).Value())) + } } From cc0b0e5405ca1809af97799e6cb2180b63f23463 Mon Sep 17 00:00:00 2001 From: j4ckstraw Date: Tue, 30 Jan 2024 09:27:53 +0800 Subject: [PATCH 2/2] add test for koordlet metric Signed-off-by: j4ckstraw --- pkg/koordlet/metrics/metrics_test.go | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pkg/koordlet/metrics/metrics_test.go b/pkg/koordlet/metrics/metrics_test.go index 20d887c4c..c27f45c49 100644 --- a/pkg/koordlet/metrics/metrics_test.go +++ b/pkg/koordlet/metrics/metrics_test.go @@ -163,12 +163,16 @@ func TestResourceSummaryCollectors(t *testing.T) { corev1.ResourceMemory: resource.MustParse("200Gi"), apiext.BatchCPU: resource.MustParse("50000"), apiext.BatchMemory: resource.MustParse("80Gi"), + apiext.MidCPU: resource.MustParse("50000"), + apiext.MidMemory: resource.MustParse("80Gi"), }, Capacity: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("100"), corev1.ResourceMemory: resource.MustParse("200Gi"), apiext.BatchCPU: resource.MustParse("50000"), apiext.BatchMemory: resource.MustParse("80Gi"), + apiext.MidCPU: resource.MustParse("50000"), + apiext.MidMemory: resource.MustParse("80Gi"), }, }, } @@ -236,6 +240,38 @@ func TestResourceSummaryCollectors(t *testing.T) { }, }, } + testingMidPod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test_mid_pod", + Namespace: "test_mid_pod_namespace", + UID: "mid01", + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "test_mid_container", + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + apiext.MidCPU: resource.MustParse("1000"), + apiext.MidMemory: resource.MustParse("2Gi"), + }, + Limits: corev1.ResourceList{ + apiext.MidCPU: resource.MustParse("1000"), + apiext.MidMemory: resource.MustParse("2Gi"), + }, + }, + }, + }, + }, + Status: corev1.PodStatus{ + ContainerStatuses: []corev1.ContainerStatus{ + { + Name: "test_mid_container", + ContainerID: "containerd://midxxx", + }, + }, + }, + } t.Run("test not panic", func(t *testing.T) { Register(testingNode) @@ -243,12 +279,18 @@ func TestResourceSummaryCollectors(t *testing.T) { RecordNodeResourceAllocatable(string(apiext.BatchCPU), UnitInteger, float64(util.QuantityPtr(testingNode.Status.Allocatable[apiext.BatchCPU]).Value())) RecordNodeResourceAllocatable(string(apiext.BatchMemory), UnitByte, float64(util.QuantityPtr(testingNode.Status.Allocatable[apiext.BatchMemory]).Value())) + RecordNodeResourceAllocatable(string(apiext.MidCPU), UnitInteger, float64(util.QuantityPtr(testingNode.Status.Allocatable[apiext.MidCPU]).Value())) + RecordNodeResourceAllocatable(string(apiext.MidMemory), UnitByte, float64(util.QuantityPtr(testingNode.Status.Allocatable[apiext.MidMemory]).Value())) RecordContainerResourceRequests(string(corev1.ResourceCPU), UnitCore, &testingPod.Status.ContainerStatuses[0], testingPod, float64(testingPod.Spec.Containers[0].Resources.Requests.Cpu().Value())) RecordContainerResourceRequests(string(corev1.ResourceMemory), UnitByte, &testingPod.Status.ContainerStatuses[0], testingPod, float64(testingPod.Spec.Containers[0].Resources.Requests.Memory().Value())) RecordContainerResourceRequests(string(apiext.BatchCPU), UnitInteger, &testingBatchPod.Status.ContainerStatuses[0], testingBatchPod, float64(util.QuantityPtr(testingBatchPod.Spec.Containers[0].Resources.Requests[apiext.BatchCPU]).Value())) RecordContainerResourceRequests(string(apiext.BatchMemory), UnitByte, &testingBatchPod.Status.ContainerStatuses[0], testingBatchPod, float64(util.QuantityPtr(testingBatchPod.Spec.Containers[0].Resources.Requests[apiext.BatchMemory]).Value())) + RecordContainerResourceRequests(string(apiext.MidCPU), UnitInteger, &testingMidPod.Status.ContainerStatuses[0], testingMidPod, float64(util.QuantityPtr(testingMidPod.Spec.Containers[0].Resources.Requests[apiext.MidCPU]).Value())) + RecordContainerResourceRequests(string(apiext.MidMemory), UnitByte, &testingMidPod.Status.ContainerStatuses[0], testingMidPod, float64(util.QuantityPtr(testingMidPod.Spec.Containers[0].Resources.Requests[apiext.MidMemory]).Value())) RecordContainerResourceLimits(string(apiext.BatchCPU), UnitInteger, &testingBatchPod.Status.ContainerStatuses[0], testingBatchPod, float64(util.QuantityPtr(testingBatchPod.Spec.Containers[0].Resources.Limits[apiext.BatchCPU]).Value())) RecordContainerResourceLimits(string(apiext.BatchMemory), UnitByte, &testingBatchPod.Status.ContainerStatuses[0], testingBatchPod, float64(util.QuantityPtr(testingBatchPod.Spec.Containers[0].Resources.Limits[apiext.BatchMemory]).Value())) + RecordContainerResourceLimits(string(apiext.MidCPU), UnitInteger, &testingMidPod.Status.ContainerStatuses[0], testingMidPod, float64(util.QuantityPtr(testingMidPod.Spec.Containers[0].Resources.Limits[apiext.MidCPU]).Value())) + RecordContainerResourceLimits(string(apiext.MidMemory), UnitByte, &testingMidPod.Status.ContainerStatuses[0], testingMidPod, float64(util.QuantityPtr(testingMidPod.Spec.Containers[0].Resources.Limits[apiext.MidMemory]).Value())) ResetContainerResourceRequests() ResetContainerResourceLimits()