Skip to content

Commit d8077e9

Browse files
authored
Merge pull request kubernetes#89048 from aojea/flakymetrics
wait until /metrics are ready on e2e test
2 parents 562a420 + 4361f8f commit d8077e9

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

test/e2e/framework/metrics/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ go_library(
2828
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2929
"//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library",
3030
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
31+
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
3132
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
3233
"//staging/src/k8s.io/component-base/metrics/testutil:go_default_library",
3334
"//test/e2e/framework/log:go_default_library",

test/e2e/framework/metrics/metrics_grabber.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ import (
2020
"context"
2121
"fmt"
2222
"sync"
23+
"time"
2324

2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
"k8s.io/apimachinery/pkg/fields"
27+
"k8s.io/apimachinery/pkg/util/wait"
2628
clientset "k8s.io/client-go/kubernetes"
2729
"k8s.io/kubernetes/pkg/master/ports"
2830
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
@@ -164,10 +166,27 @@ func (g *Grabber) GrabFromControllerManager() (ControllerManagerMetrics, error)
164166
return ControllerManagerMetrics{}, fmt.Errorf("Master's Kubelet is not registered. Skipping ControllerManager's metrics gathering")
165167
}
166168

169+
var err error
167170
podName := fmt.Sprintf("%v-%v", "kube-controller-manager", g.masterName)
168171
g.waitForControllerManagerReadyOnce.Do(func() {
169-
e2epod.WaitForPodNameRunningInNamespace(g.client, podName, metav1.NamespaceSystem)
172+
if runningErr := e2epod.WaitForPodNameRunningInNamespace(g.client, podName, metav1.NamespaceSystem); runningErr != nil {
173+
err = fmt.Errorf("error waiting for controller manager pod to be running: %w", err)
174+
return
175+
}
176+
177+
var lastMetricsFetchErr error
178+
if metricsWaitErr := wait.PollImmediate(time.Second, time.Minute, func() (bool, error) {
179+
_, lastMetricsFetchErr = g.getMetricsFromPod(g.client, podName, metav1.NamespaceSystem, ports.InsecureKubeControllerManagerPort)
180+
return lastMetricsFetchErr == nil, nil
181+
}); metricsWaitErr != nil {
182+
err = fmt.Errorf("error waiting for controller manager pod to expose metrics: %v; %v", err, lastMetricsFetchErr)
183+
return
184+
}
170185
})
186+
if err != nil {
187+
return ControllerManagerMetrics{}, err
188+
}
189+
171190
output, err := g.getMetricsFromPod(g.client, podName, metav1.NamespaceSystem, ports.InsecureKubeControllerManagerPort)
172191
if err != nil {
173192
return ControllerManagerMetrics{}, err

0 commit comments

Comments
 (0)