From e3ea9d7c40c458e5b94c3746185b8dad8e999f9c Mon Sep 17 00:00:00 2001 From: jiangyaoguo Date: Sat, 21 Nov 2015 01:13:41 +0800 Subject: [PATCH] add separate client for events in kubelet --- cmd/kubelet/app/server.go | 21 ++++++++++++--------- docs/admin/kubelet.md | 6 +++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index a7a7312589a..64845f16581 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -183,6 +183,8 @@ func NewKubeletServer() *KubeletServer { CPUCFSQuota: false, DockerDaemonContainer: "/docker-daemon", DockerExecHandlerName: "native", + EventBurst: 10, + EventRecordQPS: 5.0, EnableDebuggingHandlers: true, EnableServer: true, FileCheckFrequency: 20 * time.Second, @@ -287,7 +289,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&s.HostIPCSources, "host-ipc-sources", s.HostIPCSources, "Comma-separated list of sources from which the Kubelet allows pods to use the host ipc namespace. [default=\"*\"]") fs.Float64Var(&s.RegistryPullQPS, "registry-qps", s.RegistryPullQPS, "If > 0, limit registry pull QPS to this value. If 0, unlimited. [default=0.0]") fs.IntVar(&s.RegistryBurst, "registry-burst", s.RegistryBurst, "Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0") - fs.Float32Var(&s.EventRecordQPS, "event-qps", s.EventRecordQPS, "If > 0, limit event creations per second to this value. If 0, unlimited. [default=0.0]") + fs.Float32Var(&s.EventRecordQPS, "event-qps", s.EventRecordQPS, "If > 0, limit event creations per second to this value. If 0, unlimited.") fs.IntVar(&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") @@ -495,6 +497,12 @@ func (s *KubeletServer) Run(kcfg *KubeletConfig) error { clientConfig, err := s.CreateAPIServerClientConfig() if err == nil { kcfg.KubeClient, err = client.New(clientConfig) + + // make a separate client for events + eventClientConfig := *clientConfig + eventClientConfig.QPS = s.EventRecordQPS + eventClientConfig.Burst = s.EventBurst + kcfg.EventClient, err = client.New(&eventClientConfig) } if err != nil && len(s.APIServerList) > 0 { glog.Warningf("No API client: %v", err) @@ -780,15 +788,9 @@ func RunKubelet(kcfg *KubeletConfig) error { eventBroadcaster := record.NewBroadcaster() kcfg.Recorder = eventBroadcaster.NewRecorder(api.EventSource{Component: "kubelet", Host: kcfg.NodeName}) eventBroadcaster.StartLogging(glog.V(3).Infof) - if kcfg.KubeClient != nil { + if kcfg.EventClient != nil { glog.V(4).Infof("Sending events to api server.") - if kcfg.EventRecordQPS == 0.0 { - eventBroadcaster.StartRecordingToSink(kcfg.KubeClient.Events("")) - } else { - eventClient := *kcfg.KubeClient - eventClient.Throttle = util.NewTokenBucketRateLimiter(kcfg.EventRecordQPS, kcfg.EventBurst) - eventBroadcaster.StartRecordingToSink(eventClient.Events("")) - } + eventBroadcaster.StartRecordingToSink(kcfg.EventClient.Events("")) } else { glog.Warning("No api server defined - no events will be sent to API server.") } @@ -891,6 +893,7 @@ type KubeletConfig struct { DockerExecHandler dockertools.ExecHandler EnableDebuggingHandlers bool EnableServer bool + EventClient *client.Client EventBurst int EventRecordQPS float32 FileCheckFrequency time.Duration diff --git a/docs/admin/kubelet.md b/docs/admin/kubelet.md index d755db33b38..44946ad848b 100644 --- a/docs/admin/kubelet.md +++ b/docs/admin/kubelet.md @@ -83,8 +83,8 @@ kubelet --docker-exec-handler="native": Handler to use when executing a command in a container. Valid values are 'native' and 'nsenter'. Defaults to 'native'. --enable-debugging-handlers[=true]: Enables server endpoints for log collection and local running of containers and commands --enable-server[=true]: Enable the Kubelet's server - --event-burst=0: 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 - --event-qps=0: If > 0, limit event creations per second to this value. If 0, unlimited. [default=0.0] + --event-burst=10: 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 + --event-qps=5: If > 0, limit event creations per second to this value. If 0, unlimited. --file-check-frequency=20s: Duration between checking config files for new data --google-json-key="": The Google Cloud Platform Service Account JSON Key to use for authentication. --healthz-bind-address=127.0.0.1: The IP address for the healthz server to serve on, defaulting to 127.0.0.1 (set to 0.0.0.0 for all interfaces) @@ -139,7 +139,7 @@ kubelet --tls-private-key-file="": File containing x509 private key matching --tls-cert-file. ``` -###### Auto generated by spf13/cobra on 18-Nov-2015 +###### Auto generated by spf13/cobra on 21-Nov-2015