From 89fae63c1a4b1446c875941cbc9b8c3b87b947e9 Mon Sep 17 00:00:00 2001 From: j4ckstraw Date: Tue, 30 Jan 2024 15:52:11 +0800 Subject: [PATCH] koordlet: export mid resource metrics (#1874) Signed-off-by: j4ckstraw --- pkg/koordlet/metrics/metrics_test.go | 42 +++++++++++++++++++ .../statesinformer/impl/states_node.go | 6 +++ .../statesinformer/impl/states_pods.go | 13 ++++++ 3 files changed, 61 insertions(+) diff --git a/pkg/koordlet/metrics/metrics_test.go b/pkg/koordlet/metrics/metrics_test.go index 281fa67be..0ae8a3f7d 100644 --- a/pkg/koordlet/metrics/metrics_test.go +++ b/pkg/koordlet/metrics/metrics_test.go @@ -162,12 +162,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"), }, }, } @@ -235,6 +239,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) @@ -242,12 +278,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() diff --git a/pkg/koordlet/statesinformer/impl/states_node.go b/pkg/koordlet/statesinformer/impl/states_node.go index 39ddc2651..f62f989c4 100644 --- a/pkg/koordlet/statesinformer/impl/states_node.go +++ b/pkg/koordlet/statesinformer/impl/states_node.go @@ -179,4 +179,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 4acf795db..08c0448c9 100644 --- a/pkg/koordlet/statesinformer/impl/states_pods.go +++ b/pkg/koordlet/statesinformer/impl/states_pods.go @@ -294,4 +294,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())) + } }