Skip to content

Commit 3dd4a0e

Browse files
authored
Merge pull request #1205 from GoogleCloudPlatform/fix-informer-panic
custom-metrics-stackdriver-adapter: use metadata informer for pod resource metrics
2 parents f736b2e + 8c4d7eb commit 3dd4a0e

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

custom-metrics-stackdriver-adapter/adapter.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,13 @@ import (
3636
genericapiserver "k8s.io/apiserver/pkg/server"
3737
openapispec "k8s.io/kube-openapi/pkg/validation/spec"
3838
coreclient "k8s.io/client-go/kubernetes/typed/core/v1"
39+
"k8s.io/client-go/metadata"
40+
"k8s.io/client-go/metadata/metadatainformer"
3941
customexternalmetrics "sigs.k8s.io/custom-metrics-apiserver/pkg/apiserver"
4042
"sigs.k8s.io/custom-metrics-apiserver/pkg/provider"
4143

4244
"k8s.io/apimachinery/pkg/labels"
45+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4346
"k8s.io/apimachinery/pkg/version"
4447
"k8s.io/component-base/logs"
4548
"k8s.io/klog"
@@ -52,6 +55,7 @@ import (
5255
)
5356

5457
const (
58+
defaultResync = 0
5559
defaultExternalMetricsCacheSize = 300
5660
// This is only metric info and likely to be much smaller than separate metrics of each kind above
5761
defaultMetricKindCacheSize = 25
@@ -167,16 +171,29 @@ func (sa *StackdriverAdapter) withCoreMetrics(translator *translator.Translator)
167171
return err
168172
}
169173

170-
podInformer, nil := informers.ForResource(corev1.SchemeGroupVersion.WithResource("pods"))
174+
config, err := sa.ClientConfig()
171175
if err != nil {
172176
return err
173177
}
178+
metadataClient, err := metadata.NewForConfig(config)
179+
if err != nil {
180+
return err
181+
}
182+
metadataInformers := metadatainformer.NewFilteredSharedInformerFactory(metadataClient, defaultResync, corev1.NamespaceAll, func(options *metav1.ListOptions) {
183+
options.FieldSelector = "status.phase=Running"
184+
})
185+
podInformer := metadataInformers.ForResource(corev1.SchemeGroupVersion.WithResource("pods"))
174186

175187
nodes := informers.Core().V1().Nodes()
176188
if err := api.Install(provider, podInformer.Lister(), nodes.Lister(), server.GenericAPIServer, []labels.Requirement{}); err != nil {
177189
return err
178190
}
179191

192+
server.GenericAPIServer.AddPostStartHookOrDie("custom-metrics-stackdriver-adapter-metadata-informer", func(context genericapiserver.PostStartHookContext) error {
193+
metadataInformers.Start(context.Done())
194+
return nil
195+
})
196+
180197
return nil
181198
}
182199

0 commit comments

Comments
 (0)