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