diff --git a/cmd/kube-proxy/app/server_windows.go b/cmd/kube-proxy/app/server_windows.go index c3b18c8fd19..482b09697f4 100644 --- a/cmd/kube-proxy/app/server_windows.go +++ b/cmd/kube-proxy/app/server_windows.go @@ -141,6 +141,8 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi if err != nil { return nil, fmt.Errorf("unable to create proxier: %v", err) } + + winkernel.RegisterMetrics() } else { klog.V(0).InfoS("Using userspace Proxier.") klog.V(0).InfoS("The userspace proxier is now deprecated and will be removed in a future release, please use 'kernelspace' instead") diff --git a/pkg/proxy/winkernel/metrics.go b/pkg/proxy/winkernel/metrics.go index d596210e20c..e4357e4eceb 100644 --- a/pkg/proxy/winkernel/metrics.go +++ b/pkg/proxy/winkernel/metrics.go @@ -19,40 +19,21 @@ package winkernel import ( "sync" - "k8s.io/component-base/metrics" "k8s.io/component-base/metrics/legacyregistry" -) - -const kubeProxySubsystem = "kubeproxy" - -var ( - SyncProxyRulesLatency = metrics.NewHistogram( - &metrics.HistogramOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_duration_seconds", - Help: "SyncProxyRules latency in seconds", - Buckets: metrics.ExponentialBuckets(0.001, 2, 15), - StabilityLevel: metrics.ALPHA, - }, - ) - - // SyncProxyRulesLastTimestamp is the timestamp proxy rules were last - // successfully synced. - SyncProxyRulesLastTimestamp = metrics.NewGauge( - &metrics.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_last_timestamp_seconds", - Help: "The last time proxy rules were successfully synced", - StabilityLevel: metrics.ALPHA, - }, - ) + "k8s.io/kubernetes/pkg/proxy/metrics" ) var registerMetricsOnce sync.Once +// RegisterMetrics registers kube-proxy metrics for Windows modes. func RegisterMetrics() { registerMetricsOnce.Do(func() { - legacyregistry.MustRegister(SyncProxyRulesLatency) - legacyregistry.MustRegister(SyncProxyRulesLastTimestamp) + legacyregistry.MustRegister(metrics.SyncProxyRulesLatency) + legacyregistry.MustRegister(metrics.SyncProxyRulesLastTimestamp) + legacyregistry.MustRegister(metrics.EndpointChangesPending) + legacyregistry.MustRegister(metrics.EndpointChangesTotal) + legacyregistry.MustRegister(metrics.ServiceChangesPending) + legacyregistry.MustRegister(metrics.ServiceChangesTotal) + legacyregistry.MustRegister(metrics.SyncProxyRulesLastQueuedTimestamp) }) } diff --git a/pkg/proxy/winkernel/proxier.go b/pkg/proxy/winkernel/proxier.go index 108958edd35..b7438a5c037 100644 --- a/pkg/proxy/winkernel/proxier.go +++ b/pkg/proxy/winkernel/proxier.go @@ -972,17 +972,19 @@ func (proxier *Proxier) syncProxyRules() { proxier.mu.Lock() defer proxier.mu.Unlock() - start := time.Now() - defer func() { - SyncProxyRulesLatency.Observe(metrics.SinceInSeconds(start)) - klog.V(4).InfoS("Syncing proxy rules complete", "elapsed", time.Since(start)) - }() // don't sync rules till we've received services and endpoints if !proxier.isInitialized() { klog.V(2).InfoS("Not syncing hns until Services and Endpoints have been received from master") return } + // Keep track of how long syncs take. + start := time.Now() + defer func() { + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInSeconds(start)) + klog.V(4).InfoS("Syncing proxy rules complete", "elapsed", time.Since(start)) + }() + hnsNetworkName := proxier.network.name hns := proxier.hns @@ -1310,7 +1312,7 @@ func (proxier *Proxier) syncProxyRules() { if proxier.healthzServer != nil { proxier.healthzServer.Updated() } - SyncProxyRulesLastTimestamp.SetToCurrentTime() + metrics.SyncProxyRulesLastTimestamp.SetToCurrentTime() // Update service healthchecks. The endpoints list might include services that are // not "OnlyLocal", but the services list will not, and the serviceHealthServer