From 6f16dc4aa3939429bffc0205dce377ecae6534f1 Mon Sep 17 00:00:00 2001 From: wangyang0616 Date: Fri, 24 Nov 2023 17:41:03 +0800 Subject: [PATCH] Avoid repeatedly creating links to obtain node metrics Signed-off-by: wangyang0616 --- .../metrics/source/metrics_client.go | 2 +- .../source/metrics_client_prometheus_adapt.go | 33 ++++++++++++------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/pkg/scheduler/metrics/source/metrics_client.go b/pkg/scheduler/metrics/source/metrics_client.go index fb04bc38d8..2d6e27b45f 100644 --- a/pkg/scheduler/metrics/source/metrics_client.go +++ b/pkg/scheduler/metrics/source/metrics_client.go @@ -43,7 +43,7 @@ type MetricsClient interface { } func NewMetricsClient(restConfig *rest.Config, metricsConf map[string]string) (MetricsClient, error) { - klog.V(3).Infof("New metrics client begin, resconfig is %v, metricsConf is %v", restConfig, metricsConf) + klog.V(3).Infof("New metrics client begin, metricsConf is %v", metricsConf) metricsType := metricsConf["type"] if metricsType == Metrics_Type_Elasticsearch { return NewElasticsearchMetricsClient(metricsConf) diff --git a/pkg/scheduler/metrics/source/metrics_client_prometheus_adapt.go b/pkg/scheduler/metrics/source/metrics_client_prometheus_adapt.go index a3063e3475..26f6024f3c 100644 --- a/pkg/scheduler/metrics/source/metrics_client_prometheus_adapt.go +++ b/pkg/scheduler/metrics/source/metrics_client_prometheus_adapt.go @@ -36,23 +36,32 @@ const ( CustomNodeMemUsageAvg = "node_memory_usage_avg" ) -type CustomMetricsClient struct { - config *rest.Config +type KMetricsClient struct { + customMetricsCli customclient.CustomMetricsClient } -func NewCustomMetricsClient(restConfig *rest.Config) (*CustomMetricsClient, error) { - klog.V(3).Infof("NewCustomMetricsClient begin") - return &CustomMetricsClient{config: restConfig}, nil -} +var kMetricsClient *KMetricsClient -func (c *CustomMetricsClient) NodesMetricsAvg(ctx context.Context, nodeMetricsMap map[string]*NodeMetrics) error { - klog.V(5).Infof("Get node metrics from Custom Metrics") - discoveryClient := discovery.NewDiscoveryClientForConfigOrDie(c.config) +func NewCustomMetricsClient(cfg *rest.Config) (*KMetricsClient, error) { + if kMetricsClient != nil { + return kMetricsClient, nil + } + + klog.V(3).Infof("Create custom metrics api client") + discoveryClient := discovery.NewDiscoveryClientForConfigOrDie(cfg) cachedDiscoClient := cacheddiscovery.NewMemCacheClient(discoveryClient) restMapper := restmapper.NewDeferredDiscoveryRESTMapper(cachedDiscoClient) - restMapper.Reset() apiVersionsGetter := customclient.NewAvailableAPIsGetter(discoveryClient) - customMetricsClient := customclient.NewForConfig(c.config, restMapper, apiVersionsGetter) + customMetricsClient := customclient.NewForConfig(cfg, restMapper, apiVersionsGetter) + + kMetricsClient = &KMetricsClient{ + customMetricsCli: customMetricsClient, + } + return kMetricsClient, nil +} + +func (km *KMetricsClient) NodesMetricsAvg(ctx context.Context, nodeMetricsMap map[string]*NodeMetrics) error { + klog.V(5).Infof("Get node metrics from Custom Metrics") groupKind := schema.GroupKind{ Group: "", @@ -60,7 +69,7 @@ func (c *CustomMetricsClient) NodesMetricsAvg(ctx context.Context, nodeMetricsMa } for _, metricName := range []string{CustomNodeCPUUsageAvg, CustomNodeMemUsageAvg} { - metricsValue, err := customMetricsClient.RootScopedMetrics().GetForObjects(groupKind, labels.NewSelector(), metricName, labels.NewSelector()) + metricsValue, err := km.customMetricsCli.RootScopedMetrics().GetForObjects(groupKind, labels.NewSelector(), metricName, labels.NewSelector()) if err != nil { klog.Errorf("Failed to query the indicator %s, error is: %v.", metricName, err) return err