From 193abffdbe678afa6b09d32b090d26e53b4d96d4 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 21 Mar 2017 15:01:23 -0500 Subject: [PATCH] kubelet/cni: hook network plugin Status() up to CNI network discovery Ensure that the plugin returns NotReady status until there is a CNI network available which can be used to set up pods. Fixes: https://github.com/kubernetes/kubernetes/issues/43014 --- pkg/kubelet/network/cni/BUILD | 1 - pkg/kubelet/network/cni/cni.go | 16 +++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/network/cni/BUILD b/pkg/kubelet/network/cni/BUILD index eea4163f1aa..f481087036a 100644 --- a/pkg/kubelet/network/cni/BUILD +++ b/pkg/kubelet/network/cni/BUILD @@ -20,7 +20,6 @@ go_library( "//vendor:github.com/containernetworking/cni/libcni", "//vendor:github.com/containernetworking/cni/pkg/types", "//vendor:github.com/golang/glog", - "//vendor:k8s.io/apimachinery/pkg/util/wait", ], ) diff --git a/pkg/kubelet/network/cni/cni.go b/pkg/kubelet/network/cni/cni.go index 8e14802bbc6..664bc234617 100644 --- a/pkg/kubelet/network/cni/cni.go +++ b/pkg/kubelet/network/cni/cni.go @@ -21,12 +21,10 @@ import ( "fmt" "sort" "sync" - "time" "github.com/containernetworking/cni/libcni" cnitypes "github.com/containernetworking/cni/pkg/types" "github.com/golang/glog" - "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/apis/componentconfig" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/network" @@ -147,13 +145,9 @@ func (plugin *cniNetworkPlugin) Init(host network.Host, hairpinMode componentcon if err != nil { return err } - plugin.host = host - // sync network config from pluginDir periodically to detect network config updates - go wait.Forever(func() { - plugin.syncNetworkConfig() - }, 10*time.Second) + plugin.syncNetworkConfig() return nil } @@ -189,6 +183,14 @@ func (plugin *cniNetworkPlugin) Name() string { return CNIPluginName } +func (plugin *cniNetworkPlugin) Status() error { + // sync network config from pluginDir periodically to detect network config updates + plugin.syncNetworkConfig() + + // Can't set up pods if we don't have any CNI network configs yet + return plugin.checkInitialized() +} + func (plugin *cniNetworkPlugin) SetUpPod(namespace string, name string, id kubecontainer.ContainerID, annotations map[string]string) error { if err := plugin.checkInitialized(); err != nil { return err