From bf9416c923de6425cd709476edac4ea0c6c6490d Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Wed, 17 Jun 2015 22:34:11 -0700 Subject: [PATCH] Update the kubelet to ignore syncing Pods until the container runtime is up. --- pkg/kubelet/kubelet.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index bfc2f3d31d3..3931cde3f4a 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1663,6 +1663,11 @@ func (kl *Kubelet) admitPods(allPods []*api.Pod, podSyncTypes map[types.UID]Sync func (kl *Kubelet) syncLoop(updates <-chan PodUpdate, handler SyncHandler) { glog.Info("Starting kubelet main sync loop.") for { + if !kl.containerRuntimeUp() { + time.Sleep(5 * time.Second) + glog.Infof("Skipping pod synchronization, container runtime is not up.") + continue + } unsyncedPod := false podSyncTypes := make(map[types.UID]SyncPodType) select { @@ -1923,11 +1928,7 @@ func (kl *Kubelet) setNodeStatus(node *api.Node) error { } // Check whether container runtime can be reported as up. - containerRuntimeUp := func() bool { - kl.runtimeMutex.Lock() - defer kl.runtimeMutex.Unlock() - return kl.lastTimestampRuntimeUp.Add(kl.runtimeUpThreshold).After(time.Now()) - }() + containerRuntimeUp := kl.containerRuntimeUp() currentTime := util.Now() var newNodeReadyCondition api.NodeCondition @@ -1990,6 +1991,12 @@ func (kl *Kubelet) setNodeStatus(node *api.Node) error { return nil } +func (kl *Kubelet) containerRuntimeUp() bool { + kl.runtimeMutex.Lock() + defer kl.runtimeMutex.Unlock() + return kl.lastTimestampRuntimeUp.Add(kl.runtimeUpThreshold).After(time.Now()) +} + // tryUpdateNodeStatus tries to update node status to master. If ReconcileCBR0 // is set, this function will also confirm that cbr0 is configured correctly. func (kl *Kubelet) tryUpdateNodeStatus() error {