From b011529d8a1486bc2316a049db35759086d2994b Mon Sep 17 00:00:00 2001 From: Andy Goldstein Date: Tue, 28 Feb 2017 13:43:08 -0500 Subject: [PATCH 1/2] Add pprof trace support Add pprof trace support and --enable-contention-profiling to those components that don't already have it. --- .../app/controllermanager.go | 5 +++++ .../app/options/options.go | 1 + .../app/controllermanager.go | 5 +++++ .../app/options/options.go | 1 + cmd/kubelet/app/options/options.go | 1 + cmd/kubelet/app/server.go | 2 +- .../app/controllermanager.go | 5 +++++ .../app/options/options.go | 3 +++ pkg/apis/componentconfig/types.go | 4 ++++ pkg/apis/componentconfig/v1alpha1/types.go | 2 ++ pkg/kubelet/kubelet.go | 6 +++--- pkg/kubelet/server/server.go | 16 ++++++++++++---- pkg/kubelet/server/server_test.go | 1 + plugin/cmd/kube-scheduler/app/server.go | 1 + .../apiserver/pkg/server/options/feature.go | 2 +- .../apiserver/pkg/server/routes/profiling.go | 1 + 16 files changed, 47 insertions(+), 9 deletions(-) diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 7f01e17ac6e..e17489f755d 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -22,6 +22,7 @@ import ( "net/http" "net/http/pprof" "os" + goruntime "runtime" "strconv" "time" @@ -111,6 +112,10 @@ func Run(s *options.CloudControllerManagerServer, cloud cloudprovider.Interface) 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) + if s.EnableContentionProfiling { + goruntime.SetBlockProfileRate(1) + } } configz.InstallHandler(mux) mux.Handle("/metrics", prometheus.Handler()) diff --git a/cmd/cloud-controller-manager/app/options/options.go b/cmd/cloud-controller-manager/app/options/options.go index fc1d0924931..330601c4fb1 100644 --- a/cmd/cloud-controller-manager/app/options/options.go +++ b/cmd/cloud-controller-manager/app/options/options.go @@ -75,6 +75,7 @@ func (s *CloudControllerManagerServer) AddFlags(fs *pflag.FlagSet) { fs.DurationVar(&s.RouteReconciliationPeriod.Duration, "route-reconciliation-period", s.RouteReconciliationPeriod.Duration, "The period for reconciling routes created for Nodes by cloud provider.") fs.BoolVar(&s.ConfigureCloudRoutes, "configure-cloud-routes", true, "Should CIDRs allocated by allocate-node-cidrs be configured on the cloud provider.") fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") + fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", false, "Enable lock contention profiling, if profiling is enabled") fs.StringVar(&s.ClusterCIDR, "cluster-cidr", s.ClusterCIDR, "CIDR Range for Pods in cluster.") fs.BoolVar(&s.AllocateNodeCIDRs, "allocate-node-cidrs", false, "Should CIDRs for Pods be allocated and set on the cloud provider.") fs.StringVar(&s.Master, "master", s.Master, "The address of the Kubernetes API server (overrides any value in kubeconfig)") diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 9af6f8e298a..affaae73779 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -28,6 +28,7 @@ import ( "net/http" "net/http/pprof" "os" + goruntime "runtime" "strconv" "time" @@ -135,6 +136,10 @@ func Run(s *options.CMServer) error { 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) + if s.EnableContentionProfiling { + goruntime.SetBlockProfileRate(1) + } } configz.InstallHandler(mux) mux.Handle("/metrics", prometheus.Handler()) diff --git a/cmd/kube-controller-manager/app/options/options.go b/cmd/kube-controller-manager/app/options/options.go index 196ba2742bd..92d851e9cc3 100644 --- a/cmd/kube-controller-manager/app/options/options.go +++ b/cmd/kube-controller-manager/app/options/options.go @@ -178,6 +178,7 @@ func (s *CMServer) AddFlags(fs *pflag.FlagSet, allControllers []string, disabled fs.StringVar(&s.ClusterSigningKeyFile, "cluster-signing-key-file", s.ClusterSigningKeyFile, "Filename containing a PEM-encoded RSA or ECDSA private key used to sign cluster-scoped certificates") fs.StringVar(&s.ApproveAllKubeletCSRsForGroup, "insecure-experimental-approve-all-kubelet-csrs-for-group", s.ApproveAllKubeletCSRsForGroup, "The group for which the controller-manager will auto approve all CSRs for kubelet client certificates.") fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") + fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", false, "Enable lock contention profiling, if profiling is enabled") fs.StringVar(&s.ClusterName, "cluster-name", s.ClusterName, "The instance prefix for the cluster") fs.StringVar(&s.ClusterCIDR, "cluster-cidr", s.ClusterCIDR, "CIDR Range for Pods in cluster.") fs.StringVar(&s.ServiceCIDR, "service-cluster-ip-range", s.ServiceCIDR, "CIDR Range for Services in cluster.") diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 41d95499874..8e6b8604e60 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -150,6 +150,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) { fs.Int32Var(&s.EventBurst, "event-burst", s.EventBurst, "Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding event-qps. Only used if --event-qps > 0") fs.BoolVar(&s.RunOnce, "runonce", s.RunOnce, "If true, exit after spawning pods from local manifests or remote urls. Exclusive with --api-servers, and --enable-server") fs.BoolVar(&s.EnableDebuggingHandlers, "enable-debugging-handlers", s.EnableDebuggingHandlers, "Enables server endpoints for log collection and local running of containers and commands") + fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", false, "Enable lock contention profiling, if profiling is enabled") fs.DurationVar(&s.MinimumGCAge.Duration, "minimum-container-ttl-duration", s.MinimumGCAge.Duration, "Minimum age for a finished container before it is garbage collected. Examples: '300ms', '10s' or '2h45m'") fs.MarkDeprecated("minimum-container-ttl-duration", "Use --eviction-hard or --eviction-soft instead. Will be removed in a future version.") fs.Int32Var(&s.MaxPerPodContainerCount, "maximum-dead-containers-per-container", s.MaxPerPodContainerCount, "Maximum number of old instances to retain per container. Each container takes up some disk space. Default: 1.") diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 15451e96c4f..c78e738363b 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -878,7 +878,7 @@ func startKubelet(k kubelet.KubeletBootstrap, podCfg *config.PodConfig, kubeCfg // start the kubelet server if kubeCfg.EnableServer { go wait.Until(func() { - k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth, kubeCfg.EnableDebuggingHandlers) + k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth, kubeCfg.EnableDebuggingHandlers, kubeCfg.EnableContentionProfiling) }, 0, wait.NeverStop) } if kubeCfg.ReadOnlyPort > 0 { diff --git a/federation/cmd/federation-controller-manager/app/controllermanager.go b/federation/cmd/federation-controller-manager/app/controllermanager.go index 7316050b2f0..ebc64c38cf9 100644 --- a/federation/cmd/federation-controller-manager/app/controllermanager.go +++ b/federation/cmd/federation-controller-manager/app/controllermanager.go @@ -24,6 +24,7 @@ import ( "net" "net/http" "net/http/pprof" + goruntime "runtime" "strconv" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -131,6 +132,10 @@ func Run(s *options.CMServer) error { 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) + if s.EnableContentionProfiling { + goruntime.SetBlockProfileRate(1) + } } mux.Handle("/metrics", prometheus.Handler()) diff --git a/federation/cmd/federation-controller-manager/app/options/options.go b/federation/cmd/federation-controller-manager/app/options/options.go index deb9c58e3cb..2a6768fcc0f 100644 --- a/federation/cmd/federation-controller-manager/app/options/options.go +++ b/federation/cmd/federation-controller-manager/app/options/options.go @@ -64,6 +64,8 @@ type ControllerManagerConfiguration struct { APIServerBurst int `json:"federatedAPIBurst"` // enableProfiling enables profiling via web interface host:port/debug/pprof/ EnableProfiling bool `json:"enableProfiling"` + // enableContentionProfiling enables lock contention profiling, if enableProfiling is true. + EnableContentionProfiling bool `json:"enableContentionProfiling"` // leaderElection defines the configuration of leader election client. LeaderElection componentconfig.LeaderElectionConfiguration `json:"leaderElection"` // contentType is contentType of requests sent to apiserver. @@ -115,6 +117,7 @@ func (s *CMServer) AddFlags(fs *pflag.FlagSet) { fs.IntVar(&s.ConcurrentReplicaSetSyncs, "concurrent-replicaset-syncs", s.ConcurrentReplicaSetSyncs, "The number of ReplicaSets syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load") fs.DurationVar(&s.ClusterMonitorPeriod.Duration, "cluster-monitor-period", s.ClusterMonitorPeriod.Duration, "The period for syncing ClusterStatus in ClusterController.") fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") + fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", false, "Enable lock contention profiling, if profiling is enabled") fs.StringVar(&s.Master, "master", s.Master, "The address of the federation API server (overrides any value in kubeconfig)") fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization and master location information.") fs.StringVar(&s.ContentType, "kube-api-content-type", s.ContentType, "ContentType of requests sent to apiserver. Passing application/vnd.kubernetes.protobuf is an experimental feature now.") diff --git a/pkg/apis/componentconfig/types.go b/pkg/apis/componentconfig/types.go index af3812e2c47..9c6d6afbf37 100644 --- a/pkg/apis/componentconfig/types.go +++ b/pkg/apis/componentconfig/types.go @@ -210,6 +210,8 @@ type KubeletConfiguration struct { // enableDebuggingHandlers enables server endpoints for log collection // and local running of containers and commands EnableDebuggingHandlers bool + // enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. + EnableContentionProfiling bool // minimumGCAge is the minimum age for a finished container before it is // garbage collected. MinimumGCAge metav1.Duration @@ -757,6 +759,8 @@ type KubeControllerManagerConfiguration struct { ApproveAllKubeletCSRsForGroup string // enableProfiling enables profiling via web interface host:port/debug/pprof/ EnableProfiling bool + // enableContentionProfiling enables lock contention profiling, if enableProfiling is true. + EnableContentionProfiling bool // clusterName is the instance prefix for the cluster. ClusterName string // clusterCIDR is CIDR Range for Pods in cluster. diff --git a/pkg/apis/componentconfig/v1alpha1/types.go b/pkg/apis/componentconfig/v1alpha1/types.go index 83436dd6f6c..b3e70914cb6 100644 --- a/pkg/apis/componentconfig/v1alpha1/types.go +++ b/pkg/apis/componentconfig/v1alpha1/types.go @@ -264,6 +264,8 @@ type KubeletConfiguration struct { // enableDebuggingHandlers enables server endpoints for log collection // and local running of containers and commands EnableDebuggingHandlers *bool `json:"enableDebuggingHandlers"` + // enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. + EnableContentionProfiling bool `json:"enableContentionProfiling"` // minimumGCAge is the minimum age for a finished container before it is // garbage collected. MinimumGCAge metav1.Duration `json:"minimumGCAge"` diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 4818115b07e..14bcce91f8b 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -180,7 +180,7 @@ type KubeletBootstrap interface { GetConfiguration() componentconfig.KubeletConfiguration BirthCry() StartGarbageCollection() - ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableDebuggingHandlers bool) + ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableDebuggingHandlers, enableContentionProfiling bool) ListenAndServeReadOnly(address net.IP, port uint) Run(<-chan kubetypes.PodUpdate) RunOnce(<-chan kubetypes.PodUpdate) ([]RunPodResult, error) @@ -2120,8 +2120,8 @@ 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, enableDebuggingHandlers bool) { - server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, address, port, tlsOptions, auth, enableDebuggingHandlers, kl.containerRuntime, kl.criHandler) +func (kl *Kubelet) ListenAndServe(address net.IP, port uint, tlsOptions *server.TLSOptions, auth server.AuthInterface, enableDebuggingHandlers, enableContentionProfiling bool) { + server.ListenAndServeKubeletServer(kl, kl.resourceAnalyzer, address, port, tlsOptions, auth, enableDebuggingHandlers, enableContentionProfiling, kl.containerRuntime, kl.criHandler) } // ListenAndServeReadOnly runs the kubelet HTTP server in read-only mode. diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index 2965afeb059..40924731de3 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -25,6 +25,7 @@ import ( "net/http/pprof" "net/url" "reflect" + goruntime "runtime" "strconv" "strings" "time" @@ -119,11 +120,12 @@ func ListenAndServeKubeletServer( port uint, tlsOptions *TLSOptions, auth AuthInterface, - enableDebuggingHandlers bool, + enableDebuggingHandlers, + enableContentionProfiling bool, runtime kubecontainer.Runtime, criHandler http.Handler) { glog.Infof("Starting to listen on %s:%d", address, port) - handler := NewServer(host, resourceAnalyzer, auth, enableDebuggingHandlers, runtime, criHandler) + handler := NewServer(host, resourceAnalyzer, auth, enableDebuggingHandlers, enableContentionProfiling, runtime, criHandler) s := &http.Server{ Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), Handler: &handler, @@ -140,7 +142,7 @@ 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, runtime kubecontainer.Runtime) { glog.V(1).Infof("Starting to listen read-only on %s:%d", address, port) - s := NewServer(host, resourceAnalyzer, nil, false, runtime, nil) + s := NewServer(host, resourceAnalyzer, nil, false, false, runtime, nil) server := &http.Server{ Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), @@ -192,7 +194,8 @@ func NewServer( host HostInterface, resourceAnalyzer stats.ResourceAnalyzer, auth AuthInterface, - enableDebuggingHandlers bool, + enableDebuggingHandlers, + enableContentionProfiling bool, runtime kubecontainer.Runtime, criHandler http.Handler) Server { server := Server{ @@ -208,6 +211,9 @@ func NewServer( server.InstallDefaultHandlers() if enableDebuggingHandlers { server.InstallDebuggingHandlers(criHandler) + if enableContentionProfiling { + goruntime.SetBlockProfileRate(1) + } } return server } @@ -381,6 +387,8 @@ func (s *Server) InstallDebuggingHandlers(criHandler http.Handler) { pprof.Symbol(resp, req.Request) case "cmdline": pprof.Cmdline(resp, req.Request) + case "trace": + pprof.Trace(resp, req.Request) default: pprof.Index(resp, req.Request) } diff --git a/pkg/kubelet/server/server_test.go b/pkg/kubelet/server/server_test.go index 98062ae512e..4a4a30ddd18 100644 --- a/pkg/kubelet/server/server_test.go +++ b/pkg/kubelet/server/server_test.go @@ -240,6 +240,7 @@ func newServerTest() *serverTestFramework { stats.NewResourceAnalyzer(fw.fakeKubelet, time.Minute, &kubecontainertesting.FakeRuntime{}), fw.fakeAuth, true, + false, &kubecontainertesting.Mock{}, fw.criHandler) fw.serverUnderTest = &server diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index ded86ce4a14..78d4f6d5ee4 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -146,6 +146,7 @@ func startHTTP(s *options.SchedulerServer) { 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) if s.EnableContentionProfiling { goruntime.SetBlockProfileRate(1) } diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/feature.go b/staging/src/k8s.io/apiserver/pkg/server/options/feature.go index d67f2ba365f..32922c12dc1 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/feature.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/feature.go @@ -42,7 +42,7 @@ func (o *FeatureOptions) AddFlags(fs *pflag.FlagSet) { fs.BoolVar(&o.EnableProfiling, "profiling", o.EnableProfiling, "Enable profiling via web interface host:port/debug/pprof/") fs.BoolVar(&o.EnableContentionProfiling, "contention-profiling", o.EnableContentionProfiling, - "Enable contention profiling. Requires --profiling to be set to work.") + "Enable lock contention profiling, if profiling is enabled") fs.BoolVar(&o.EnableSwaggerUI, "enable-swagger-ui", o.EnableSwaggerUI, "Enables swagger ui on the apiserver at /swagger-ui") } diff --git a/staging/src/k8s.io/apiserver/pkg/server/routes/profiling.go b/staging/src/k8s.io/apiserver/pkg/server/routes/profiling.go index 759eba4739c..071b784f766 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/routes/profiling.go +++ b/staging/src/k8s.io/apiserver/pkg/server/routes/profiling.go @@ -30,4 +30,5 @@ func (d Profiling) Install(c *mux.APIContainer) { c.UnlistedRoutes.HandleFunc("/debug/pprof/", pprof.Index) c.UnlistedRoutes.HandleFunc("/debug/pprof/profile", pprof.Profile) c.UnlistedRoutes.HandleFunc("/debug/pprof/symbol", pprof.Symbol) + c.UnlistedRoutes.HandleFunc("/debug/pprof/trace", pprof.Trace) } From 14115800f060c10748c009ee2cc2f3f8f819bef3 Mon Sep 17 00:00:00 2001 From: Andy Goldstein Date: Tue, 28 Feb 2017 13:44:35 -0500 Subject: [PATCH 2/2] Update generated code --- .../componentconfig/v1alpha1/zz_generated.conversion.go | 2 ++ pkg/generated/openapi/zz_generated.openapi.go | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go b/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go index f34355fc1ed..774b24674de 100644 --- a/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go +++ b/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go @@ -293,6 +293,7 @@ func autoConvert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfigu if err := v1.Convert_Pointer_bool_To_bool(&in.EnableDebuggingHandlers, &out.EnableDebuggingHandlers, s); err != nil { return err } + out.EnableContentionProfiling = in.EnableContentionProfiling out.MinimumGCAge = in.MinimumGCAge out.MaxPerPodContainerCount = in.MaxPerPodContainerCount if err := v1.Convert_Pointer_int32_To_int32(&in.MaxContainerCount, &out.MaxContainerCount, s); err != nil { @@ -471,6 +472,7 @@ func autoConvert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfigu if err := v1.Convert_bool_To_Pointer_bool(&in.EnableDebuggingHandlers, &out.EnableDebuggingHandlers, s); err != nil { return err } + out.EnableContentionProfiling = in.EnableContentionProfiling out.MinimumGCAge = in.MinimumGCAge out.MaxPerPodContainerCount = in.MaxPerPodContainerCount if err := v1.Convert_int32_To_Pointer_int32(&in.MaxContainerCount, &out.MaxContainerCount, s); err != nil { diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 57a22710f0c..06f3b243bff 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -13428,6 +13428,13 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Format: "", }, }, + "enableContentionProfiling": { + SchemaProps: spec.SchemaProps{ + Description: "enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true.", + Type: []string{"boolean"}, + Format: "", + }, + }, "minimumGCAge": { SchemaProps: spec.SchemaProps{ Description: "minimumGCAge is the minimum age for a finished container before it is garbage collected.", @@ -14098,7 +14105,7 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope }, }, }, - Required: []string{"podManifestPath", "syncFrequency", "fileCheckFrequency", "httpCheckFrequency", "manifestURL", "manifestURLHeader", "enableServer", "address", "port", "readOnlyPort", "tlsCertFile", "tlsPrivateKeyFile", "certDirectory", "authentication", "authorization", "hostnameOverride", "podInfraContainerImage", "dockerEndpoint", "rootDirectory", "seccompProfileRoot", "allowPrivileged", "hostNetworkSources", "hostPIDSources", "hostIPCSources", "registryPullQPS", "registryBurst", "eventRecordQPS", "eventBurst", "enableDebuggingHandlers", "minimumGCAge", "maxPerPodContainerCount", "maxContainerCount", "cAdvisorPort", "healthzPort", "healthzBindAddress", "oomScoreAdj", "registerNode", "clusterDomain", "masterServiceNamespace", "clusterDNS", "streamingConnectionIdleTimeout", "nodeStatusUpdateFrequency", "imageMinimumGCAge", "imageGCHighThresholdPercent", "imageGCLowThresholdPercent", "lowDiskSpaceThresholdMB", "volumeStatsAggPeriod", "networkPluginName", "networkPluginDir", "cniConfDir", "cniBinDir", "networkPluginMTU", "volumePluginDir", "cloudProvider", "cloudConfigFile", "kubeletCgroups", "runtimeCgroups", "systemCgroups", "cgroupRoot", "containerRuntime", "remoteRuntimeEndpoint", "remoteImageEndpoint", "runtimeRequestTimeout", "rktPath", "rktAPIEndpoint", "rktStage1Image", "lockFilePath", "exitOnLockContention", "hairpinMode", "babysitDaemons", "maxPods", "dockerExecHandlerName", "podCIDR", "resolvConf", "cpuCFSQuota", "containerized", "maxOpenFiles", "registerSchedulable", "registerWithTaints", "contentType", "kubeAPIQPS", "kubeAPIBurst", "serializeImagePulls", "outOfDiskTransitionFrequency", "nodeIP", "nodeLabels", "nonMasqueradeCIDR", "enableCustomMetrics", "evictionHard", "evictionSoft", "evictionSoftGracePeriod", "evictionPressureTransitionPeriod", "evictionMaxPodGracePeriod", "evictionMinimumReclaim", "experimentalKernelMemcgNotification", "podsPerCore", "enableControllerAttachDetach", "experimentalQOSReserved", "protectKernelDefaults", "makeIPTablesUtilChains", "iptablesMasqueradeBit", "iptablesDropBit", "systemReserved", "kubeReserved"}, + Required: []string{"podManifestPath", "syncFrequency", "fileCheckFrequency", "httpCheckFrequency", "manifestURL", "manifestURLHeader", "enableServer", "address", "port", "readOnlyPort", "tlsCertFile", "tlsPrivateKeyFile", "certDirectory", "authentication", "authorization", "hostnameOverride", "podInfraContainerImage", "dockerEndpoint", "rootDirectory", "seccompProfileRoot", "allowPrivileged", "hostNetworkSources", "hostPIDSources", "hostIPCSources", "registryPullQPS", "registryBurst", "eventRecordQPS", "eventBurst", "enableDebuggingHandlers", "enableContentionProfiling", "minimumGCAge", "maxPerPodContainerCount", "maxContainerCount", "cAdvisorPort", "healthzPort", "healthzBindAddress", "oomScoreAdj", "registerNode", "clusterDomain", "masterServiceNamespace", "clusterDNS", "streamingConnectionIdleTimeout", "nodeStatusUpdateFrequency", "imageMinimumGCAge", "imageGCHighThresholdPercent", "imageGCLowThresholdPercent", "lowDiskSpaceThresholdMB", "volumeStatsAggPeriod", "networkPluginName", "networkPluginDir", "cniConfDir", "cniBinDir", "networkPluginMTU", "volumePluginDir", "cloudProvider", "cloudConfigFile", "kubeletCgroups", "runtimeCgroups", "systemCgroups", "cgroupRoot", "containerRuntime", "remoteRuntimeEndpoint", "remoteImageEndpoint", "runtimeRequestTimeout", "rktPath", "rktAPIEndpoint", "rktStage1Image", "lockFilePath", "exitOnLockContention", "hairpinMode", "babysitDaemons", "maxPods", "dockerExecHandlerName", "podCIDR", "resolvConf", "cpuCFSQuota", "containerized", "maxOpenFiles", "registerSchedulable", "registerWithTaints", "contentType", "kubeAPIQPS", "kubeAPIBurst", "serializeImagePulls", "outOfDiskTransitionFrequency", "nodeIP", "nodeLabels", "nonMasqueradeCIDR", "enableCustomMetrics", "evictionHard", "evictionSoft", "evictionSoftGracePeriod", "evictionPressureTransitionPeriod", "evictionMaxPodGracePeriod", "evictionMinimumReclaim", "experimentalKernelMemcgNotification", "podsPerCore", "enableControllerAttachDetach", "experimentalQOSReserved", "protectKernelDefaults", "makeIPTablesUtilChains", "iptablesMasqueradeBit", "iptablesDropBit", "systemReserved", "kubeReserved"}, }, }, Dependencies: []string{