Enabling kube-proxy metrics on windows kernel mode

This commit is contained in:
Amim Knabben 2021-11-21 20:16:40 -03:00
parent a8c9dd6274
commit 8b37bfec8e
3 changed files with 19 additions and 34 deletions

View File

@ -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")

View File

@ -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)
})
}

View File

@ -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