diff --git a/docs/images/node-resource-model.png b/docs/images/node-resource-model.png new file mode 100644 index 000000000..8b7dcb56d Binary files /dev/null and b/docs/images/node-resource-model.png differ diff --git a/pkg/slo-controller/noderesource/plugins/batchresource/plugin.go b/pkg/slo-controller/noderesource/plugins/batchresource/plugin.go index 68db3167a..9f68b86e0 100644 --- a/pkg/slo-controller/noderesource/plugins/batchresource/plugin.go +++ b/pkg/slo-controller/noderesource/plugins/batchresource/plugin.go @@ -211,6 +211,18 @@ func (p *Plugin) calculate(strategy *configuration.ColocationStrategy, node *cor }, nil } +// In order to support the colocation requirements of different enterprise environments, a configurable colocation strategy is provided. +// The resource view from the node perspective is as follows: +// +// https://github.com/koordinator-sh/koordinator/blob/main/docs/images/node-resource-model.png +// +// Typical colocation scenario: +// 1. default policy, and the CPU and memory that can be collocated are automatically calculated based on the load level of the node. +// 2. default policy on CPU, and the Memory is configured not to be overcommitted. This can reduce the probability of batch pods +// being killed due to high memory water levels (reduce the kill rate) +// +// In each scenario, users can also adjust the resource water level configuration according to your own needs and control the deployment +// density of batch pods. func (p *Plugin) calculateOnNode(strategy *configuration.ColocationStrategy, node *corev1.Node, podList *corev1.PodList, resourceMetrics *framework.ResourceMetrics) (corev1.ResourceList, string, string) { // compute the requests and usages according to the pods' priority classes. @@ -293,7 +305,7 @@ func (p *Plugin) calculateOnNode(strategy *configuration.ColocationStrategy, nod "cpu", podsDanglingUsed.Cpu().String(), "memory", podsDanglingUsed.Memory().String()) nodeCapacity := getNodeCapacity(node) - nodeReservation := getNodeReservation(strategy, nodeCapacity) + nodeSafetyMargin := getNodeSafetyMargin(strategy, nodeCapacity) systemUsed := getResourceListForCPUAndMemory(nodeMetric.Status.NodeMetric.SystemUsage.ResourceList) // resource usage of host applications with prod priority will be count as host system usage since they consumes the @@ -303,9 +315,10 @@ func (p *Plugin) calculateOnNode(strategy *configuration.ColocationStrategy, nod // System.Reserved = Node.Anno.Reserved, Node.Kubelet.Reserved) nodeAnnoReserved := util.GetNodeReservationFromAnnotation(node.Annotations) nodeKubeletReserved := util.GetNodeReservationFromKubelet(node) - systemReserved := quotav1.Max(nodeKubeletReserved, nodeAnnoReserved) + // FIXME: resource reservation taking max is rather confusing. + nodeReserved := quotav1.Max(nodeKubeletReserved, nodeAnnoReserved) - batchAllocatable, cpuMsg, memMsg := calculateBatchResourceByPolicy(strategy, nodeCapacity, nodeReservation, systemReserved, + batchAllocatable, cpuMsg, memMsg := calculateBatchResourceByPolicy(strategy, nodeCapacity, nodeSafetyMargin, nodeReserved, systemUsed, podsHPRequest, podsHPUsed, podsHPMaxUsedReq) metrics.RecordNodeExtendedResourceAllocatableInternal(node, string(extension.BatchCPU), metrics.UnitInteger, float64(batchAllocatable.Cpu().MilliValue())/1000) metrics.RecordNodeExtendedResourceAllocatableInternal(node, string(extension.BatchMemory), metrics.UnitByte, float64(batchAllocatable.Memory().Value())) @@ -366,7 +379,7 @@ func (p *Plugin) calculateOnNUMALevel(strategy *configuration.ColocationStrategy systemUsed = quotav1.Add(systemUsed, hostAppHPUsed) nodeAnnoReserved := util.GetNodeReservationFromAnnotation(node.Annotations) nodeKubeletReserved := util.GetNodeReservationFromKubelet(node) - systemReserved := quotav1.Max(nodeKubeletReserved, nodeAnnoReserved) + nodeReserved := quotav1.Max(nodeKubeletReserved, nodeAnnoReserved) for i, zone := range nrt.Zones { zoneIdxMap[i] = zone.Name @@ -380,9 +393,9 @@ func (p *Plugin) calculateOnNUMALevel(strategy *configuration.ColocationStrategy nodeZoneAllocatable[i][corev1.ResourceName(resourceInfo.Name)] = resourceInfo.Allocatable.DeepCopy() } } - nodeZoneReserve[i] = getNodeReservation(strategy, nodeZoneAllocatable[i]) + nodeZoneReserve[i] = getNodeSafetyMargin(strategy, nodeZoneAllocatable[i]) systemZoneUsed[i] = divideResourceList(systemUsed, float64(zoneNum)) - systemZoneReserved[i] = divideResourceList(systemReserved, float64(zoneNum)) + systemZoneReserved[i] = divideResourceList(nodeReserved, float64(zoneNum)) } podMetricMap := make(map[string]*slov1alpha1.PodMetricInfo) podMetricUnknownMap := make(map[string]*slov1alpha1.PodMetricInfo) diff --git a/pkg/slo-controller/noderesource/plugins/batchresource/plugin_test.go b/pkg/slo-controller/noderesource/plugins/batchresource/plugin_test.go index c4782e74c..6746b6826 100644 --- a/pkg/slo-controller/noderesource/plugins/batchresource/plugin_test.go +++ b/pkg/slo-controller/noderesource/plugins/batchresource/plugin_test.go @@ -1694,12 +1694,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1729,12 +1729,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1766,12 +1766,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1803,12 +1803,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(12000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:12000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:20000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:12000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:20000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1840,12 +1840,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(12000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:12000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:20000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:12000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:20000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1878,12 +1878,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(22000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:10000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:10000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1915,12 +1915,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(25, 9), - Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeReservation:42 - systemUsage:20 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:20 - podHPUsed:33", }, }, wantErr: false, @@ -1952,12 +1952,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -1992,12 +1992,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -2032,12 +2032,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(22000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:10000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:10000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(25, 9), - Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeReservation:42 - systemUsage:20 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:20 - podHPUsed:33", }, }, wantErr: false, @@ -2072,12 +2072,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(22000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:10000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:10000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(25, 9), - Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeReservation:42 - systemUsage:20 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:20 - podHPUsed:33", }, }, wantErr: false, @@ -2112,12 +2112,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(22000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:10000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:22000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:10000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(25, 9), - Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeReservation:42 - systemUsage:20 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:25 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:20 - podHPUsed:33", }, }, wantErr: false, @@ -2148,12 +2148,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(30000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(36, 9), - Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeReservation:24 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:0 - podHPRequest:60", }, }, wantErr: false, @@ -2189,12 +2189,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(30000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(31, 9), - Message: "batchAllocatable[Mem(GB)]:31 = nodeCapacity:120 - nodeReservation:24 - systemReserved:5 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:31 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:5 - podHPRequest:60", }, }, wantErr: false, @@ -2230,12 +2230,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(27000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:27000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:10000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:27000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:10000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(16, 9), - Message: "batchAllocatable[Mem(GB)]:16 = nodeCapacity:120 - nodeReservation:24 - systemReserved:20 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:16 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:20 - podHPRequest:60", }, }, wantErr: false, @@ -2271,12 +2271,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(30000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(26, 9), - Message: "batchAllocatable[Mem(GB)]:26 = nodeCapacity:120 - nodeReservation:24 - systemReserved:10 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:26 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:10 - podHPRequest:60", }, }, wantErr: false, @@ -2435,12 +2435,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -2534,12 +2534,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(35000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:35000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:5000 - podHPUsed:25000", + Message: "batchAllocatable[CPU(Milli-Core)]:35000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:5000 - podHPUsed:25000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(43, 9), - Message: "batchAllocatable[Mem(GB)]:43 = nodeCapacity:120 - nodeReservation:42 - systemUsage:10 - podHPUsed:25", + Message: "batchAllocatable[Mem(GB)]:43 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:10 - podHPUsed:25", }, }, wantErr: false, @@ -2698,12 +2698,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(20000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:20000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:38000", + Message: "batchAllocatable[CPU(Milli-Core)]:20000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:38000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -2890,7 +2890,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewQuantity(25000, resource.DecimalSI), }, @@ -2898,7 +2898,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewScaledQuantity(33, 9), }, @@ -3115,7 +3115,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewQuantity(10000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 5) util.GenNodeZoneName(1): *resource.NewQuantity(15000, resource.DecimalSI), // 50 - 17.5 - 3.5 - 14 @@ -3124,7 +3124,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewScaledQuantity(15300, 6), // 62 - 21.7(62*0.35) - 6 - (14 + 5) util.GenNodeZoneName(1): *resource.NewScaledQuantity(17700, 6), // 58 - 20.3(58*0.35) - 6 - 14 @@ -3345,7 +3345,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(20000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:20000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:38000", + Message: "batchAllocatable[CPU(Milli-Core)]:20000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:38000", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewQuantity(5000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 10) util.GenNodeZoneName(1): *resource.NewQuantity(15000, resource.DecimalSI), // 50 - 17.5 - 3.5 - 14 @@ -3354,7 +3354,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(18, 9), - Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeReservation:42 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeSafetyMargin:42 - nodeReserved:0 - podHPRequest:60", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewScaledQuantity(5300, 6), // 62 - 21.7(62*0.35) - (25 + 10) util.GenNodeZoneName(1): *resource.NewScaledQuantity(12700, 6), // 58 - 20.3(58*0.35) - 25 @@ -3575,7 +3575,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(18000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:18000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:40000", + Message: "batchAllocatable[CPU(Milli-Core)]:18000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:40000", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewQuantity(4000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 10 + 1) util.GenNodeZoneName(1): *resource.NewQuantity(14000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 1) @@ -3584,7 +3584,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(18, 9), - Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeReservation:42 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeSafetyMargin:42 - nodeReserved:0 - podHPRequest:60", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewScaledQuantity(5300, 6), // 62 - 21.7(62*0.35) - (25 + 10) util.GenNodeZoneName(1): *resource.NewScaledQuantity(12700, 6), // 58 - 20.3(58*0.35) - 25 @@ -3621,12 +3621,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(21000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:21000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPMaxUsedRequest:42000", + Message: "batchAllocatable[CPU(Milli-Core)]:21000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPMaxUsedRequest:42000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(36, 9), - Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeReservation:24 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:0 - podHPRequest:60", }, }, wantErr: false, @@ -3659,12 +3659,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(101000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:101000 = nodeCapacity:100000 - nodeReservation:-50000 - systemUsageOrReserved:7000 - podHPMaxUsedRequest:42000", + Message: "batchAllocatable[CPU(Milli-Core)]:101000 = nodeCapacity:100000 - nodeSafetyMargin:-50000 - systemUsageOrNodeReserved:7000 - podHPMaxUsedRequest:42000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(84, 9), - Message: "batchAllocatable[Mem(GB)]:84 = nodeCapacity:120 - nodeReservation:-24 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:84 = nodeCapacity:120 - nodeSafetyMargin:-24 - nodeReserved:0 - podHPRequest:60", }, }, wantErr: false, @@ -3720,12 +3720,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, }, wantErr: false, @@ -3781,12 +3781,12 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(28000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:28000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:4000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:28000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:4000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(39, 9), - Message: "batchAllocatable[Mem(GB)]:39 = nodeCapacity:120 - nodeReservation:42 - systemUsage:6 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:39 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:6 - podHPUsed:33", }, }, wantErr: false, @@ -4005,7 +4005,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(14000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:14000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:44000", + Message: "batchAllocatable[CPU(Milli-Core)]:14000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:44000", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewQuantity(2000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 10 + 1 + 2) util.GenNodeZoneName(1): *resource.NewQuantity(12000, resource.DecimalSI), // 50 - 17.5 - 3.5 - (14 + 1 + 2) @@ -4014,7 +4014,7 @@ func TestPluginCalculate(t *testing.T) { { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(18, 9), - Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeReservation:42 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:18 = nodeCapacity:120 - nodeSafetyMargin:42 - nodeReserved:0 - podHPRequest:60", ZoneQuantity: map[string]resource.Quantity{ util.GenNodeZoneName(0): *resource.NewScaledQuantity(5300, 6), // 62 - 21.7(62*0.35) - (25 + 10) util.GenNodeZoneName(1): *resource.NewScaledQuantity(12700, 6), // 58 - 20.3(58*0.35) - 25 diff --git a/pkg/slo-controller/noderesource/plugins/batchresource/util.go b/pkg/slo-controller/noderesource/plugins/batchresource/util.go index b7d5d5df2..9411f63c9 100644 --- a/pkg/slo-controller/noderesource/plugins/batchresource/util.go +++ b/pkg/slo-controller/noderesource/plugins/batchresource/util.go @@ -35,22 +35,22 @@ import ( "github.com/koordinator-sh/koordinator/pkg/util" ) -func calculateBatchResourceByPolicy(strategy *configuration.ColocationStrategy, nodeCapacity, nodeReserved, systemReserved, +func calculateBatchResourceByPolicy(strategy *configuration.ColocationStrategy, nodeCapacity, nodeSafetyMargin, nodeReserved, systemUsed, podHPReq, podHPUsed, podHPMaxUsedReq corev1.ResourceList) (corev1.ResourceList, string, string) { - // Node(Batch).Alloc[usage] := Node.Total - Node.Reserved - System.Used - sum(Pod(Prod/Mid).Used) + // Node(Batch).Alloc[usage] := Node.Total - Node.SafetyMargin - System.Used - sum(Pod(Prod/Mid).Used) // System.Used = max(Node.Used - Pod(All).Used, Node.Anno.Reserved, Node.Kubelet.Reserved) - systemUsed = quotav1.Max(systemUsed, systemReserved) + systemUsed = quotav1.Max(systemUsed, nodeReserved) batchAllocatableByUsage := quotav1.Max(quotav1.Subtract(quotav1.Subtract(quotav1.Subtract( - nodeCapacity, nodeReserved), systemUsed), podHPUsed), util.NewZeroResourceList()) + nodeCapacity, nodeSafetyMargin), systemUsed), podHPUsed), util.NewZeroResourceList()) - // Node(Batch).Alloc[request] := Node.Total - Node.Reserved - System.Reserved - sum(Pod(Prod/Mid).Request) + // Node(Batch).Alloc[request] := Node.Total - Node.SafetyMargin - System.Reserved - sum(Pod(Prod/Mid).Request) // System.Reserved = max(Node.Anno.Reserved, Node.Kubelet.Reserved) batchAllocatableByRequest := quotav1.Max(quotav1.Subtract(quotav1.Subtract(quotav1.Subtract( - nodeCapacity, nodeReserved), systemReserved), podHPReq), util.NewZeroResourceList()) + nodeCapacity, nodeSafetyMargin), nodeReserved), podHPReq), util.NewZeroResourceList()) - // Node(Batch).Alloc[maxUsageRequest] := Node.Total - Node.Reserved - System.Used - sum(max(Pod(Prod/Mid).Request, Pod(Prod/Mid).Used)) + // Node(Batch).Alloc[maxUsageRequest] := Node.Total - Node.SafetyMargin - System.Used - sum(max(Pod(Prod/Mid).Request, Pod(Prod/Mid).Used)) batchAllocatableByMaxUsageRequest := quotav1.Max(quotav1.Subtract(quotav1.Subtract(quotav1.Subtract( - nodeCapacity, nodeReserved), systemUsed), podHPMaxUsedReq), util.NewZeroResourceList()) + nodeCapacity, nodeSafetyMargin), systemUsed), podHPMaxUsedReq), util.NewZeroResourceList()) batchAllocatable := batchAllocatableByUsage @@ -58,12 +58,12 @@ func calculateBatchResourceByPolicy(strategy *configuration.ColocationStrategy, // batch cpu support policy "usage" and "maxUsageRequest" if strategy != nil && strategy.CPUCalculatePolicy != nil && *strategy.CPUCalculatePolicy == configuration.CalculateByPodMaxUsageRequest { batchAllocatable[corev1.ResourceCPU] = *batchAllocatableByMaxUsageRequest.Cpu() - cpuMsg = fmt.Sprintf("batchAllocatable[CPU(Milli-Core)]:%v = nodeCapacity:%v - nodeReservation:%v - systemUsageOrReserved:%v - podHPMaxUsedRequest:%v", - batchAllocatable.Cpu().MilliValue(), nodeCapacity.Cpu().MilliValue(), nodeReserved.Cpu().MilliValue(), + cpuMsg = fmt.Sprintf("batchAllocatable[CPU(Milli-Core)]:%v = nodeCapacity:%v - nodeSafetyMargin:%v - systemUsageOrNodeReserved:%v - podHPMaxUsedRequest:%v", + batchAllocatable.Cpu().MilliValue(), nodeCapacity.Cpu().MilliValue(), nodeSafetyMargin.Cpu().MilliValue(), systemUsed.Cpu().MilliValue(), podHPMaxUsedReq.Cpu().MilliValue()) } else { // use CalculatePolicy "usage" by default - cpuMsg = fmt.Sprintf("batchAllocatable[CPU(Milli-Core)]:%v = nodeCapacity:%v - nodeReservation:%v - systemUsageOrReserved:%v - podHPUsed:%v", - batchAllocatable.Cpu().MilliValue(), nodeCapacity.Cpu().MilliValue(), nodeReserved.Cpu().MilliValue(), + cpuMsg = fmt.Sprintf("batchAllocatable[CPU(Milli-Core)]:%v = nodeCapacity:%v - nodeSafetyMargin:%v - systemUsageOrNodeReserved:%v - podHPUsed:%v", + batchAllocatable.Cpu().MilliValue(), nodeCapacity.Cpu().MilliValue(), nodeSafetyMargin.Cpu().MilliValue(), systemUsed.Cpu().MilliValue(), podHPUsed.Cpu().MilliValue()) } @@ -71,20 +71,20 @@ func calculateBatchResourceByPolicy(strategy *configuration.ColocationStrategy, // batch memory support policy "usage", "request" and "maxUsageRequest" if strategy != nil && strategy.MemoryCalculatePolicy != nil && *strategy.MemoryCalculatePolicy == configuration.CalculateByPodRequest { batchAllocatable[corev1.ResourceMemory] = *batchAllocatableByRequest.Memory() - memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeReservation:%v - systemReserved:%v - podHPRequest:%v", + memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeSafetyMargin:%v - nodeReserved:%v - podHPRequest:%v", batchAllocatable.Memory().ScaledValue(resource.Giga), nodeCapacity.Memory().ScaledValue(resource.Giga), - nodeReserved.Memory().ScaledValue(resource.Giga), systemReserved.Memory().ScaledValue(resource.Giga), + nodeSafetyMargin.Memory().ScaledValue(resource.Giga), nodeReserved.Memory().ScaledValue(resource.Giga), podHPReq.Memory().ScaledValue(resource.Giga)) } else if strategy != nil && strategy.MemoryCalculatePolicy != nil && *strategy.MemoryCalculatePolicy == configuration.CalculateByPodMaxUsageRequest { batchAllocatable[corev1.ResourceMemory] = *batchAllocatableByMaxUsageRequest.Memory() - memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeReservation:%v - systemUsage:%v - podHPMaxUsedRequest:%v", + memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeSafetyMargin:%v - systemUsage:%v - podHPMaxUsedRequest:%v", batchAllocatable.Memory().ScaledValue(resource.Giga), nodeCapacity.Memory().ScaledValue(resource.Giga), - nodeReserved.Memory().ScaledValue(resource.Giga), systemUsed.Memory().ScaledValue(resource.Giga), + nodeSafetyMargin.Memory().ScaledValue(resource.Giga), systemUsed.Memory().ScaledValue(resource.Giga), podHPMaxUsedReq.Memory().ScaledValue(resource.Giga)) } else { // use CalculatePolicy "usage" by default - memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeReservation:%v - systemUsage:%v - podHPUsed:%v", + memMsg = fmt.Sprintf("batchAllocatable[Mem(GB)]:%v = nodeCapacity:%v - nodeSafetyMargin:%v - systemUsage:%v - podHPUsed:%v", batchAllocatable.Memory().ScaledValue(resource.Giga), nodeCapacity.Memory().ScaledValue(resource.Giga), - nodeReserved.Memory().ScaledValue(resource.Giga), systemUsed.Memory().ScaledValue(resource.Giga), + nodeSafetyMargin.Memory().ScaledValue(resource.Giga), systemUsed.Memory().ScaledValue(resource.Giga), podHPUsed.Memory().ScaledValue(resource.Giga)) } return batchAllocatable, cpuMsg, memMsg @@ -201,10 +201,10 @@ func getNodeCapacity(node *corev1.Node) corev1.ResourceList { return getResourceListForCPUAndMemory(node.Status.Capacity) } -// getNodeReservation gets node-level safe-guarding reservation with the node's allocatable -func getNodeReservation(strategy *configuration.ColocationStrategy, nodeAllocatable corev1.ResourceList) corev1.ResourceList { - cpuReserveQuant := util.MultiplyMilliQuant(nodeAllocatable[corev1.ResourceCPU], getReserveRatio(*strategy.CPUReclaimThresholdPercent)) - memReserveQuant := util.MultiplyQuant(nodeAllocatable[corev1.ResourceMemory], getReserveRatio(*strategy.MemoryReclaimThresholdPercent)) +// getNodeSafetyMargin gets node-level safe-guarding reservation with the node's allocatable +func getNodeSafetyMargin(strategy *configuration.ColocationStrategy, nodeCapacity corev1.ResourceList) corev1.ResourceList { + cpuReserveQuant := util.MultiplyMilliQuant(nodeCapacity[corev1.ResourceCPU], getReserveRatio(*strategy.CPUReclaimThresholdPercent)) + memReserveQuant := util.MultiplyQuant(nodeCapacity[corev1.ResourceMemory], getReserveRatio(*strategy.MemoryReclaimThresholdPercent)) return corev1.ResourceList{ corev1.ResourceCPU: cpuReserveQuant, diff --git a/pkg/slo-controller/noderesource/plugins/batchresource/util_test.go b/pkg/slo-controller/noderesource/plugins/batchresource/util_test.go index 9e0a86356..285f4df4d 100644 --- a/pkg/slo-controller/noderesource/plugins/batchresource/util_test.go +++ b/pkg/slo-controller/noderesource/plugins/batchresource/util_test.go @@ -121,7 +121,7 @@ func Test_getNodeReservation(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := getNodeReservation(tt.args.strategy, tt.args.nodeAllocatable) + got := getNodeSafetyMargin(tt.args.strategy, tt.args.nodeAllocatable) testingCorrectResourceList(t, &tt.want, &got) }) } diff --git a/pkg/slo-controller/noderesource/resource_calculator_test.go b/pkg/slo-controller/noderesource/resource_calculator_test.go index 2154aa5ec..2fffb9a51 100644 --- a/pkg/slo-controller/noderesource/resource_calculator_test.go +++ b/pkg/slo-controller/noderesource/resource_calculator_test.go @@ -29,12 +29,15 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/clock" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" "github.com/koordinator-sh/koordinator/apis/configuration" "github.com/koordinator-sh/koordinator/apis/extension" + schedulingv1alpha1 "github.com/koordinator-sh/koordinator/apis/scheduling/v1alpha1" slov1alpha1 "github.com/koordinator-sh/koordinator/apis/slo/v1alpha1" "github.com/koordinator-sh/koordinator/pkg/slo-controller/noderesource/framework" "github.com/koordinator-sh/koordinator/pkg/slo-controller/noderesource/plugins/batchresource" @@ -176,12 +179,12 @@ func Test_calculateNodeResource(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(0, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:0 = nodeCapacity:20000 - nodeReservation:7000 - systemUsageOrReserved:0 - podHPUsed:20000", + Message: "batchAllocatable[CPU(Milli-Core)]:0 = nodeCapacity:20000 - nodeSafetyMargin:7000 - systemUsageOrNodeReserved:0 - podHPUsed:20000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(6, 9), - Message: "batchAllocatable[Mem(GB)]:6 = nodeCapacity:40 - nodeReservation:14 - systemUsage:0 - podHPUsed:20", + Message: "batchAllocatable[Mem(GB)]:6 = nodeCapacity:40 - nodeSafetyMargin:14 - systemUsage:0 - podHPUsed:20", }, { Name: extension.MidCPU, @@ -383,12 +386,12 @@ func Test_calculateNodeResource(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, { Name: extension.MidCPU, @@ -593,12 +596,12 @@ func Test_calculateNodeResource(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(30000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(39, 9), - Message: "batchAllocatable[Mem(GB)]:39 = nodeCapacity:120 - nodeReservation:36 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:39 = nodeCapacity:120 - nodeSafetyMargin:36 - systemUsage:12 - podHPUsed:33", }, { Name: extension.MidCPU, @@ -803,12 +806,12 @@ func Test_calculateNodeResource(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(30000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeReservation:30000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:30000 = nodeCapacity:100000 - nodeSafetyMargin:30000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(36, 9), - Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeReservation:24 - systemReserved:0 - podHPRequest:60", + Message: "batchAllocatable[Mem(GB)]:36 = nodeCapacity:120 - nodeSafetyMargin:24 - nodeReserved:0 - podHPRequest:60", }, { Name: extension.MidCPU, @@ -1018,12 +1021,12 @@ func Test_calculateNodeResource(t *testing.T) { { Name: extension.BatchCPU, Quantity: resource.NewQuantity(25000, resource.DecimalSI), - Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeReservation:35000 - systemUsageOrReserved:7000 - podHPUsed:33000", + Message: "batchAllocatable[CPU(Milli-Core)]:25000 = nodeCapacity:100000 - nodeSafetyMargin:35000 - systemUsageOrNodeReserved:7000 - podHPUsed:33000", }, { Name: extension.BatchMemory, Quantity: resource.NewScaledQuantity(33, 9), - Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeReservation:42 - systemUsage:12 - podHPUsed:33", + Message: "batchAllocatable[Mem(GB)]:33 = nodeCapacity:120 - nodeSafetyMargin:42 - systemUsage:12 - podHPUsed:33", }, { Name: extension.MidCPU, @@ -1039,6 +1042,14 @@ func Test_calculateNodeResource(t *testing.T) { }, } + scheme := runtime.NewScheme() + clientgoscheme.AddToScheme(scheme) + slov1alpha1.AddToScheme(scheme) + schedulingv1alpha1.AddToScheme(scheme) + client := fake.NewClientBuilder().WithScheme(scheme).Build() + opt := framework.NewOption().WithClient(client).WithScheme(scheme).WithControllerBuilder(&builder.Builder{}) + framework.RunSetupExtenders(opt) + for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { memoryCalculateByReq := configuration.CalculateByPodRequest