From 8c4286bdd33dcca35bac800aa60d5a86224fff05 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Mon, 26 Jan 2026 14:56:19 +0100 Subject: [PATCH] feat(ccm): introduce metric route_controller_route_sync_total This metric tracks the amount of times routes are synced with the cloud provider. This metric is mainly used for A/B tests on the feature gate `CloudControllerManagerWatchBasedRoutesReconciliation` introduced in Kubernetes v1.35. --- .../controllers/route/metrics.go | 30 +++++++++++++++++++ .../controllers/route/route_controller.go | 4 +++ 2 files changed, 34 insertions(+) create mode 100644 staging/src/k8s.io/cloud-provider/controllers/route/metrics.go diff --git a/staging/src/k8s.io/cloud-provider/controllers/route/metrics.go b/staging/src/k8s.io/cloud-provider/controllers/route/metrics.go new file mode 100644 index 00000000000..6f2e55e9fb3 --- /dev/null +++ b/staging/src/k8s.io/cloud-provider/controllers/route/metrics.go @@ -0,0 +1,30 @@ +package route + +import ( + "sync" + + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" +) + +const ( + // subsystem is the name of this subsystem used for prometheus metrics. + subsystem = "route_controller" +) + +var registration sync.Once + +var ( + routeSyncCount = metrics.NewCounter(&metrics.CounterOpts{ + Name: "route_sync_total", + Subsystem: subsystem, + Help: "A metric counting the amount of times routes have been synced with the cloud provider.", + StabilityLevel: metrics.BETA, + }) +) + +func registerMetrics() { + registration.Do(func() { + legacyregistry.MustRegister(routeSyncCount) + }) +} diff --git a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go index c7e6c57e7da..ad897ac85b0 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go @@ -87,6 +87,8 @@ func New( clusterName string, clusterCIDRs []*net.IPNet, ) (*RouteController, error) { + registerMetrics() + if len(clusterCIDRs) == 0 { klog.Fatal("RouteController: Must specify clusterCIDR.") } @@ -247,6 +249,8 @@ func (rc *RouteController) processNextWorkItem(ctx context.Context) bool { } func (rc *RouteController) reconcileNodeRoutes(ctx context.Context) error { + routeSyncCount.Inc() + routeList, err := rc.routes.ListRoutes(ctx, rc.clusterName) if err != nil { return fmt.Errorf("error listing routes: %v", err)