diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 6ee5399dbf7..58ae7e9ae52 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -905,8 +905,9 @@ func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) { // handled by pod workers). go util.Until(kl.podKiller, 1*time.Second, util.NeverStop) - // Run the system oom watcher forever. + // Start component sync loops. kl.statusManager.Start() + kl.probeManager.Start() // Start the pod lifecycle event generator. kl.pleg.Start() kl.syncLoop(updates, kl) diff --git a/pkg/kubelet/prober/fake_manager.go b/pkg/kubelet/prober/fake_manager.go index 65742823cb2..a055c0056b0 100644 --- a/pkg/kubelet/prober/fake_manager.go +++ b/pkg/kubelet/prober/fake_manager.go @@ -29,6 +29,7 @@ var _ Manager = FakeManager{} func (_ FakeManager) AddPod(_ *api.Pod) {} func (_ FakeManager) RemovePod(_ *api.Pod) {} func (_ FakeManager) CleanupPods(_ []*api.Pod) {} +func (_ FakeManager) Start() {} func (_ FakeManager) UpdatePodStatus(_ types.UID, podStatus *api.PodStatus) { for i := range podStatus.ContainerStatuses { diff --git a/pkg/kubelet/prober/manager.go b/pkg/kubelet/prober/manager.go index e6fa47dd2e1..1c3c2498916 100644 --- a/pkg/kubelet/prober/manager.go +++ b/pkg/kubelet/prober/manager.go @@ -52,6 +52,9 @@ type Manager interface { // UpdatePodStatus modifies the given PodStatus with the appropriate Ready state for each // container based on container running status, cached probe results and worker states. UpdatePodStatus(types.UID, *api.PodStatus) + + // Start starts the Manager sync loops. + Start() } type manager struct { @@ -79,20 +82,22 @@ func NewManager( runner kubecontainer.ContainerCommandRunner, refManager *kubecontainer.RefManager, recorder record.EventRecorder) Manager { + prober := newProber(runner, refManager, recorder) readinessManager := results.NewManager() - m := &manager{ + return &manager{ statusManager: statusManager, prober: prober, readinessManager: readinessManager, livenessManager: livenessManager, workers: make(map[probeKey]*worker), } +} +// Start syncing probe status. This should only be called once. +func (m *manager) Start() { // Start syncing readiness. go util.Forever(m.updateReadiness, 0) - - return m } // Key uniquely identifying container probes diff --git a/pkg/kubelet/prober/manager_test.go b/pkg/kubelet/prober/manager_test.go index de9ccd1cc78..06a78d3e176 100644 --- a/pkg/kubelet/prober/manager_test.go +++ b/pkg/kubelet/prober/manager_test.go @@ -251,6 +251,7 @@ func TestUpdatePodStatus(t *testing.T) { func TestUpdateReadiness(t *testing.T) { testPod := getTestPod(readiness, api.Probe{}) m := newTestManager() + m.Start() m.statusManager.SetPodStatus(&testPod, getTestRunningStatus()) m.AddPod(&testPod)