@@ -20,9 +20,11 @@ import (
20
20
"context"
21
21
"fmt"
22
22
"sync"
23
+ "time"
23
24
24
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
26
"k8s.io/apimachinery/pkg/fields"
27
+ "k8s.io/apimachinery/pkg/util/wait"
26
28
clientset "k8s.io/client-go/kubernetes"
27
29
"k8s.io/kubernetes/pkg/master/ports"
28
30
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
@@ -164,10 +166,27 @@ func (g *Grabber) GrabFromControllerManager() (ControllerManagerMetrics, error)
164
166
return ControllerManagerMetrics {}, fmt .Errorf ("Master's Kubelet is not registered. Skipping ControllerManager's metrics gathering" )
165
167
}
166
168
169
+ var err error
167
170
podName := fmt .Sprintf ("%v-%v" , "kube-controller-manager" , g .masterName )
168
171
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
+ }
170
185
})
186
+ if err != nil {
187
+ return ControllerManagerMetrics {}, err
188
+ }
189
+
171
190
output , err := g .getMetricsFromPod (g .client , podName , metav1 .NamespaceSystem , ports .InsecureKubeControllerManagerPort )
172
191
if err != nil {
173
192
return ControllerManagerMetrics {}, err
0 commit comments