diff --git a/pkg/master/controller.go b/pkg/master/controller.go index 78154d176ef..e83f0cacb3d 100644 --- a/pkg/master/controller.go +++ b/pkg/master/controller.go @@ -152,7 +152,22 @@ func (c *Controller) Stop() { c.runner.Stop() } endpointPorts := createEndpointPortSpec(c.PublicServicePort, "https", c.ExtraEndpointPorts) - c.EndpointReconciler.StopReconciling("kubernetes", c.PublicIP, endpointPorts) + finishedReconciling := make(chan struct{}) + go func() { + defer close(finishedReconciling) + glog.Infof("Shutting down kubernetes service endpoint reconciler") + if err := c.EndpointReconciler.StopReconciling("kubernetes", c.PublicIP, endpointPorts); err != nil { + glog.Error(err) + } + }() + + select { + case <-finishedReconciling: + // done + case <-time.After(2 * c.EndpointInterval): + // don't block server shutdown forever if we can't reach etcd to remove ourselves + glog.Warning("StopReconciling() timed out") + } } // RunKubernetesNamespaces periodically makes sure that all internal namespaces exist