mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Refactor Kubelet Server to take kubeConfiguration instead of multiple fields
This commit is contained in:
parent
51cdf4e97b
commit
af05a7eca3
@ -1187,9 +1187,7 @@ func startKubelet(k kubelet.Bootstrap, podCfg *config.PodConfig, kubeCfg *kubele
|
||||
|
||||
// start the kubelet server
|
||||
if enableServer {
|
||||
go k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth,
|
||||
enableCAdvisorJSONEndpoints, kubeCfg.EnableDebuggingHandlers, kubeCfg.EnableContentionProfiling,
|
||||
kubeCfg.EnableSystemLogHandler, kubeCfg.EnableProfilingHandler, kubeCfg.EnableDebugFlagsHandler)
|
||||
go k.ListenAndServe(kubeCfg, kubeDeps.TLSOptions, kubeDeps.Auth, enableCAdvisorJSONEndpoints)
|
||||
}
|
||||
if kubeCfg.ReadOnlyPort > 0 {
|
||||
go k.ListenAndServeReadOnly(net.ParseIP(kubeCfg.Address), uint(kubeCfg.ReadOnlyPort), enableCAdvisorJSONEndpoints)
|
||||
|
@ -195,9 +195,8 @@ type Bootstrap interface {
|
||||
GetConfiguration() kubeletconfiginternal.KubeletConfiguration
|
||||
BirthCry()
|
||||
StartGarbageCollection()
|
||||
ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface,
|
||||
enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, enableSystemLogHandler,
|
||||
enableProfilingHandler, enableDebugFlagsHandler bool)
|
||||
ListenAndServe(kubeCfg *kubeletconfiginternal.KubeletConfiguration, tlsOptions *server.TLSOptions, auth server.AuthInterface,
|
||||
enableCAdvisorJSONEndpoints bool)
|
||||
ListenAndServeReadOnly(address net.IP, port uint, enableCAdvisorJSONEndpoints bool)
|
||||
ListenAndServePodResources()
|
||||
Run(<-chan kubetypes.PodUpdate)
|
||||
@ -2227,12 +2226,9 @@ func (kl *Kubelet) ResyncInterval() time.Duration {
|
||||
}
|
||||
|
||||
// ListenAndServe runs the kubelet HTTP server.
|
||||
func (kl *Kubelet) ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface,
|
||||
enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, enableSystemLogHandler,
|
||||
enableProfilingHandler, enableDebugFlagsHandler bool) {
|
||||
server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, address, port, tlsOptions, auth,
|
||||
enableCAdvisorJSONEndpoints, enableDebuggingHandlers, enableContentionProfiling, enableSystemLogHandler,
|
||||
enableProfilingHandler, enableDebugFlagsHandler)
|
||||
func (kl *Kubelet) ListenAndServe(kubeCfg *kubeletconfiginternal.KubeletConfiguration, tlsOptions *server.TLSOptions,
|
||||
auth server.AuthInterface, enableCAdvisorJSONEndpoints bool) {
|
||||
server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, kubeCfg, tlsOptions, auth, enableCAdvisorJSONEndpoints)
|
||||
}
|
||||
|
||||
// ListenAndServeReadOnly runs the kubelet HTTP server in read-only mode.
|
||||
|
@ -19,6 +19,7 @@ go_library(
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/core/v1/validation:go_default_library",
|
||||
"//pkg/features:go_default_library",
|
||||
"//pkg/kubelet/apis/config:go_default_library",
|
||||
"//pkg/kubelet/apis/podresources:go_default_library",
|
||||
"//pkg/kubelet/container:go_default_library",
|
||||
"//pkg/kubelet/cri/streaming:go_default_library",
|
||||
@ -74,6 +75,7 @@ go_test(
|
||||
deps = [
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/core/install:go_default_library",
|
||||
"//pkg/kubelet/apis/config:go_default_library",
|
||||
"//pkg/kubelet/cm:go_default_library",
|
||||
"//pkg/kubelet/container:go_default_library",
|
||||
"//pkg/kubelet/cri/streaming:go_default_library",
|
||||
|
@ -66,6 +66,7 @@ import (
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/apis/core/v1/validation"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||
"k8s.io/kubernetes/pkg/kubelet/apis/podresources"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cri/streaming"
|
||||
@ -139,19 +140,15 @@ func (a *filteringContainer) RegisteredHandlePaths() []string {
|
||||
func ListenAndServeKubeletServer(
|
||||
host HostInterface,
|
||||
resourceAnalyzer stats.ResourceAnalyzer,
|
||||
address net.IP,
|
||||
port uint,
|
||||
kubeCfg *kubeletconfiginternal.KubeletConfiguration,
|
||||
tlsOptions *TLSOptions,
|
||||
auth AuthInterface,
|
||||
enableCAdvisorJSONEndpoints,
|
||||
enableDebuggingHandlers,
|
||||
enableContentionProfiling,
|
||||
enableSystemLogHandler,
|
||||
enableProfilingHandler,
|
||||
enableDebugFlagsHandler bool) {
|
||||
klog.Infof("Starting to listen on %s:%d", address, port)
|
||||
handler := NewServer(host, resourceAnalyzer, auth, enableCAdvisorJSONEndpoints, enableDebuggingHandlers,
|
||||
enableContentionProfiling, enableSystemLogHandler, enableProfilingHandler, enableDebugFlagsHandler)
|
||||
enableCAdvisorJSONEndpoints bool) {
|
||||
|
||||
address := net.ParseIP(kubeCfg.Address)
|
||||
port := uint(kubeCfg.Port)
|
||||
klog.InfoS("Starting to listen", "address", address, "port", port)
|
||||
handler := NewServer(host, resourceAnalyzer, auth, enableCAdvisorJSONEndpoints, kubeCfg)
|
||||
s := &http.Server{
|
||||
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
|
||||
Handler: &handler,
|
||||
@ -172,8 +169,8 @@ func ListenAndServeKubeletServer(
|
||||
|
||||
// ListenAndServeKubeletReadOnlyServer initializes a server to respond to HTTP network requests on the Kubelet.
|
||||
func ListenAndServeKubeletReadOnlyServer(host HostInterface, resourceAnalyzer stats.ResourceAnalyzer, address net.IP, port uint, enableCAdvisorJSONEndpoints bool) {
|
||||
klog.V(1).Infof("Starting to listen read-only on %s:%d", address, port)
|
||||
s := NewServer(host, resourceAnalyzer, nil, enableCAdvisorJSONEndpoints, false, false, false, false, false)
|
||||
klog.InfoS("Starting to listen read-only", "address", address, "port", port)
|
||||
s := NewServer(host, resourceAnalyzer, nil, enableCAdvisorJSONEndpoints, nil)
|
||||
|
||||
server := &http.Server{
|
||||
Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)),
|
||||
@ -225,12 +222,8 @@ func NewServer(
|
||||
host HostInterface,
|
||||
resourceAnalyzer stats.ResourceAnalyzer,
|
||||
auth AuthInterface,
|
||||
enableCAdvisorJSONEndpoints,
|
||||
enableDebuggingHandlers,
|
||||
enableContentionProfiling,
|
||||
enableSystemLogHandler,
|
||||
enableProfilingHandler,
|
||||
enableDebugFlagsHandler bool) Server {
|
||||
enableCAdvisorJSONEndpoints bool,
|
||||
kubeCfg *kubeletconfiginternal.KubeletConfiguration) Server {
|
||||
server := Server{
|
||||
host: host,
|
||||
resourceAnalyzer: resourceAnalyzer,
|
||||
@ -243,13 +236,13 @@ func NewServer(
|
||||
server.InstallAuthFilter()
|
||||
}
|
||||
server.InstallDefaultHandlers(enableCAdvisorJSONEndpoints)
|
||||
if enableDebuggingHandlers {
|
||||
if kubeCfg != nil && kubeCfg.EnableDebuggingHandlers {
|
||||
server.InstallDebuggingHandlers()
|
||||
// To maintain backward compatibility serve logs and pprof only when enableDebuggingHandlers is also enabled
|
||||
// see https://github.com/kubernetes/kubernetes/pull/87273
|
||||
server.InstallSystemLogHandler(enableSystemLogHandler)
|
||||
server.InstallProfilingHandler(enableProfilingHandler, enableContentionProfiling)
|
||||
server.InstallDebugFlagsHandler(enableDebugFlagsHandler)
|
||||
server.InstallSystemLogHandler(kubeCfg.EnableSystemLogHandler)
|
||||
server.InstallProfilingHandler(kubeCfg.EnableProfilingHandler, kubeCfg.EnableContentionProfiling)
|
||||
server.InstallDebugFlagsHandler(kubeCfg.EnableDebugFlagsHandler)
|
||||
} else {
|
||||
server.InstallDebuggingDisabledHandlers()
|
||||
}
|
||||
@ -563,9 +556,9 @@ func (s *Server) InstallDebugFlagsHandler(enableDebugFlagsHandler bool) {
|
||||
}
|
||||
|
||||
// InstallProfilingHandler registers the HTTP request patterns for /debug/pprof endpoint.
|
||||
func (s *Server) InstallProfilingHandler(enableSystemLogHandler bool, enableContentionProfiling bool) {
|
||||
func (s *Server) InstallProfilingHandler(enableProfilingLogHandler bool, enableContentionProfiling bool) {
|
||||
s.addMetricsBucketMatcher("debug")
|
||||
if !enableSystemLogHandler {
|
||||
if !enableProfilingLogHandler {
|
||||
s.restfulCont.Handle(pprofBasePath, getHandlerForDisabledEndpoint("profiling endpoint is disabled."))
|
||||
return
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ import (
|
||||
|
||||
// Do some initialization to decode the query parameters correctly.
|
||||
_ "k8s.io/kubernetes/pkg/apis/core/install"
|
||||
kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cri/streaming"
|
||||
@ -304,10 +305,17 @@ func newServerTest() *serverTestFramework {
|
||||
}
|
||||
|
||||
func newServerTestWithDebug(enableDebugging bool, streamingServer streaming.Server) *serverTestFramework {
|
||||
return newServerTestWithDebuggingHandlers(enableDebugging, enableDebugging, streamingServer)
|
||||
kubeCfg := &kubeletconfiginternal.KubeletConfiguration{
|
||||
EnableDebuggingHandlers: enableDebugging,
|
||||
EnableSystemLogHandler: enableDebugging,
|
||||
EnableProfilingHandler: enableDebugging,
|
||||
EnableDebugFlagsHandler: enableDebugging,
|
||||
}
|
||||
return newServerTestWithDebuggingHandlers(kubeCfg, streamingServer)
|
||||
}
|
||||
|
||||
func newServerTestWithDebuggingHandlers(enableDebugging, enableLogAndProfilingHandler bool, streamingServer streaming.Server) *serverTestFramework {
|
||||
func newServerTestWithDebuggingHandlers(kubeCfg *kubeletconfiginternal.KubeletConfiguration, streamingServer streaming.Server) *serverTestFramework {
|
||||
|
||||
fw := &serverTestFramework{}
|
||||
fw.fakeKubelet = &fakeKubelet{
|
||||
hostnameFunc: func() string {
|
||||
@ -341,11 +349,7 @@ func newServerTestWithDebuggingHandlers(enableDebugging, enableLogAndProfilingHa
|
||||
stats.NewResourceAnalyzer(fw.fakeKubelet, time.Minute),
|
||||
fw.fakeAuth,
|
||||
true,
|
||||
enableDebugging,
|
||||
false,
|
||||
enableLogAndProfilingHandler,
|
||||
enableLogAndProfilingHandler,
|
||||
enableLogAndProfilingHandler)
|
||||
kubeCfg)
|
||||
fw.serverUnderTest = &server
|
||||
fw.testHTTPServer = httptest.NewServer(fw.serverUnderTest)
|
||||
return fw
|
||||
@ -1506,9 +1510,15 @@ func TestMetricMethodBuckets(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDebuggingDisabledHandlers(t *testing.T) {
|
||||
// for backward compatibility even if enablesystemLogHandler is set but not enableDebuggingHandler then /logs
|
||||
//shouldn't be served.
|
||||
fw := newServerTestWithDebuggingHandlers(false, true, nil)
|
||||
// for backward compatibility even if enablesystemLogHandler or enableProfilingHandler is set but not
|
||||
// enableDebuggingHandler then /logs, /pprof and /flags shouldn't be served.
|
||||
kubeCfg := &kubeletconfiginternal.KubeletConfiguration{
|
||||
EnableDebuggingHandlers: false,
|
||||
EnableSystemLogHandler: true,
|
||||
EnableDebugFlagsHandler: true,
|
||||
EnableProfilingHandler: true,
|
||||
}
|
||||
fw := newServerTestWithDebuggingHandlers(kubeCfg, nil)
|
||||
defer fw.testHTTPServer.Close()
|
||||
|
||||
paths := []string{
|
||||
@ -1548,11 +1558,13 @@ func TestDebuggingDisabledHandlers(t *testing.T) {
|
||||
resp, err = http.Get(fw.testHTTPServer.URL + "/spec")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
|
||||
}
|
||||
|
||||
func TestDisablingLogAndProfilingHandler(t *testing.T) {
|
||||
fw := newServerTestWithDebuggingHandlers(true, false, nil)
|
||||
kubeCfg := &kubeletconfiginternal.KubeletConfiguration{
|
||||
EnableDebuggingHandlers: true,
|
||||
}
|
||||
fw := newServerTestWithDebuggingHandlers(kubeCfg, nil)
|
||||
defer fw.testHTTPServer.Close()
|
||||
|
||||
// verify debug endpoints are disabled
|
||||
|
Loading…
Reference in New Issue
Block a user