From e0e6d54cdf5c17834928430420313a80e8cf1586 Mon Sep 17 00:00:00 2001 From: mattjmcnaughton Date: Sun, 2 Feb 2020 15:43:16 -0500 Subject: [PATCH] Extract running Dockershim into own file Extract a `runDockershim` function into a file outside of `kubelet.go`. We can use build tags to compile two separate functions... one which actually runs dockershim and one that is a no-op. --- pkg/kubelet/BUILD | 1 + pkg/kubelet/dockershim/dockershim_nodocker.go | 3 + pkg/kubelet/kubelet.go | 48 ++---------- pkg/kubelet/kubelet_dockershim.go | 78 +++++++++++++++++++ pkg/kubelet/kubelet_dockershim_nodocker.go | 36 +++++++++ 5 files changed, 126 insertions(+), 40 deletions(-) create mode 100644 pkg/kubelet/dockershim/dockershim_nodocker.go create mode 100644 pkg/kubelet/kubelet_dockershim.go create mode 100644 pkg/kubelet/kubelet_dockershim_nodocker.go diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index ffe1b4dda69..e44ceaf7e70 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -13,6 +13,7 @@ go_library( "doc.go", "errors.go", "kubelet.go", + "kubelet_dockershim.go", "kubelet_getters.go", "kubelet_network.go", "kubelet_network_linux.go", diff --git a/pkg/kubelet/dockershim/dockershim_nodocker.go b/pkg/kubelet/dockershim/dockershim_nodocker.go new file mode 100644 index 00000000000..a6e0e2ce074 --- /dev/null +++ b/pkg/kubelet/dockershim/dockershim_nodocker.go @@ -0,0 +1,3 @@ +// +build dockerless + +package dockershim diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index b1adba3b59a..b66bfe1ad6a 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -71,7 +71,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/configmap" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/dockershim" - dockerremote "k8s.io/kubernetes/pkg/kubelet/dockershim/remote" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/images" @@ -306,46 +305,15 @@ func PreInitRuntimeService(kubeCfg *kubeletconfiginternal.KubeletConfiguration, switch containerRuntime { case kubetypes.DockerContainerRuntime: - // TODO: These need to become arguments to a standalone docker shim. - pluginSettings := dockershim.NetworkPluginSettings{ - HairpinMode: kubeletconfiginternal.HairpinMode(kubeCfg.HairpinMode), - NonMasqueradeCIDR: nonMasqueradeCIDR, - PluginName: crOptions.NetworkPluginName, - PluginConfDir: crOptions.CNIConfDir, - PluginBinDirString: crOptions.CNIBinDir, - PluginCacheDir: crOptions.CNICacheDir, - MTU: int(crOptions.NetworkPluginMTU), - } - - // Create and start the CRI shim running as a grpc server. - streamingConfig := getStreamingConfig(kubeCfg, kubeDeps, crOptions) - ds, err := dockershim.NewDockerService(kubeDeps.DockerClientConfig, crOptions.PodSandboxImage, streamingConfig, - &pluginSettings, runtimeCgroups, kubeCfg.CgroupDriver, crOptions.DockershimRootDirectory, !crOptions.RedirectContainerStreaming) - if err != nil { - return err - } - if crOptions.RedirectContainerStreaming { - kubeDeps.criHandler = ds - } - - // The unix socket for kubelet <-> dockershim communication, dockershim start before runtime service init. - klog.V(5).Infof("RemoteRuntimeEndpoint: %q, RemoteImageEndpoint: %q", + runDockershim( + kubeCfg, + kubeDeps, + crOptions, + runtimeCgroups, remoteRuntimeEndpoint, - remoteImageEndpoint) - klog.V(2).Infof("Starting the GRPC server for the docker CRI shim.") - dockerServer := dockerremote.NewDockerServer(remoteRuntimeEndpoint, ds) - if err := dockerServer.Start(); err != nil { - return err - } - - // Create dockerLegacyService when the logging driver is not supported. - supported, err := ds.IsCRISupportedLogDriver() - if err != nil { - return err - } - if !supported { - kubeDeps.dockerLegacyService = ds - } + remoteImageEndpoint, + nonMasqueradeCIDR, + ) case kubetypes.RemoteContainerRuntime: // No-op. break diff --git a/pkg/kubelet/kubelet_dockershim.go b/pkg/kubelet/kubelet_dockershim.go new file mode 100644 index 00000000000..05def3f0c0b --- /dev/null +++ b/pkg/kubelet/kubelet_dockershim.go @@ -0,0 +1,78 @@ +// +build !dockerless + +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubelet + +import ( + "k8s.io/klog" + + kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/config" + "k8s.io/kubernetes/pkg/kubelet/config" + "k8s.io/kubernetes/pkg/kubelet/dockershim" + dockerremote "k8s.io/kubernetes/pkg/kubelet/dockershim/remote" +) + +func runDockershim(kubeCfg *kubeletconfiginternal.KubeletConfiguration, + kubeDeps *Dependencies, + crOptions *config.ContainerRuntimeOptions, + runtimeCgroups string, + remoteRuntimeEndpoint string, + remoteImageEndpoint string, + nonMasqueradeCIDR string) error { + pluginSettings := dockershim.NetworkPluginSettings{ + HairpinMode: kubeletconfiginternal.HairpinMode(kubeCfg.HairpinMode), + NonMasqueradeCIDR: nonMasqueradeCIDR, + PluginName: crOptions.NetworkPluginName, + PluginConfDir: crOptions.CNIConfDir, + PluginBinDirString: crOptions.CNIBinDir, + PluginCacheDir: crOptions.CNICacheDir, + MTU: int(crOptions.NetworkPluginMTU), + } + + // Create and start the CRI shim running as a grpc server. + streamingConfig := getStreamingConfig(kubeCfg, kubeDeps, crOptions) + ds, err := dockershim.NewDockerService(kubeDeps.DockerClientConfig, crOptions.PodSandboxImage, streamingConfig, + &pluginSettings, runtimeCgroups, kubeCfg.CgroupDriver, crOptions.DockershimRootDirectory, !crOptions.RedirectContainerStreaming) + if err != nil { + return err + } + if crOptions.RedirectContainerStreaming { + kubeDeps.criHandler = ds + } + + // The unix socket for kubelet <-> dockershim communication, dockershim start before runtime service init. + klog.V(5).Infof("RemoteRuntimeEndpoint: %q, RemoteImageEndpoint: %q", + remoteRuntimeEndpoint, + remoteImageEndpoint) + klog.V(2).Infof("Starting the GRPC server for the docker CRI shim.") + dockerServer := dockerremote.NewDockerServer(remoteRuntimeEndpoint, ds) + if err := dockerServer.Start(); err != nil { + return err + } + + // Create dockerLegacyService when the logging driver is not supported. + supported, err := ds.IsCRISupportedLogDriver() + if err != nil { + return err + } + if !supported { + kubeDeps.dockerLegacyService = ds + } + + return nil +} diff --git a/pkg/kubelet/kubelet_dockershim_nodocker.go b/pkg/kubelet/kubelet_dockershim_nodocker.go new file mode 100644 index 00000000000..b833934ed5d --- /dev/null +++ b/pkg/kubelet/kubelet_dockershim_nodocker.go @@ -0,0 +1,36 @@ +// +build dockerless + +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubelet + +import ( + "fmt" + kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/config" + "k8s.io/kubernetes/pkg/kubelet/config" +) + +func runDockershim(kubeCfg *kubeletconfiginternal.KubeletConfiguration, + kubeDeps *Dependencies, + crOptions *config.ContainerRuntimeOptions, + runtimeCgroups string, + remoteRuntimeEndpoint string, + remoteImageEndpoint string, + nonMasqueradeCIDR string) error { + + return fmt.Errorf("Trying to use docker runtime, w/ Kubelet compiled w/o docker support.") +}