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
}