diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 231f9f02dc..344ca8b75d 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1499,6 +1499,29 @@ func (kl *Kubelet) syncPod(pod *api.Pod, mirrorPod *api.Pod, runningPod kubecont return err } + // Create Mirror Pod for Static Pod if it doesn't already exist + if kubepod.IsStaticPod(pod) { + if mirrorPod != nil && !kl.podManager.IsMirrorPodOf(mirrorPod, pod) { + // The mirror pod is semantically different from the static pod. Remove + // it. The mirror pod will get recreated later. + glog.Errorf("Deleting mirror pod %q because it is outdated", podFullName) + if err := kl.podManager.DeleteMirrorPod(podFullName); err != nil { + glog.Errorf("Failed deleting mirror pod %q: %v", podFullName, err) + } + } + if mirrorPod == nil { + glog.V(3).Infof("Creating a mirror pod for static pod %q", podFullName) + if err := kl.podManager.CreateMirrorPod(pod); err != nil { + glog.Errorf("Failed creating a mirror pod %q: %v", podFullName, err) + } + + _, ok := kl.podManager.GetMirrorPodByPod(pod) + if !ok { + glog.Errorf("Mirror pod not available") + } + } + } + if err := kl.makePodDataDirs(pod); err != nil { glog.Errorf("Unable to make pod data directories for pod %q (uid %q): %v", podFullName, uid, err) return err @@ -1597,22 +1620,6 @@ func (kl *Kubelet) syncPod(pod *api.Pod, mirrorPod *api.Pod, runningPod kubecont } } - if kubepod.IsStaticPod(pod) { - if mirrorPod != nil && !kl.podManager.IsMirrorPodOf(mirrorPod, pod) { - // The mirror pod is semantically different from the static pod. Remove - // it. The mirror pod will get recreated later. - glog.Errorf("Deleting mirror pod %q because it is outdated", podFullName) - if err := kl.podManager.DeleteMirrorPod(podFullName); err != nil { - glog.Errorf("Failed deleting mirror pod %q: %v", podFullName, err) - } - } - if mirrorPod == nil { - glog.V(3).Infof("Creating a mirror pod %q", podFullName) - if err := kl.podManager.CreateMirrorPod(pod); err != nil { - glog.Errorf("Failed creating a mirror pod %q: %v", podFullName, err) - } - } - } return nil } diff --git a/pkg/kubelet/runonce.go b/pkg/kubelet/runonce.go index d5d41f47f0..65eee310c9 100644 --- a/pkg/kubelet/runonce.go +++ b/pkg/kubelet/runonce.go @@ -108,9 +108,15 @@ func (kl *Kubelet) runPod(pod *api.Pod, retryDelay time.Duration) error { return nil } glog.Infof("pod %q containers not running: syncing", pod.Name) - // We don't create mirror pods in this mode; pass a dummy boolean value - // to sycnPod. - if err = kl.syncPod(pod, nil, p, kubetypes.SyncPodUpdate); err != nil { + + podFullName := kubecontainer.GetPodFullName(pod) + glog.Infof("Creating a mirror pod for static pod %q", podFullName) + if err := kl.podManager.CreateMirrorPod(pod); err != nil { + glog.Errorf("Failed creating a mirror pod %q: %v", podFullName, err) + } + mirrorPod, _ := kl.podManager.GetMirrorPodByPod(pod) + + if err = kl.syncPod(pod, mirrorPod, p, kubetypes.SyncPodUpdate); err != nil { return fmt.Errorf("error syncing pod: %v", err) } if retry >= RunOnceMaxRetries {