@@ -25,27 +25,28 @@ import (
25
25
"testing"
26
26
"time"
27
27
28
- "sigs.k8s.io/descheduler/pkg/api"
29
- "sigs.k8s.io/descheduler/pkg/framework/plugins/defaultevictor"
30
- frameworktesting "sigs.k8s.io/descheduler/pkg/framework/testing"
31
- frameworktypes "sigs.k8s.io/descheduler/pkg/framework/types"
32
-
33
28
v1 "k8s.io/api/core/v1"
34
29
policy "k8s.io/api/policy/v1"
35
30
"k8s.io/apimachinery/pkg/api/resource"
36
31
"k8s.io/apimachinery/pkg/runtime"
32
+ "k8s.io/client-go/informers"
37
33
"k8s.io/client-go/kubernetes/fake"
34
+ fakeclientset "k8s.io/client-go/kubernetes/fake"
38
35
core "k8s.io/client-go/testing"
39
36
"k8s.io/metrics/pkg/apis/metrics/v1beta1"
40
37
fakemetricsclient "k8s.io/metrics/pkg/client/clientset/versioned/fake"
38
+ podutil "sigs.k8s.io/descheduler/pkg/descheduler/pod"
41
39
40
+ "sigs.k8s.io/descheduler/pkg/api"
42
41
"sigs.k8s.io/descheduler/pkg/descheduler/evictions"
43
42
"sigs.k8s.io/descheduler/pkg/descheduler/metricscollector"
43
+ "sigs.k8s.io/descheduler/pkg/framework/plugins/defaultevictor"
44
+ frameworktesting "sigs.k8s.io/descheduler/pkg/framework/testing"
45
+ frameworktypes "sigs.k8s.io/descheduler/pkg/framework/types"
44
46
"sigs.k8s.io/descheduler/pkg/utils"
45
47
"sigs.k8s.io/descheduler/test"
46
48
47
49
promapi "github.com/prometheus/client_golang/api"
48
- promv1 "github.com/prometheus/client_golang/api/prometheus/v1"
49
50
"github.com/prometheus/common/config"
50
51
"github.com/prometheus/common/model"
51
52
)
@@ -1370,7 +1371,7 @@ func TestLowNodeUtilizationWithTaints(t *testing.T) {
1370
1371
}
1371
1372
}
1372
1373
1373
- func TestLowNodeUtilizationWithMetrics (t * testing.T ) {
1374
+ func TestLowNodeUtilizationWithMetricsReal (t * testing.T ) {
1374
1375
return
1375
1376
roundTripper := & http.Transport {
1376
1377
Proxy : http .ProxyFromEnvironment ,
@@ -1382,29 +1383,64 @@ func TestLowNodeUtilizationWithMetrics(t *testing.T) {
1382
1383
TLSClientConfig : & tls.Config {InsecureSkipVerify : true },
1383
1384
}
1384
1385
1385
- AuthToken := "eyJhbGciOiJSUzI1NiIsImtpZCI6IkNoTW9tT2w2cWtzR2V0dURZdjBqdnBSdmdWM29lWmc3dWpfNW0yaDc2NHMifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjIl0sImV4cCI6MTcyODk5MjY3NywiaWF0IjoxNzI4OTg5MDc3LCJpc3MiOiJodHRwczovL2t1YmVybmV0ZXMuZGVmYXVsdC5zdmMiLCJqdGkiOiJkNDY3ZjVmMy0xNGVmLTRkMjItOWJkNC1jMGM1Mzk3NzYyZDgiLCJrdWJlcm5ldGVzLmlvIjp7Im5hbWVzcGFjZSI6Im9wZW5zaGlmdC1tb25pdG9yaW5nIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6InByb21ldGhldXMtazhzIiwidWlkIjoiNjY4NDllMGItYTAwZC00NjUzLWE5NTItNThiYTE1MTk4NTlkIn19LCJuYmYiOjE3Mjg5ODkwNzcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuc2hpZnQtbW9uaXRvcmluZzpwcm9tZXRoZXVzLWs4cyJ9.J1i6-oRAC9J8mqrlZPKGA-CU5PbUzhm2QxAWFnu65-NXR3e252mesybwtjkwxUtTLKrsYHQXwEsG5rGcQsvMcGK9RC9y5z33DFj8tPPwOGLJYJ-s5cTImTqKtWRXzTlcrsrUYTYApfrOsEyXwyfDow4PCslZjR3cd5FMRbvXNqHLg26nG_smApR4wc6kXy7xxlRuGhxu-dUiscQP56njboOK61JdTG8F3FgOayZnKk1jGeVdIhXClqGWJyokk-ZM3mMK1MxzGXY0tLbe37V4B7g3NDiH651BUcicfDSky46yfcAYxMDbZgpK2TByWApAllN0wixz2WsFfyBVu_Q5xtZ9Gi9BUHSa5ioRiBK346W4Bdmr9ala5ldIXDa59YE7UB34DsCHyqvzRx_Sj76hLzy2jSOk7RsL0fM8sDoJL4ROdi-3Jtr5uPY593I8H8qeQvFS6PQfm0bUZqVKrrLoCK_uk9guH4a6K27SlD-Utk3dpsjbmrwcjBxm-zd_LE9YyQ734My00Pcy9D5eNio3gESjGsHqGFc_haq4ZCiVOCkbdmABjpPEL6K7bs1GMZbHt1CONL0-LzymM8vgGNj0grjpG8-5AF8ZuSqR7pbZSV_NO2nKkmrwpILCw0Joqp6V3C9pP9nXWHIDyVMxMK870zxzt_qCoPRLCAujQQn6e0U"
1386
- client , err := promapi .NewClient (promapi.Config {
1387
- Address : "https://prometheus-k8s-openshift-monitoring.apps.jchaloup-20241015-3 .group-b.devcluster.openshift.com" ,
1386
+ AuthToken := "XXXX"
1387
+ promClient , err := promapi .NewClient (promapi.Config {
1388
+ Address : "https://prometheus-k8s-openshift-monitoring.apps.jchaloup-20241106 .group-b.devcluster.openshift.com" ,
1388
1389
RoundTripper : config .NewAuthorizationCredentialsRoundTripper ("Bearer" , config .NewInlineSecret (AuthToken ), roundTripper ),
1389
1390
})
1390
1391
if err != nil {
1391
1392
t .Fatalf ("prom client error: %v" , err )
1392
1393
}
1393
1394
1395
+ n1 := test .BuildTestNode ("ip-10-0-17-165.ec2.internal" , 2000 , 3000 , 10 , nil )
1396
+ n2 := test .BuildTestNode ("ip-10-0-51-101.ec2.internal" , 2000 , 3000 , 10 , nil )
1397
+ n3 := test .BuildTestNode ("ip-10-0-94-25.ec2.internal" , 2000 , 3000 , 10 , nil )
1398
+
1399
+ nodes := []* v1.Node {n1 , n2 , n3 }
1400
+
1401
+ p1 := test .BuildTestPod ("p1" , 400 , 0 , n1 .Name , nil )
1402
+ p21 := test .BuildTestPod ("p21" , 400 , 0 , n2 .Name , nil )
1403
+ p22 := test .BuildTestPod ("p22" , 400 , 0 , n2 .Name , nil )
1404
+ p3 := test .BuildTestPod ("p3" , 400 , 0 , n3 .Name , nil )
1405
+
1406
+ clientset := fakeclientset .NewSimpleClientset (n1 , n2 , n3 , p1 , p21 , p22 , p3 )
1407
+
1408
+ ctx := context .TODO ()
1409
+ sharedInformerFactory := informers .NewSharedInformerFactory (clientset , 0 )
1410
+ podInformer := sharedInformerFactory .Core ().V1 ().Pods ().Informer ()
1411
+ podsAssignedToNode , err := podutil .BuildGetPodsAssignedToNodeFunc (podInformer )
1412
+ if err != nil {
1413
+ t .Fatalf ("Build get pods assigned to node function error: %v" , err )
1414
+ }
1415
+
1416
+ sharedInformerFactory .Start (ctx .Done ())
1417
+ sharedInformerFactory .WaitForCacheSync (ctx .Done ())
1418
+
1419
+ prometheusUsageClient := newPrometheusUsageSnapshot (podsAssignedToNode , promClient )
1420
+ err = prometheusUsageClient .capture (nodes )
1421
+ if err != nil {
1422
+ t .Fatalf ("unable to capture prometheus metrics: %v" , err )
1423
+ }
1424
+
1425
+ for _ , node := range nodes {
1426
+ nodeUtil := prometheusUsageClient .nodeUtilization (node .Name )
1427
+ fmt .Printf ("nodeUtil[%v]: %v\n " , node .Name , nodeUtil )
1428
+ }
1429
+
1394
1430
// pod:container_cpu_usage:sum
1395
1431
// container_memory_usage_bytes
1396
1432
1397
- v1api := promv1 .NewAPI (client )
1398
- ctx := context .TODO ()
1399
1433
// promQuery := "avg_over_time(kube_pod_container_resource_requests[1m])"
1400
- promQuery := "kube_pod_container_resource_requests"
1401
- results , warnings , err := v1api .Query (ctx , promQuery , time .Now ())
1402
- fmt .Printf ("results: %#v\n " , results )
1403
- for _ , sample := range results .(model.Vector ) {
1404
- fmt .Printf ("sample: %#v\n " , sample )
1434
+ nodeThresholds := NodeThresholds {
1435
+ lowResourceThreshold : map [v1.ResourceName ]* resource.Quantity {
1436
+ v1 .ResourceName ("MetricResource" ): resource .NewQuantity (int64 (300 ), resource .DecimalSI ),
1437
+ },
1438
+ highResourceThreshold : map [v1.ResourceName ]* resource.Quantity {
1439
+ v1 .ResourceName ("MetricResource" ): resource .NewQuantity (int64 (500 ), resource .DecimalSI ),
1440
+ },
1405
1441
}
1406
- fmt . Printf ( "warnings: %v \n " , warnings )
1407
- fmt .Printf ("err : %v\n " , err )
1442
+
1443
+ fmt .Printf ("nodeThresholds : %# v\n " , nodeThresholds )
1408
1444
1409
1445
result := model .Value (
1410
1446
& model.Vector {
0 commit comments