diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index d27e962c074..67f12d7c57d 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -2175,7 +2175,6 @@ func (kl *Kubelet) syncLoopIteration(configCh <-chan kubetypes.PodUpdate, handle glog.Errorf("Update channel is closed. Exiting the sync loop.") return false } - kl.sourcesReady.AddSource(u.Source) switch u.Op { case kubetypes.ADD: @@ -2202,6 +2201,14 @@ func (kl *Kubelet) syncLoopIteration(configCh <-chan kubetypes.PodUpdate, handle // TODO: Do we want to support this? glog.Errorf("Kubelet does not support snapshot update") } + + // Mark the source ready after receiving at least one update from the + // source. Once all the sources are marked ready, various cleanup + // routines will start reclaiming resources. It is important that this + // takes place only after kubelet calls the update handler to process + // the update to ensure the internal pod cache is up-to-date. + kl.sourcesReady.AddSource(u.Source) + case e := <-plegCh: if isSyncPodWorthy(e) { // PLEG event for a pod; sync it.