func()

in clusterloader2/pkg/prometheus/prometheus.go [229:330]


func (pc *Controller) SetUpPrometheusStack() error {
	rootClusterClientSet := pc.framework.GetClientSets().GetClient()

	// In a Kubemark environment, there are two distinct clusters: the root cluster and the test cluster.
	// Therefore, a testClusterClientSet operating on the test cluster is required.
	// Prometheus runs in the root cluster, but certain actions must be performed in the test cluster
	// for which this testClusterClientSet will be used.
	testClusterClientSet, err := func() (kubernetes.Interface, error) {
		multiClientSet, err := framework.NewMultiClientSet(pc.clusterLoaderConfig.ClusterConfig.KubeConfigPath, numK8sClients)
		if err != nil {
			return nil, err
		}
		return multiClientSet.GetClient(), nil
	}()

	if err != nil {
		return err
	}

	klog.V(2).Info("Setting up prometheus stack")
	if err := client.CreateNamespace(rootClusterClientSet, namespace); err != nil {
		return err
	}

	if err := pc.createToken(rootClusterClientSet, testClusterClientSet); err != nil {
		return err
	}

	// Removing Storage Class as Reclaim Policy cannot be changed
	if err := client.DeleteStorageClass(rootClusterClientSet, storageClass); err != nil {
		return err
	}
	if err := pc.applyDefaultManifests(coreManifests); err != nil {
		return err
	}
	if pc.clusterLoaderConfig.PrometheusConfig.ScrapeNodeExporter {
		if err := pc.runNodeExporter(); err != nil {
			return err
		}
	}
	if pc.clusterLoaderConfig.PrometheusConfig.ScrapeWindowsNodeExporter {
		if err := pc.applyDefaultManifests(windowsNodeExporterManifests); err != nil {
			return err
		}
	} else {
		// Backward compatibility
		// If enabled scraping windows node, need to setup windows node and template mapping
		if isWindowsNodeScrapingEnabled(pc.templateMapping, pc.clusterLoaderConfig) {
			if err := setUpWindowsNodeAndTemplate(rootClusterClientSet, pc.templateMapping); err != nil {
				return err
			}
		}
	}
	if !pc.isKubemark() {
		if err := pc.applyDefaultManifests(defaultServiceMonitors); err != nil {
			return err
		}
	}

	if pc.clusterLoaderConfig.PrometheusConfig.ScrapeKubeStateMetrics && pc.clusterLoaderConfig.ClusterConfig.Provider.Features().SupportKubeStateMetrics {
		klog.V(2).Infof("Applying kube-state-metrics in the cluster.")
		if err := pc.applyDefaultManifests(kubeStateMetricsManifests); err != nil {
			return err
		}
	}
	if pc.clusterLoaderConfig.PrometheusConfig.ScrapeMetricsServerMetrics && pc.clusterLoaderConfig.ClusterConfig.Provider.Features().SupportMetricsServerMetrics {
		klog.V(2).Infof("Applying metrics server in the cluster.")
		if err := pc.applyDefaultManifests(metricsServerManifests); err != nil {
			return err
		}
	}
	if _, ok := pc.templateMapping["MasterIps"]; ok {
		if err := pc.configureRBACForMetrics(testClusterClientSet); err != nil {
			return err
		}
		if err := pc.applyDefaultManifests(masterIPServiceMonitors); err != nil {
			return err
		}
	}
	if pc.clusterLoaderConfig.PrometheusConfig.EnablePushgateway {
		klog.V(2).Infof("Applying Pushgateway in the cluster.")
		if err := pc.applyDefaultManifests(pushgatewayManifests); err != nil {
			return err
		}
	}

	if pc.clusterLoaderConfig.PrometheusConfig.AdditionalMonitorsPath != "" {
		klog.V(2).Infof("Applying additional monitors in the cluster.")
		if err := pc.applyManifests(pc.clusterLoaderConfig.PrometheusConfig.AdditionalMonitorsPath, "*.yaml"); err != nil {
			return err
		}
	}
	if err := pc.waitForPrometheusToBeHealthy(); err != nil {
		dumpAdditionalLogsOnPrometheusSetupFailure(rootClusterClientSet)
		return err
	}
	klog.V(2).Info("Prometheus stack set up successfully")
	if err := pc.cachePrometheusDiskMetadataIfEnabled(); err != nil {
		klog.Warningf("Error while caching prometheus disk metadata: %v", err)
	}
	return nil
}