diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 725e2423c49..cf5a5cf03b6 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -2425,15 +2425,18 @@ func (kl *Kubelet) syncNetworkStatus() { err = fmt.Errorf("Error on adding ip table rules: %v", err) glog.Error(err) } - if len(kl.podCIDR) == 0 { + kl.networkConfigMutex.Lock() + podCIDR := kl.podCIDR + kl.networkConfigMutex.Unlock() + if len(podCIDR) == 0 { err = fmt.Errorf("ConfigureCBR0 requested, but PodCIDR not set. Will not configure CBR0 right now") glog.Warning(err) - } else if err := kl.reconcileCBR0(kl.podCIDR); err != nil { + } else if err := kl.reconcileCBR0(podCIDR); err != nil { err = fmt.Errorf("Error configuring cbr0: %v", err) glog.Error(err) } } - kl.runtimeState.setNetworkError(err) + kl.runtimeState.setNetworkState(err) } // setNodeStatus fills in the Status fields of the given Node, overwriting diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 138a5e98a7d..4e833d41d2e 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -140,7 +140,7 @@ func newTestKubelet(t *testing.T) *TestKubelet { kubelet.volumeManager = newVolumeManager() kubelet.containerManager, _ = newContainerManager(fakeContainerMgrMountInt(), mockCadvisor, "", "", "") - kubelet.runtimeState.setNetworkError(nil) + kubelet.runtimeState.setNetworkState(nil) fakeClock := &util.FakeClock{Time: time.Now()} kubelet.backOff = util.NewBackOff(time.Second, time.Minute) kubelet.backOff.Clock = fakeClock @@ -2996,8 +2996,8 @@ func TestUpdateNodeStatusWithoutContainerRuntime(t *testing.T) { }, }, } - kubelet.runtimeState = newRuntimeState(time.Duration(0)) + kubelet.runtimeState.setNetworkState(nil) kubelet.updateRuntimeUp() if err := kubelet.updateNodeStatus(); err != nil { t.Errorf("unexpected error: %v", err) diff --git a/pkg/kubelet/runtime.go b/pkg/kubelet/runtime.go index c0068adf3bc..30c30ce7a7b 100644 --- a/pkg/kubelet/runtime.go +++ b/pkg/kubelet/runtime.go @@ -17,6 +17,7 @@ limitations under the License. package kubelet import ( + "fmt" "sync" "time" ) @@ -35,10 +36,7 @@ func (s *runtimeState) setRuntimeSync(t time.Time) { s.lastBaseRuntimeSync = t } -func (s *runtimeState) setNetworkError(err error) { - if err == nil { - return - } +func (s *runtimeState) setNetworkState(err error) { s.Lock() defer s.Unlock() s.networkError = err @@ -70,5 +68,6 @@ func newRuntimeState(runtimeSyncThreshold time.Duration) *runtimeState { return &runtimeState{ lastBaseRuntimeSync: time.Time{}, baseRuntimeSyncThreshold: runtimeSyncThreshold, + networkError: fmt.Errorf("network state unknown"), } }