1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-21 03:38:43 +00:00

Merge pull request from simonpasquier/use-metadata-informers-for-agent

fix: use metadata informer for agent controller
This commit is contained in:
Simon Pasquier 2023-10-10 18:14:30 +02:00 committed by GitHub
commit 2abc7f14a5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -32,6 +32,7 @@ import (
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/metadata"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
@ -55,7 +56,9 @@ const (
// monitoring configurations.
type Operator struct {
kclient kubernetes.Interface
mdClient metadata.Interface
mclient monitoringclient.Interface
logger log.Logger
accessor *operator.Accessor
@ -91,6 +94,11 @@ func New(ctx context.Context, restConfig *rest.Config, conf operator.Config, log
return nil, fmt.Errorf("instantiating kubernetes client failed: %w", err)
}
mdClient, err := metadata.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating metadata client failed: %w", err)
}
mclient, err := monitoringclient.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating monitoring client failed: %w", err)
@ -110,6 +118,7 @@ func New(ctx context.Context, restConfig *rest.Config, conf operator.Config, log
c := &Operator{
kclient: client,
mdClient: mdClient,
mclient: mclient,
logger: logger,
config: conf,
@ -212,10 +221,10 @@ func New(ctx context.Context, restConfig *rest.Config, conf operator.Config, log
}
c.cmapInfs, err = informers.NewInformersForResource(
informers.NewKubeInformerFactories(
informers.NewMetadataInformerFactory(
c.config.Namespaces.PrometheusAllowList,
c.config.Namespaces.DenyList,
c.kclient,
c.mdClient,
resyncPeriod,
func(options *metav1.ListOptions) {
options.LabelSelector = prompkg.LabelPrometheusName
@ -228,10 +237,10 @@ func New(ctx context.Context, restConfig *rest.Config, conf operator.Config, log
}
c.secrInfs, err = informers.NewInformersForResource(
informers.NewKubeInformerFactories(
informers.NewMetadataInformerFactory(
c.config.Namespaces.PrometheusAllowList,
c.config.Namespaces.DenyList,
c.kclient,
c.mdClient,
resyncPeriod,
func(options *metav1.ListOptions) {
options.FieldSelector = secretListWatchSelector.String()
@ -1020,52 +1029,65 @@ func (c *Operator) handleConfigMapDelete(obj interface{}) {
}
func (c *Operator) handleConfigMapUpdate(old, cur interface{}) {
if old.(*v1.ConfigMap).ResourceVersion == cur.(*v1.ConfigMap).ResourceVersion {
oldObj, ok := c.accessor.ObjectMetadata(old)
if !ok {
return
}
o, ok := c.accessor.ObjectMetadata(cur)
if ok {
level.Debug(c.logger).Log("msg", "ConfigMap updated")
c.metrics.TriggerByCounter("ConfigMap", operator.UpdateEvent).Inc()
c.enqueueForPrometheusNamespace(o.GetNamespace())
curObj, ok := c.accessor.ObjectMetadata(cur)
if !ok {
return
}
if oldObj.GetResourceVersion() == curObj.GetResourceVersion() {
return
}
level.Debug(c.logger).Log("msg", "ConfigMap updated")
c.metrics.TriggerByCounter("ConfigMap", operator.UpdateEvent).Inc()
c.enqueueForPrometheusNamespace(curObj.GetNamespace())
}
// TODO: Do we need to enqueue secrets just for the namespace or in general?
func (c *Operator) handleSecretDelete(obj interface{}) {
o, ok := c.accessor.ObjectMetadata(obj)
if ok {
level.Debug(c.logger).Log("msg", "Secret deleted")
c.metrics.TriggerByCounter("Secret", operator.DeleteEvent).Inc()
c.enqueueForPrometheusNamespace(o.GetNamespace())
}
}
func (c *Operator) handleSecretUpdate(old, cur interface{}) {
if old.(*v1.Secret).ResourceVersion == cur.(*v1.Secret).ResourceVersion {
if !ok {
return
}
o, ok := c.accessor.ObjectMetadata(cur)
if ok {
level.Debug(c.logger).Log("msg", "Secret updated")
c.metrics.TriggerByCounter("Secret", operator.UpdateEvent).Inc()
level.Debug(c.logger).Log("msg", "Secret deleted")
c.metrics.TriggerByCounter("Secret", operator.DeleteEvent).Inc()
c.enqueueForPrometheusNamespace(o.GetNamespace())
}
c.enqueueForPrometheusNamespace(o.GetNamespace())
func (c *Operator) handleSecretUpdate(old, cur interface{}) {
oldObj, ok := c.accessor.ObjectMetadata(old)
if !ok {
return
}
curObj, ok := c.accessor.ObjectMetadata(cur)
if !ok {
return
}
if oldObj.GetResourceVersion() == curObj.GetResourceVersion() {
return
}
level.Debug(c.logger).Log("msg", "Secret updated")
c.metrics.TriggerByCounter("Secret", operator.UpdateEvent).Inc()
}
func (c *Operator) handleSecretAdd(obj interface{}) {
o, ok := c.accessor.ObjectMetadata(obj)
if ok {
level.Debug(c.logger).Log("msg", "Secret added")
c.metrics.TriggerByCounter("Secret", operator.AddEvent).Inc()
c.enqueueForPrometheusNamespace(o.GetNamespace())
if !ok {
return
}
level.Debug(c.logger).Log("msg", "Secret added")
c.metrics.TriggerByCounter("Secret", operator.AddEvent).Inc()
c.enqueueForPrometheusNamespace(o.GetNamespace())
}
func (c *Operator) enqueueForPrometheusNamespace(nsName string) {