Skip to content

Commit 0eaa854

Browse files
authored
Merge pull request kubernetes#92485 from oomichi/metrics-grabber
Avoid DeprecatedMightBeMasterNode() in e2e metrics
2 parents 30dbfbe + 176c8e2 commit 0eaa854

File tree

4 files changed

+46
-37
lines changed

4 files changed

+46
-37
lines changed

test/e2e/framework/metrics/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ go_library(
3131
"//test/e2e/framework/log:go_default_library",
3232
"//test/e2e/framework/pod:go_default_library",
3333
"//test/e2e/perftype:go_default_library",
34-
"//test/e2e/system:go_default_library",
3534
"//vendor/k8s.io/klog/v2:go_default_library",
3635
],
3736
)

test/e2e/framework/metrics/metrics_grabber.go

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package metrics
1919
import (
2020
"context"
2121
"fmt"
22+
"regexp"
2223
"sync"
2324
"time"
2425

@@ -27,7 +28,6 @@ import (
2728
"k8s.io/apimachinery/pkg/util/wait"
2829
clientset "k8s.io/client-go/kubernetes"
2930
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
30-
"k8s.io/kubernetes/test/e2e/system"
3131

3232
"k8s.io/klog/v2"
3333
)
@@ -61,38 +61,48 @@ type Grabber struct {
6161
grabFromKubelets bool
6262
grabFromScheduler bool
6363
grabFromClusterAutoscaler bool
64-
masterName string
65-
registeredMaster bool
64+
kubeScheduler string
65+
kubeControllerManager string
6666
waitForControllerManagerReadyOnce sync.Once
6767
}
6868

6969
// NewMetricsGrabber returns new metrics which are initialized.
7070
func NewMetricsGrabber(c clientset.Interface, ec clientset.Interface, kubelets bool, scheduler bool, controllers bool, apiServer bool, clusterAutoscaler bool) (*Grabber, error) {
71-
registeredMaster := false
72-
masterName := ""
73-
nodeList, err := c.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
71+
72+
kubeScheduler := ""
73+
kubeControllerManager := ""
74+
75+
regKubeScheduler := regexp.MustCompile("kube-scheduler-.*")
76+
regKubeControllerManager := regexp.MustCompile("kube-controller-manager-.*")
77+
78+
podList, err := c.CoreV1().Pods(metav1.NamespaceSystem).List(context.TODO(), metav1.ListOptions{})
7479
if err != nil {
7580
return nil, err
7681
}
77-
if len(nodeList.Items) < 1 {
78-
klog.Warning("Can't find any Nodes in the API server to grab metrics from")
82+
if len(podList.Items) < 1 {
83+
klog.Warningf("Can't find any pods in namespace %s to grab metrics from", metav1.NamespaceSystem)
7984
}
80-
for _, node := range nodeList.Items {
81-
if system.DeprecatedMightBeMasterNode(node.Name) {
82-
registeredMaster = true
83-
masterName = node.Name
85+
for _, pod := range podList.Items {
86+
if regKubeScheduler.MatchString(pod.Name) {
87+
kubeScheduler = pod.Name
88+
}
89+
if regKubeControllerManager.MatchString(pod.Name) {
90+
kubeControllerManager = pod.Name
91+
}
92+
if kubeScheduler != "" && kubeControllerManager != "" {
8493
break
8594
}
8695
}
87-
if !registeredMaster {
96+
if kubeScheduler == "" {
8897
scheduler = false
98+
klog.Warningf("Can't find kube-scheduler pod. Grabbing metrics from kube-scheduler is disabled.")
99+
}
100+
if kubeControllerManager == "" {
89101
controllers = false
90-
clusterAutoscaler = ec != nil
91-
if clusterAutoscaler {
92-
klog.Warningf("Master node is not registered. Grabbing metrics from Scheduler, ControllerManager is disabled.")
93-
} else {
94-
klog.Warningf("Master node is not registered. Grabbing metrics from Scheduler, ControllerManager and ClusterAutoscaler is disabled.")
95-
}
102+
klog.Warningf("Can't find kube-controller-manager pod. Grabbing metrics from kube-controller-manager is disabled.")
103+
}
104+
if ec == nil {
105+
klog.Warningf("Did not receive an external client interface. Grabbing metrics from ClusterAutoscaler is disabled.")
96106
}
97107

98108
return &Grabber{
@@ -103,14 +113,14 @@ func NewMetricsGrabber(c clientset.Interface, ec clientset.Interface, kubelets b
103113
grabFromKubelets: kubelets,
104114
grabFromScheduler: scheduler,
105115
grabFromClusterAutoscaler: clusterAutoscaler,
106-
masterName: masterName,
107-
registeredMaster: registeredMaster,
116+
kubeScheduler: kubeScheduler,
117+
kubeControllerManager: kubeControllerManager,
108118
}, nil
109119
}
110120

111-
// HasRegisteredMaster returns if metrics grabber was able to find a master node
112-
func (g *Grabber) HasRegisteredMaster() bool {
113-
return g.registeredMaster
121+
// HasControlPlanePods returns true if metrics grabber was able to find control-plane pods
122+
func (g *Grabber) HasControlPlanePods() bool {
123+
return g.kubeScheduler != "" && g.kubeControllerManager != ""
114124
}
115125

116126
// GrabFromKubelet returns metrics from kubelet
@@ -139,10 +149,10 @@ func (g *Grabber) grabFromKubeletInternal(nodeName string, kubeletPort int) (Kub
139149

140150
// GrabFromScheduler returns metrics from scheduler
141151
func (g *Grabber) GrabFromScheduler() (SchedulerMetrics, error) {
142-
if !g.registeredMaster {
143-
return SchedulerMetrics{}, fmt.Errorf("Master's Kubelet is not registered. Skipping Scheduler's metrics gathering")
152+
if g.kubeScheduler == "" {
153+
return SchedulerMetrics{}, fmt.Errorf("kube-scheduler pod is not registered. Skipping Scheduler's metrics gathering")
144154
}
145-
output, err := g.getMetricsFromPod(g.client, fmt.Sprintf("%v-%v", "kube-scheduler", g.masterName), metav1.NamespaceSystem, insecureSchedulerPort)
155+
output, err := g.getMetricsFromPod(g.client, g.kubeScheduler, metav1.NamespaceSystem, insecureSchedulerPort)
146156
if err != nil {
147157
return SchedulerMetrics{}, err
148158
}
@@ -151,8 +161,8 @@ func (g *Grabber) GrabFromScheduler() (SchedulerMetrics, error) {
151161

152162
// GrabFromClusterAutoscaler returns metrics from cluster autoscaler
153163
func (g *Grabber) GrabFromClusterAutoscaler() (ClusterAutoscalerMetrics, error) {
154-
if !g.registeredMaster && g.externalClient == nil {
155-
return ClusterAutoscalerMetrics{}, fmt.Errorf("Master's Kubelet is not registered. Skipping ClusterAutoscaler's metrics gathering")
164+
if !g.HasControlPlanePods() && g.externalClient == nil {
165+
return ClusterAutoscalerMetrics{}, fmt.Errorf("Did not find control-plane pods. Skipping ClusterAutoscaler's metrics gathering")
156166
}
157167
var client clientset.Interface
158168
var namespace string
@@ -172,12 +182,12 @@ func (g *Grabber) GrabFromClusterAutoscaler() (ClusterAutoscalerMetrics, error)
172182

173183
// GrabFromControllerManager returns metrics from controller manager
174184
func (g *Grabber) GrabFromControllerManager() (ControllerManagerMetrics, error) {
175-
if !g.registeredMaster {
176-
return ControllerManagerMetrics{}, fmt.Errorf("Master's Kubelet is not registered. Skipping ControllerManager's metrics gathering")
185+
if g.kubeControllerManager == "" {
186+
return ControllerManagerMetrics{}, fmt.Errorf("kube-controller-manager pod is not registered. Skipping ControllerManager's metrics gathering")
177187
}
178188

179189
var err error
180-
podName := fmt.Sprintf("%v-%v", "kube-controller-manager", g.masterName)
190+
podName := g.kubeControllerManager
181191
g.waitForControllerManagerReadyOnce.Do(func() {
182192
if readyErr := e2epod.WaitForPodsReady(g.client, metav1.NamespaceSystem, podName, 0); readyErr != nil {
183193
err = fmt.Errorf("error waiting for controller manager pod to be ready: %w", readyErr)

test/e2e/storage/testsuites/base.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ func getVolumeOpCounts(c clientset.Interface, pluginName string) opCounts {
625625
framework.ExpectNoError(err, "Error creating metrics grabber: %v", err)
626626
}
627627

628-
if !metricsGrabber.HasRegisteredMaster() {
628+
if !metricsGrabber.HasControlPlanePods() {
629629
framework.Logf("Warning: Environment does not support getting controller-manager metrics")
630630
return opCounts{}
631631
}

test/e2e/storage/volume_metrics.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
100100
ginkgo.It("should create prometheus metrics for volume provisioning and attach/detach", func() {
101101
var err error
102102

103-
if !metricsGrabber.HasRegisteredMaster() {
103+
if !metricsGrabber.HasControlPlanePods() {
104104
e2eskipper.Skipf("Environment does not support getting controller-manager metrics - skipping")
105105
}
106106

@@ -146,7 +146,7 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
146146
ginkgo.It("should create prometheus metrics for volume provisioning errors [Slow]", func() {
147147
var err error
148148

149-
if !metricsGrabber.HasRegisteredMaster() {
149+
if !metricsGrabber.HasControlPlanePods() {
150150
e2eskipper.Skipf("Environment does not support getting controller-manager metrics - skipping")
151151
}
152152

@@ -446,7 +446,7 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
446446
}
447447

448448
ginkgo.BeforeEach(func() {
449-
if !metricsGrabber.HasRegisteredMaster() {
449+
if !metricsGrabber.HasControlPlanePods() {
450450
e2eskipper.Skipf("Environment does not support getting controller-manager metrics - skipping")
451451
}
452452

0 commit comments

Comments
 (0)