mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #81626 from logicalhan/proxy-migration
migrate kube-proxy metrics to stability framework
This commit is contained in:
		@@ -20,10 +20,9 @@ go_library(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/cmd/kube-proxy",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//cmd/kube-proxy/app:go_default_library",
 | 
			
		||||
        "//pkg/client/metrics/prometheus:go_default_library",
 | 
			
		||||
        "//pkg/version/prometheus:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/cli/flag:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/logs:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/prometheus/restclient:go_default_library",
 | 
			
		||||
        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -63,9 +63,9 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/record:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/cli/flag:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/config:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kube-proxy/config/v1alpha1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/fsnotify/fsnotify:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
        "//vendor/github.com/spf13/cobra:go_default_library",
 | 
			
		||||
        "//vendor/github.com/spf13/pflag:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,10 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
 | 
			
		||||
	v1 "k8s.io/api/core/v1"
 | 
			
		||||
	v1meta "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/labels"
 | 
			
		||||
@@ -48,6 +52,8 @@ import (
 | 
			
		||||
	"k8s.io/client-go/tools/record"
 | 
			
		||||
	cliflag "k8s.io/component-base/cli/flag"
 | 
			
		||||
	componentbaseconfig "k8s.io/component-base/config"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
	"k8s.io/kube-proxy/config/v1alpha1"
 | 
			
		||||
	api "k8s.io/kubernetes/pkg/apis/core"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/qos"
 | 
			
		||||
@@ -74,12 +80,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version/verflag"
 | 
			
		||||
	"k8s.io/utils/exec"
 | 
			
		||||
	utilpointer "k8s.io/utils/pointer"
 | 
			
		||||
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@@ -551,7 +551,7 @@ func (s *ProxyServer) Run() error {
 | 
			
		||||
		proxyMux.HandleFunc("/proxyMode", func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
			fmt.Fprintf(w, "%s", s.ProxyMode)
 | 
			
		||||
		})
 | 
			
		||||
		proxyMux.Handle("/metrics", prometheus.Handler())
 | 
			
		||||
		proxyMux.Handle("/metrics", legacyregistry.Handler())
 | 
			
		||||
		if s.EnableProfiling {
 | 
			
		||||
			routes.Profiling{}.Install(proxyMux)
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,9 +26,8 @@ import (
 | 
			
		||||
 | 
			
		||||
	cliflag "k8s.io/component-base/cli/flag"
 | 
			
		||||
	"k8s.io/component-base/logs"
 | 
			
		||||
	_ "k8s.io/component-base/metrics/prometheus/restclient" // for client metric registration
 | 
			
		||||
	"k8s.io/kubernetes/cmd/kube-proxy/app"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/version/prometheus"        // for version metric registration
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,11 @@ go_library(
 | 
			
		||||
    srcs = ["metrics.go"],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/proxy/metrics",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = ["//vendor/github.com/prometheus/client_golang/prometheus:go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
 
 | 
			
		||||
@@ -21,38 +21,44 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const kubeProxySubsystem = "kubeproxy"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// SyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules.
 | 
			
		||||
	SyncProxyRulesLatency = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	SyncProxyRulesLatency = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_duration_seconds",
 | 
			
		||||
			Help:           "SyncProxyRules latency in seconds",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(0.001, 2, 15),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// DeprecatedSyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules.
 | 
			
		||||
	DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	DeprecatedSyncProxyRulesLatency = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_latency_microseconds",
 | 
			
		||||
			Help:           "(Deprecated) SyncProxyRules latency in microseconds",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(1000, 2, 15),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// SyncProxyRulesLastTimestamp is the timestamp proxy rules were last
 | 
			
		||||
	// successfully synced.
 | 
			
		||||
	SyncProxyRulesLastTimestamp = prometheus.NewGauge(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
	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,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
@@ -63,8 +69,8 @@ var (
 | 
			
		||||
	// Note that the metrics is partially based on the time exported by the endpoints controller on
 | 
			
		||||
	// the master machine. The measurement may be inaccurate if there is a clock drift between the
 | 
			
		||||
	// node and master machine.
 | 
			
		||||
	NetworkProgrammingLatency = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	NetworkProgrammingLatency = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Subsystem: kubeProxySubsystem,
 | 
			
		||||
			Name:      "network_programming_duration_seconds",
 | 
			
		||||
			Help:      "In Cluster Network Programming Latency in seconds",
 | 
			
		||||
@@ -74,56 +80,62 @@ var (
 | 
			
		||||
				prometheus.LinearBuckets(60, 5, 12),     // 60s, 65s, 70s, ... 115s
 | 
			
		||||
				prometheus.LinearBuckets(120, 30, 7),    // 2min, 2.5min, 3min, ..., 5min
 | 
			
		||||
			),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// EndpointChangesPending is the number of pending endpoint changes that
 | 
			
		||||
	// have not yet been synced to the proxy.
 | 
			
		||||
	EndpointChangesPending = prometheus.NewGauge(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
	EndpointChangesPending = metrics.NewGauge(
 | 
			
		||||
		&metrics.GaugeOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_endpoint_changes_pending",
 | 
			
		||||
			Help:           "Pending proxy rules Endpoint changes",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// EndpointChangesTotal is the number of endpoint changes that the proxy
 | 
			
		||||
	// has seen.
 | 
			
		||||
	EndpointChangesTotal = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
	EndpointChangesTotal = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_endpoint_changes_total",
 | 
			
		||||
			Help:           "Cumulative proxy rules Endpoint changes",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// ServiceChangesPending is the number of pending service changes that
 | 
			
		||||
	// have not yet been synced to the proxy.
 | 
			
		||||
	ServiceChangesPending = prometheus.NewGauge(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
	ServiceChangesPending = metrics.NewGauge(
 | 
			
		||||
		&metrics.GaugeOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_service_changes_pending",
 | 
			
		||||
			Help:           "Pending proxy rules Service changes",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// ServiceChangesTotal is the number of service changes that the proxy has
 | 
			
		||||
	// seen.
 | 
			
		||||
	ServiceChangesTotal = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
	ServiceChangesTotal = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_service_changes_total",
 | 
			
		||||
			Help:           "Cumulative proxy rules Service changes",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// IptablesRestoreFailuresTotal is the number of iptables restore failures that the proxy has
 | 
			
		||||
	// seen.
 | 
			
		||||
	IptablesRestoreFailuresTotal = prometheus.NewCounter(
 | 
			
		||||
		prometheus.CounterOpts{
 | 
			
		||||
	IptablesRestoreFailuresTotal = metrics.NewCounter(
 | 
			
		||||
		&metrics.CounterOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_iptables_restore_failures_total",
 | 
			
		||||
			Help:           "Cumulative proxy iptables restore failures",
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
@@ -133,15 +145,15 @@ var registerMetricsOnce sync.Once
 | 
			
		||||
// RegisterMetrics registers kube-proxy metrics.
 | 
			
		||||
func RegisterMetrics() {
 | 
			
		||||
	registerMetricsOnce.Do(func() {
 | 
			
		||||
		prometheus.MustRegister(SyncProxyRulesLatency)
 | 
			
		||||
		prometheus.MustRegister(DeprecatedSyncProxyRulesLatency)
 | 
			
		||||
		prometheus.MustRegister(SyncProxyRulesLastTimestamp)
 | 
			
		||||
		prometheus.MustRegister(NetworkProgrammingLatency)
 | 
			
		||||
		prometheus.MustRegister(EndpointChangesPending)
 | 
			
		||||
		prometheus.MustRegister(EndpointChangesTotal)
 | 
			
		||||
		prometheus.MustRegister(ServiceChangesPending)
 | 
			
		||||
		prometheus.MustRegister(ServiceChangesTotal)
 | 
			
		||||
		prometheus.MustRegister(IptablesRestoreFailuresTotal)
 | 
			
		||||
		legacyregistry.MustRegister(SyncProxyRulesLatency)
 | 
			
		||||
		legacyregistry.MustRegister(DeprecatedSyncProxyRulesLatency)
 | 
			
		||||
		legacyregistry.MustRegister(SyncProxyRulesLastTimestamp)
 | 
			
		||||
		legacyregistry.MustRegister(NetworkProgrammingLatency)
 | 
			
		||||
		legacyregistry.MustRegister(EndpointChangesPending)
 | 
			
		||||
		legacyregistry.MustRegister(EndpointChangesTotal)
 | 
			
		||||
		legacyregistry.MustRegister(ServiceChangesPending)
 | 
			
		||||
		legacyregistry.MustRegister(ServiceChangesTotal)
 | 
			
		||||
		legacyregistry.MustRegister(IptablesRestoreFailuresTotal)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@ go_library(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/proxy/winkernel",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
 | 
			
		||||
        "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
 | 
			
		||||
    ] + select({
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:windows": [
 | 
			
		||||
 
 | 
			
		||||
@@ -21,36 +21,42 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/prometheus/client_golang/prometheus"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/component-base/metrics"
 | 
			
		||||
	"k8s.io/component-base/metrics/legacyregistry"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const kubeProxySubsystem = "kubeproxy"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	SyncProxyRulesLatency = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	SyncProxyRulesLatency = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_duration_seconds",
 | 
			
		||||
			Help:           "SyncProxyRules latency in seconds",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(0.001, 2, 15),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	DeprecatedSyncProxyRulesLatency = prometheus.NewHistogram(
 | 
			
		||||
		prometheus.HistogramOpts{
 | 
			
		||||
	DeprecatedSyncProxyRulesLatency = metrics.NewHistogram(
 | 
			
		||||
		&metrics.HistogramOpts{
 | 
			
		||||
			Subsystem:      kubeProxySubsystem,
 | 
			
		||||
			Name:           "sync_proxy_rules_latency_microseconds",
 | 
			
		||||
			Help:           "(Deprecated) SyncProxyRules latency in microseconds",
 | 
			
		||||
			Buckets:        prometheus.ExponentialBuckets(1000, 2, 15),
 | 
			
		||||
			StabilityLevel: metrics.ALPHA,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// SyncProxyRulesLastTimestamp is the timestamp proxy rules were last
 | 
			
		||||
	// successfully synced.
 | 
			
		||||
	SyncProxyRulesLastTimestamp = prometheus.NewGauge(
 | 
			
		||||
		prometheus.GaugeOpts{
 | 
			
		||||
	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,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
@@ -59,9 +65,9 @@ var registerMetricsOnce sync.Once
 | 
			
		||||
 | 
			
		||||
func RegisterMetrics() {
 | 
			
		||||
	registerMetricsOnce.Do(func() {
 | 
			
		||||
		prometheus.MustRegister(SyncProxyRulesLatency)
 | 
			
		||||
		prometheus.MustRegister(DeprecatedSyncProxyRulesLatency)
 | 
			
		||||
		prometheus.MustRegister(SyncProxyRulesLastTimestamp)
 | 
			
		||||
		legacyregistry.MustRegister(SyncProxyRulesLatency)
 | 
			
		||||
		legacyregistry.MustRegister(DeprecatedSyncProxyRulesLatency)
 | 
			
		||||
		legacyregistry.MustRegister(SyncProxyRulesLastTimestamp)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,7 @@ type GaugeMetric interface {
 | 
			
		||||
	Dec()
 | 
			
		||||
	Add(float64)
 | 
			
		||||
	Write(out *dto.Metric) error
 | 
			
		||||
	SetToCurrentTime()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObserverMetric captures individual observations.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user