From b00f2e02c7b682765bf8c6b71fc3607f02687df9 Mon Sep 17 00:00:00 2001 From: Charandas <542168+charandas@users.noreply.github.com> Date: Wed, 19 Feb 2025 12:39:40 -0800 Subject: [PATCH] K8s: don't publish metrics for local services that are always available (#101003) --- .../apiserver/aggregator/availableController.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/services/apiserver/aggregator/availableController.go b/pkg/services/apiserver/aggregator/availableController.go index e1935469c97..045e45a6d2e 100644 --- a/pkg/services/apiserver/aggregator/availableController.go +++ b/pkg/services/apiserver/aggregator/availableController.go @@ -127,7 +127,10 @@ func NewAvailableConditionController( func (c *AvailableConditionController) sync(key string) error { originalAPIService, err := c.apiServiceLister.Get(key) if apierrors.IsNotFound(err) { - c.metrics.ForgetAPIService(key) + if originalAPIService.Spec.Service != nil { + // Only reset state, if the service was a remote service + c.metrics.ForgetAPIService(key) + } return nil } if err != nil { @@ -292,7 +295,10 @@ func (c *AvailableConditionController) sync(key string) error { // apiservices. Doing that means we don't want to quickly issue no-op updates. func (c *AvailableConditionController) updateAPIServiceStatus(originalAPIService, newAPIService *apiregistrationv1.APIService) (*apiregistrationv1.APIService, error) { // update this metric on every sync operation to reflect the actual state - c.metrics.SetUnavailableGauge(newAPIService) + if newAPIService.Spec.Service != nil { + // Only expose the metric for remote services, trusts the type on the new object + c.metrics.SetUnavailableGauge(newAPIService) + } if equality.Semantic.DeepEqual(originalAPIService.Status, newAPIService.Status) { return newAPIService, nil @@ -319,7 +325,10 @@ func (c *AvailableConditionController) updateAPIServiceStatus(originalAPIService return nil, err } - c.metrics.SetUnavailableCounter(originalAPIService, newAPIService) + if newAPIService.Spec.Service != nil { + // Only expose the metric for remote services, trusts the type on the new object + c.metrics.SetUnavailableCounter(originalAPIService, newAPIService) + } return newAPIService, nil }