Skip to content

Commit 00737e9

Browse files
Use max multiplier
1 parent 44140dc commit 00737e9

File tree

5 files changed

+76
-17
lines changed

5 files changed

+76
-17
lines changed

.ci/helm.sh

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,21 @@ function ci::verify_vpa_java_function() {
269269
ci::verify_exclamation_function "persistent://public/default/input-vpa-java-topic" "persistent://public/default/output-vpa-java-topic" "test-message" "test-message!" 10
270270
}
271271

272+
function ci::calculate_multiplies() {
273+
base=$1
274+
value=$2
275+
quotient=$(($value / $base))
276+
remainder=$(($value % $base))
277+
278+
# If there's any remainder, we need to round up
279+
if [ $remainder -ne 0 ]; then
280+
multiple=$(($quotient + 1))
281+
else
282+
multiple=$quotient
283+
fi
284+
echo $multiple
285+
}
286+
272287
function ci::verify_vpa_with_resource_unit() {
273288
name=$1
274289
kind=$2
@@ -278,18 +293,19 @@ function ci::verify_vpa_with_resource_unit() {
278293
kubectl wait -l name=$name --for=condition=RecommendationProvided --timeout=2m vpa
279294
cpu=`kubectl get vpa $vpaName -o jsonpath='{.status.recommendation.containerRecommendations[0].target.cpu}'`
280295
cpu_value=${cpu%m}
296+
multiplier=$(ci::calculate_multiplies $baseCpu $cpu_value)
281297

282-
quotient=$(($cpu_value / $baseCpu))
283-
remainder=$(($cpu_value % $baseCpu))
298+
memory=`kubectl get vpa $vpaName -o jsonpath='{.status.recommendation.containerRecommendations[0].target.memory}'`
299+
memory_value=${memory%k}
300+
memory_value=$((memory_value*1024))
301+
memoryMultiplier=$(ci::calculate_multiplies $baseMemory $memory_value)
284302

285-
# If there's any remainder, we need to round up
286-
if [ $remainder -ne 0 ]; then
287-
multiple=$(($quotient + 1))
288-
else
289-
multiple=$quotient
303+
if [ $memoryMultiplier -gt $multiplier ]; then
304+
multiplier=$memoryMultiplier
290305
fi
291-
targetCpu=`echo $(($baseCpu* $multiple ))m`
292-
targetMemory=`echo $(($baseMemory * $multiple ))`
306+
307+
targetCpu=`echo $(($baseCpu* $multiple))m`
308+
targetMemory=`echo $(($baseMemory * $multiple))`
293309

294310
resources='{"limits":{"cpu":"'$targetCpu'","memory":"'$targetMemory'"},"requests":{"cpu":"'$targetCpu'","memory":"'$targetMemory'"}}'
295311

.github/workflows/trivy.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,5 @@ jobs:
5959
with:
6060
image-ref: 'function-mesh-operator:latest'
6161
format: 'table'
62-
exit-code: '1'
62+
exit-code: '1'
63+
severity: "MEDIUM,HIGH,CRITICAL"

controllers/common.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,15 @@ func calculateVPARecommendation(vpa *vpav1.VerticalPodAutoscaler, vpaSpec *v1alp
152152
if recommend.Target.Cpu().MilliValue()%vpaSpec.ResourceUnit.CPU.MilliValue() != 0 {
153153
multiple += 1
154154
}
155-
} else if recommend.Target.Memory() != nil { // set resources based on Memory
156-
multiple = recommend.Target.Memory().MilliValue() / vpaSpec.ResourceUnit.Memory.MilliValue()
155+
}
156+
if recommend.Target.Memory() != nil && recommend.Target.Memory().Value() != 0 {
157+
multipleMemory := recommend.Target.Memory().MilliValue() / vpaSpec.ResourceUnit.Memory.MilliValue()
157158
if recommend.Target.Memory().MilliValue()%vpaSpec.ResourceUnit.Memory.MilliValue() != 0 {
158-
multiple += 1
159+
multipleMemory += 1
160+
}
161+
// use the larger multiple
162+
if multipleMemory > multiple {
163+
multiple = multipleMemory
159164
}
160165
}
161166
}

controllers/common_test.go

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func Test_calculateVPARecommendation(t *testing.T) {
5050
ContainerName: "*",
5151
Target: corev1.ResourceList{
5252
corev1.ResourceCPU: resource.MustParse("0.2"),
53-
corev1.ResourceMemory: resource.MustParse("1Gi"),
53+
corev1.ResourceMemory: resource.MustParse("600Mi"),
5454
},
5555
},
5656
},
@@ -86,7 +86,7 @@ func Test_calculateVPARecommendation(t *testing.T) {
8686
ContainerName: "*",
8787
Target: corev1.ResourceList{
8888
corev1.ResourceCPU: resource.MustParse("100m"),
89-
corev1.ResourceMemory: resource.MustParse("1Gi"),
89+
corev1.ResourceMemory: resource.MustParse("0.6Gi"),
9090
},
9191
},
9292
},
@@ -183,6 +183,42 @@ func Test_calculateVPARecommendation(t *testing.T) {
183183
},
184184
},
185185
},
186+
{
187+
name: "Use memory to calculate multiplier when it increase more than cpu",
188+
args: args{
189+
vpa: &vpav1.VerticalPodAutoscaler{
190+
Status: vpav1.VerticalPodAutoscalerStatus{
191+
Recommendation: &vpav1.RecommendedPodResources{
192+
ContainerRecommendations: []vpav1.RecommendedContainerResources{
193+
{
194+
ContainerName: "*",
195+
Target: corev1.ResourceList{
196+
corev1.ResourceCPU: resource.MustParse("0.2"),
197+
corev1.ResourceMemory: resource.MustParse("1Gi"),
198+
},
199+
},
200+
},
201+
},
202+
},
203+
},
204+
vpaSpec: &v1alpha1.VPASpec{
205+
ResourceUnit: &v1alpha1.ResourceUnit{
206+
CPU: resource.MustParse("200m"),
207+
Memory: resource.MustParse("800Mi"),
208+
},
209+
},
210+
},
211+
want: &corev1.ResourceRequirements{
212+
Requests: corev1.ResourceList{
213+
corev1.ResourceCPU: *resource.NewScaledQuantity(400, resource.Milli),
214+
corev1.ResourceMemory: *resource.NewScaledQuantity(2*800*1024*1024*1000, resource.Milli),
215+
},
216+
Limits: corev1.ResourceList{
217+
corev1.ResourceCPU: *resource.NewScaledQuantity(400, resource.Milli),
218+
corev1.ResourceMemory: *resource.NewScaledQuantity(2*800*1024*1024*1000, resource.Milli),
219+
},
220+
},
221+
},
186222
{
187223
name: "Use the target memory when target memory is equal to the resource unit memory",
188224
args: args{
@@ -360,8 +396,8 @@ func Test_calculateVPARecommendation(t *testing.T) {
360396
},
361397
want: &corev1.ResourceRequirements{
362398
Requests: corev1.ResourceList{
363-
corev1.ResourceCPU: *resource.NewScaledQuantity(200, resource.Milli),
364-
corev1.ResourceMemory: *resource.NewScaledQuantity(800*1024*1024*1000, resource.Milli),
399+
corev1.ResourceCPU: *resource.NewScaledQuantity(400, resource.Milli),
400+
corev1.ResourceMemory: *resource.NewScaledQuantity(2*800*1024*1024*1000, resource.Milli),
365401
},
366402
},
367403
},

controllers/spec/common.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package spec
2020
import (
2121
"bytes"
2222
"context"
23+
2324
// used for template
2425
_ "embed"
2526
"encoding/json"

0 commit comments

Comments
 (0)