@@ -19,11 +19,13 @@ package metrics
19
19
import (
20
20
"context"
21
21
"fmt"
22
+ "sync"
22
23
23
24
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24
25
"k8s.io/apimachinery/pkg/fields"
25
26
clientset "k8s.io/client-go/kubernetes"
26
27
"k8s.io/kubernetes/pkg/master/ports"
28
+ e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
27
29
"k8s.io/kubernetes/test/e2e/system"
28
30
29
31
"k8s.io/klog"
@@ -40,15 +42,16 @@ type Collection struct {
40
42
41
43
// Grabber provides functions which grab metrics from components
42
44
type Grabber struct {
43
- client clientset.Interface
44
- externalClient clientset.Interface
45
- grabFromAPIServer bool
46
- grabFromControllerManager bool
47
- grabFromKubelets bool
48
- grabFromScheduler bool
49
- grabFromClusterAutoscaler bool
50
- masterName string
51
- registeredMaster bool
45
+ client clientset.Interface
46
+ externalClient clientset.Interface
47
+ grabFromAPIServer bool
48
+ grabFromControllerManager bool
49
+ grabFromKubelets bool
50
+ grabFromScheduler bool
51
+ grabFromClusterAutoscaler bool
52
+ masterName string
53
+ registeredMaster bool
54
+ waitForControllerManagerReadyOnce sync.Once
52
55
}
53
56
54
57
// NewMetricsGrabber returns new metrics which are initialized.
@@ -160,7 +163,12 @@ func (g *Grabber) GrabFromControllerManager() (ControllerManagerMetrics, error)
160
163
if ! g .registeredMaster {
161
164
return ControllerManagerMetrics {}, fmt .Errorf ("Master's Kubelet is not registered. Skipping ControllerManager's metrics gathering" )
162
165
}
163
- output , err := g .getMetricsFromPod (g .client , fmt .Sprintf ("%v-%v" , "kube-controller-manager" , g .masterName ), metav1 .NamespaceSystem , ports .InsecureKubeControllerManagerPort )
166
+
167
+ podName := fmt .Sprintf ("%v-%v" , "kube-controller-manager" , g .masterName )
168
+ g .waitForControllerManagerReadyOnce .Do (func () {
169
+ e2epod .WaitForPodNameRunningInNamespace (g .client , podName , metav1 .NamespaceSystem )
170
+ })
171
+ output , err := g .getMetricsFromPod (g .client , podName , metav1 .NamespaceSystem , ports .InsecureKubeControllerManagerPort )
164
172
if err != nil {
165
173
return ControllerManagerMetrics {}, err
166
174
}
0 commit comments