diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index e50593f3abf..968b7a45121 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -131,6 +131,7 @@ go_library( "//pkg/volume/secret:go_default_library", "//pkg/volume/storageos:go_default_library", "//pkg/volume/vsphere_volume:go_default_library", + "//vendor/github.com/coreos/go-systemd/daemon:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index dce5c4f2138..b355640d6e9 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -31,8 +31,10 @@ import ( "path" "path/filepath" "strconv" + "sync" "time" + "github.com/coreos/go-systemd/daemon" "github.com/golang/glog" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -697,6 +699,9 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies) (err error) { return nil } + // If systemd is used, notify it that we have started + go daemon.SdNotify(false, "READY=1") + <-done return nil } @@ -937,20 +942,31 @@ func RunKubelet(kubeFlags *options.KubeletFlags, kubeCfg *kubeletconfiginternal. } func startKubelet(k kubelet.Bootstrap, podCfg *config.PodConfig, kubeCfg *kubeletconfiginternal.KubeletConfiguration, kubeDeps *kubelet.Dependencies, enableServer bool) { + wg := sync.WaitGroup{} + // start the kubelet - go wait.Until(func() { k.Run(podCfg.Updates()) }, 0, wait.NeverStop) + wg.Add(1) + go wait.Until(func() { + wg.Done() + k.Run(podCfg.Updates()) + }, 0, wait.NeverStop) // start the kubelet server if enableServer { + wg.Add(1) go wait.Until(func() { + wg.Done() k.ListenAndServe(net.ParseIP(kubeCfg.Address), uint(kubeCfg.Port), kubeDeps.TLSOptions, kubeDeps.Auth, kubeCfg.EnableDebuggingHandlers, kubeCfg.EnableContentionProfiling) }, 0, wait.NeverStop) } if kubeCfg.ReadOnlyPort > 0 { + wg.Add(1) go wait.Until(func() { + wg.Done() k.ListenAndServeReadOnly(net.ParseIP(kubeCfg.Address), uint(kubeCfg.ReadOnlyPort)) }, 0, wait.NeverStop) } + wg.Wait() } func CreateAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,