mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Expose /metrics and /debug/pprof from kube-proxy
This commit is contained in:
parent
26f00c66db
commit
e35b1c21a1
@ -24,7 +24,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
"net/http/pprof"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -146,6 +146,7 @@ func AddFlags(options *Options, fs *pflag.FlagSet) {
|
|||||||
&options.config.Conntrack.TCPCloseWaitTimeout.Duration, "conntrack-tcp-timeout-close-wait",
|
&options.config.Conntrack.TCPCloseWaitTimeout.Duration, "conntrack-tcp-timeout-close-wait",
|
||||||
options.config.Conntrack.TCPCloseWaitTimeout.Duration,
|
options.config.Conntrack.TCPCloseWaitTimeout.Duration,
|
||||||
"NAT timeout for TCP connections in the CLOSE_WAIT state")
|
"NAT timeout for TCP connections in the CLOSE_WAIT state")
|
||||||
|
fs.BoolVar(&options.config.EnableProfiling, "profiling", options.config.EnableProfiling, "If true enables profiling via web interface on /debug/pprof handler.")
|
||||||
|
|
||||||
utilfeature.DefaultFeatureGate.AddFlag(fs)
|
utilfeature.DefaultFeatureGate.AddFlag(fs)
|
||||||
}
|
}
|
||||||
@ -298,6 +299,7 @@ type ProxyServer struct {
|
|||||||
NodeRef *clientv1.ObjectReference
|
NodeRef *clientv1.ObjectReference
|
||||||
CleanupAndExit bool
|
CleanupAndExit bool
|
||||||
MetricsBindAddress string
|
MetricsBindAddress string
|
||||||
|
EnableProfiling bool
|
||||||
OOMScoreAdj *int32
|
OOMScoreAdj *int32
|
||||||
ResourceContainer string
|
ResourceContainer string
|
||||||
ConfigSyncPeriod time.Duration
|
ConfigSyncPeriod time.Duration
|
||||||
@ -507,6 +509,7 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx
|
|||||||
ProxyMode: proxyMode,
|
ProxyMode: proxyMode,
|
||||||
NodeRef: nodeRef,
|
NodeRef: nodeRef,
|
||||||
MetricsBindAddress: config.MetricsBindAddress,
|
MetricsBindAddress: config.MetricsBindAddress,
|
||||||
|
EnableProfiling: config.EnableProfiling,
|
||||||
OOMScoreAdj: config.OOMScoreAdj,
|
OOMScoreAdj: config.OOMScoreAdj,
|
||||||
ResourceContainer: config.ResourceContainer,
|
ResourceContainer: config.ResourceContainer,
|
||||||
ConfigSyncPeriod: config.ConfigSyncPeriod.Duration,
|
ConfigSyncPeriod: config.ConfigSyncPeriod.Duration,
|
||||||
@ -555,13 +558,20 @@ func (s *ProxyServer) Run() error {
|
|||||||
|
|
||||||
// Start up a metrics server if requested
|
// Start up a metrics server if requested
|
||||||
if len(s.MetricsBindAddress) > 0 {
|
if len(s.MetricsBindAddress) > 0 {
|
||||||
http.HandleFunc("/proxyMode", func(w http.ResponseWriter, r *http.Request) {
|
mux := http.NewServeMux()
|
||||||
|
mux.HandleFunc("/proxyMode", func(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Fprintf(w, "%s", s.ProxyMode)
|
fmt.Fprintf(w, "%s", s.ProxyMode)
|
||||||
})
|
})
|
||||||
http.Handle("/metrics", prometheus.Handler())
|
mux.Handle("/metrics", prometheus.Handler())
|
||||||
configz.InstallHandler(http.DefaultServeMux)
|
if s.EnableProfiling {
|
||||||
|
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||||
|
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||||||
|
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||||||
|
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||||||
|
}
|
||||||
|
configz.InstallHandler(mux)
|
||||||
go wait.Until(func() {
|
go wait.Until(func() {
|
||||||
err := http.ListenAndServe(s.MetricsBindAddress, nil)
|
err := http.ListenAndServe(s.MetricsBindAddress, mux)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utilruntime.HandleError(fmt.Errorf("starting metrics server failed: %v", err))
|
utilruntime.HandleError(fmt.Errorf("starting metrics server failed: %v", err))
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,9 @@ type KubeProxyConfiguration struct {
|
|||||||
// metricsBindAddress is the IP address and port for the metrics server to serve on,
|
// metricsBindAddress is the IP address and port for the metrics server to serve on,
|
||||||
// defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
|
// defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
|
||||||
MetricsBindAddress string
|
MetricsBindAddress string
|
||||||
|
// enableProfiling enables profiling via web interface on /debug/pprof handler.
|
||||||
|
// Profiling handlers will be handled by metrics server.
|
||||||
|
EnableProfiling bool
|
||||||
// clusterCIDR is the CIDR range of the pods in the cluster. It is used to
|
// clusterCIDR is the CIDR range of the pods in the cluster. It is used to
|
||||||
// bridge traffic coming from outside of the cluster. If not provided,
|
// bridge traffic coming from outside of the cluster. If not provided,
|
||||||
// no off-cluster bridging will be performed.
|
// no off-cluster bridging will be performed.
|
||||||
|
@ -97,6 +97,9 @@ type KubeProxyConfiguration struct {
|
|||||||
// metricsBindAddress is the IP address and port for the metrics server to serve on,
|
// metricsBindAddress is the IP address and port for the metrics server to serve on,
|
||||||
// defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
|
// defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
|
||||||
MetricsBindAddress string `json:"metricsBindAddress"`
|
MetricsBindAddress string `json:"metricsBindAddress"`
|
||||||
|
// enableProfiling enables profiling via web interface on /debug/pprof handler.
|
||||||
|
// Profiling handlers will be handled by metrics server.
|
||||||
|
EnableProfiling bool `json:"enableProfiling"`
|
||||||
// clusterCIDR is the CIDR range of the pods in the cluster. It is used to
|
// clusterCIDR is the CIDR range of the pods in the cluster. It is used to
|
||||||
// bridge traffic coming from outside of the cluster. If not provided,
|
// bridge traffic coming from outside of the cluster. If not provided,
|
||||||
// no off-cluster bridging will be performed.
|
// no off-cluster bridging will be performed.
|
||||||
|
@ -100,6 +100,7 @@ func autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyCon
|
|||||||
out.BindAddress = in.BindAddress
|
out.BindAddress = in.BindAddress
|
||||||
out.HealthzBindAddress = in.HealthzBindAddress
|
out.HealthzBindAddress = in.HealthzBindAddress
|
||||||
out.MetricsBindAddress = in.MetricsBindAddress
|
out.MetricsBindAddress = in.MetricsBindAddress
|
||||||
|
out.EnableProfiling = in.EnableProfiling
|
||||||
out.ClusterCIDR = in.ClusterCIDR
|
out.ClusterCIDR = in.ClusterCIDR
|
||||||
out.HostnameOverride = in.HostnameOverride
|
out.HostnameOverride = in.HostnameOverride
|
||||||
if err := Convert_v1alpha1_ClientConnectionConfiguration_To_componentconfig_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
if err := Convert_v1alpha1_ClientConnectionConfiguration_To_componentconfig_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
||||||
@ -130,6 +131,7 @@ func autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyCon
|
|||||||
out.BindAddress = in.BindAddress
|
out.BindAddress = in.BindAddress
|
||||||
out.HealthzBindAddress = in.HealthzBindAddress
|
out.HealthzBindAddress = in.HealthzBindAddress
|
||||||
out.MetricsBindAddress = in.MetricsBindAddress
|
out.MetricsBindAddress = in.MetricsBindAddress
|
||||||
|
out.EnableProfiling = in.EnableProfiling
|
||||||
out.ClusterCIDR = in.ClusterCIDR
|
out.ClusterCIDR = in.ClusterCIDR
|
||||||
out.HostnameOverride = in.HostnameOverride
|
out.HostnameOverride = in.HostnameOverride
|
||||||
if err := Convert_componentconfig_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
if err := Convert_componentconfig_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user