Skip to content

Commit 176c8e2

Browse files
author
Kenichi Omichi
committed
Avoid DeprecatedMightBeMasterNode() in e2e metrics
As its name, DeprecatedMightBeMasterNode is deprecated. In e2e metrics, the function was used for knowing master node name to get metrics from kube-scheduler and kube-controller-manager pods. This make e2e metrics get these metrics directly by getting those pod names without calling DeprecatedMightBeMasterNode().
1 parent b0967ed commit 176c8e2

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)