diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index edf75aa9b82..441967ee508 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -60,14 +60,11 @@ go_library( "//pkg/kubelet/cm/cpuset:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/container:go_default_library", - "//pkg/kubelet/dockershim:go_default_library", - "//pkg/kubelet/dockershim/remote:go_default_library", "//pkg/kubelet/eviction:go_default_library", "//pkg/kubelet/eviction/api:go_default_library", "//pkg/kubelet/kubeletconfig:go_default_library", "//pkg/kubelet/kubeletconfig/configfiles:go_default_library", "//pkg/kubelet/server:go_default_library", - "//pkg/kubelet/server/streaming:go_default_library", "//pkg/kubelet/stats/pidlimit:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/util/filesystem:go_default_library", diff --git a/cmd/kubelet/app/options/container_runtime.go b/cmd/kubelet/app/options/container_runtime.go index 512b43988b3..f0bb64f582f 100644 --- a/cmd/kubelet/app/options/container_runtime.go +++ b/cmd/kubelet/app/options/container_runtime.go @@ -51,7 +51,6 @@ func NewContainerRuntimeOptions() *config.ContainerRuntimeOptions { DockershimRootDirectory: "/var/lib/dockershim", PodSandboxImage: defaultPodSandboxImage, ImagePullProgressDeadline: metav1.Duration{Duration: 1 * time.Minute}, - ExperimentalDockershim: false, //Alpha feature CNIBinDir: "/opt/cni/bin", diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 64a6d960ad9..9ceb95848a4 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -24,7 +24,6 @@ import ( "fmt" "net" "net/http" - "net/url" "os" "path" "path/filepath" @@ -84,14 +83,11 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/config" 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/eviction" evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api" dynamickubeletconfig "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/configfiles" "k8s.io/kubernetes/pkg/kubelet/server" - "k8s.io/kubernetes/pkg/kubelet/server/streaming" "k8s.io/kubernetes/pkg/kubelet/stats/pidlimit" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" utilfs "k8s.io/kubernetes/pkg/util/filesystem" @@ -259,14 +255,6 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API // set up stopCh here in order to be reused by kubelet and docker shim stopCh := genericapiserver.SetupSignalHandler() - // start the experimental docker shim, if enabled - if kubeletServer.KubeletFlags.ExperimentalDockershim { - if err := RunDockershim(&kubeletServer.KubeletFlags, kubeletConfig, stopCh); err != nil { - klog.Fatal(err) - } - return - } - // run the kubelet klog.V(5).Infof("KubeletConfiguration: %#v", kubeletServer.KubeletConfiguration) if err := Run(kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate, stopCh); err != nil { @@ -375,9 +363,9 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea hu := hostutil.NewHostUtil() var pluginRunner = exec.New() - var dockerClientConfig *dockershim.ClientConfig + var dockerOptions *kubelet.DockerOptions if s.ContainerRuntime == kubetypes.DockerContainerRuntime { - dockerClientConfig = &dockershim.ClientConfig{ + dockerOptions = &kubelet.DockerOptions{ DockerEndpoint: s.DockerEndpoint, RuntimeRequestTimeout: s.RuntimeRequestTimeout.Duration, ImagePullProgressDeadline: s.ImagePullProgressDeadline.Duration, @@ -393,7 +381,7 @@ func UnsecuredDependencies(s *options.KubeletServer, featureGate featuregate.Fea CAdvisorInterface: nil, // cadvisor.New launches background processes (bg http.ListenAndServe, and some bg cleaners), not set here Cloud: nil, // cloud provider might start background processes ContainerManager: nil, - DockerClientConfig: dockerClientConfig, + DockerOptions: dockerOptions, KubeClient: nil, HeartbeatClient: nil, EventClient: nil, @@ -1271,51 +1259,3 @@ func BootstrapKubeletConfigController(dynamicConfigDir string, transform dynamic } return kc, c, nil } - -// RunDockershim only starts the dockershim in current process. This is only used for cri validate testing purpose -// TODO(random-liu): Move this to a separate binary. -func RunDockershim(f *options.KubeletFlags, c *kubeletconfiginternal.KubeletConfiguration, stopCh <-chan struct{}) error { - r := &f.ContainerRuntimeOptions - - // Initialize docker client configuration. - dockerClientConfig := &dockershim.ClientConfig{ - DockerEndpoint: r.DockerEndpoint, - RuntimeRequestTimeout: c.RuntimeRequestTimeout.Duration, - ImagePullProgressDeadline: r.ImagePullProgressDeadline.Duration, - } - - // Initialize network plugin settings. - pluginSettings := dockershim.NetworkPluginSettings{ - HairpinMode: kubeletconfiginternal.HairpinMode(c.HairpinMode), - NonMasqueradeCIDR: f.NonMasqueradeCIDR, - PluginName: r.NetworkPluginName, - PluginConfDir: r.CNIConfDir, - PluginBinDirString: r.CNIBinDir, - PluginCacheDir: r.CNICacheDir, - MTU: int(r.NetworkPluginMTU), - } - - // Initialize streaming configuration. (Not using TLS now) - streamingConfig := &streaming.Config{ - // Use a relative redirect (no scheme or host). - BaseURL: &url.URL{Path: "/cri/"}, - StreamIdleTimeout: c.StreamingConnectionIdleTimeout.Duration, - StreamCreationTimeout: streaming.DefaultConfig.StreamCreationTimeout, - SupportedRemoteCommandProtocols: streaming.DefaultConfig.SupportedRemoteCommandProtocols, - SupportedPortForwardProtocols: streaming.DefaultConfig.SupportedPortForwardProtocols, - } - - // Standalone dockershim will always start the local streaming server. - ds, err := dockershim.NewDockerService(dockerClientConfig, r.PodSandboxImage, streamingConfig, &pluginSettings, - f.RuntimeCgroups, c.CgroupDriver, r.DockershimRootDirectory, true /*startLocalStreamingServer*/) - if err != nil { - return err - } - klog.V(2).Infof("Starting the GRPC server for the docker CRI shim.") - server := dockerremote.NewDockerServer(f.RemoteRuntimeEndpoint, ds) - if err := server.Start(); err != nil { - return err - } - <-stopCh - return nil -} diff --git a/hack/make-rules/verify.sh b/hack/make-rules/verify.sh index ea2ea8559fe..bb0b40bc3b2 100755 --- a/hack/make-rules/verify.sh +++ b/hack/make-rules/verify.sh @@ -48,6 +48,7 @@ if [[ ${EXCLUDE_TYPECHECK:-} =~ ^[yY]$ ]]; then EXCLUDED_PATTERNS+=( "verify-typecheck.sh" # runs in separate typecheck job "verify-typecheck-providerless.sh" # runs in separate typecheck job + "verify-typecheck-dockerless.sh" # runs in separate typecheck job ) fi diff --git a/hack/verify-typecheck-dockerless.sh b/hack/verify-typecheck-dockerless.sh new file mode 100755 index 00000000000..c8364d3446a --- /dev/null +++ b/hack/verify-typecheck-dockerless.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Copyright 2018 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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. + +cd "${KUBE_ROOT}" +# verify the dockerless build +hack/verify-typecheck.sh --skip-test --tags=dockerless --ignore-dirs=test diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index ffe1b4dda69..84a6190319e 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", @@ -61,6 +62,7 @@ go_library( "//pkg/kubelet/images:go_default_library", "//pkg/kubelet/kubeletconfig:go_default_library", "//pkg/kubelet/kuberuntime:go_default_library", + "//pkg/kubelet/legacy:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/logs:go_default_library", "//pkg/kubelet/metrics:go_default_library", @@ -297,6 +299,7 @@ filegroup( "//pkg/kubelet/kubeletconfig:all-srcs", "//pkg/kubelet/kuberuntime:all-srcs", "//pkg/kubelet/leaky:all-srcs", + "//pkg/kubelet/legacy:all-srcs", "//pkg/kubelet/lifecycle:all-srcs", "//pkg/kubelet/logs:all-srcs", "//pkg/kubelet/metrics:all-srcs", diff --git a/pkg/kubelet/cadvisor/BUILD b/pkg/kubelet/cadvisor/BUILD index f3d64675cee..a965343615f 100644 --- a/pkg/kubelet/cadvisor/BUILD +++ b/pkg/kubelet/cadvisor/BUILD @@ -10,6 +10,7 @@ go_library( name = "go_default_library", srcs = [ "cadvisor_linux.go", + "cadvisor_linux_docker.go", "cadvisor_unsupported.go", "cadvisor_windows.go", "doc.go", diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 7f52070b146..7d20b77e2a6 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -29,7 +29,6 @@ import ( // Register supported container handlers. _ "github.com/google/cadvisor/container/containerd/install" _ "github.com/google/cadvisor/container/crio/install" - _ "github.com/google/cadvisor/container/docker/install" _ "github.com/google/cadvisor/container/systemd/install" // Register cloud info providers. diff --git a/pkg/kubelet/cadvisor/cadvisor_linux_docker.go b/pkg/kubelet/cadvisor/cadvisor_linux_docker.go new file mode 100644 index 00000000000..46802f7c52f --- /dev/null +++ b/pkg/kubelet/cadvisor/cadvisor_linux_docker.go @@ -0,0 +1,25 @@ +// +build linux,!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 cadvisor + +import ( + // We only want to perform this docker specific cadvisor init when we are not + // using the `dockerless` build tag. + _ "github.com/google/cadvisor/container/docker/install" +) diff --git a/pkg/kubelet/config/flags.go b/pkg/kubelet/config/flags.go index dfdd5d0ab5f..bc1b13abcf0 100644 --- a/pkg/kubelet/config/flags.go +++ b/pkg/kubelet/config/flags.go @@ -46,8 +46,6 @@ type ContainerRuntimeOptions struct { // DockershimRootDirectory is the path to the dockershim root directory. Defaults to // /var/lib/dockershim if unset. Exposed for integration testing (e.g. in OpenShift). DockershimRootDirectory string - // Enable dockershim only mode. - ExperimentalDockershim bool // PodSandboxImage is the image whose network/ipc namespaces // containers in each pod will use. PodSandboxImage string @@ -89,8 +87,6 @@ func (s *ContainerRuntimeOptions) AddFlags(fs *pflag.FlagSet) { fs.MarkDeprecated("redirect-container-streaming", "Container streaming redirection will be removed from the kubelet in v1.20, and this flag will be removed in v1.22. For more details, see http://git.k8s.io/enhancements/keps/sig-node/20191205-container-streaming-requests.md") // Docker-specific settings. - fs.BoolVar(&s.ExperimentalDockershim, "experimental-dockershim", s.ExperimentalDockershim, "Enable dockershim only mode. In this mode, kubelet will only start dockershim without any other functionalities. This flag only serves test purpose, please do not use it unless you are conscious of what you are doing. [default=false]") - fs.MarkHidden("experimental-dockershim") fs.StringVar(&s.DockershimRootDirectory, "experimental-dockershim-root-directory", s.DockershimRootDirectory, "Path to the dockershim root directory.") fs.MarkHidden("experimental-dockershim-root-directory") fs.StringVar(&s.PodSandboxImage, "pod-infra-container-image", s.PodSandboxImage, fmt.Sprintf("The image whose network/ipc namespaces containers in each pod will use. %s", dockerOnlyWarning)) diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index 2ec3bfd14de..3a77759a281 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -49,8 +49,8 @@ go_library( "//pkg/kubelet/dockershim/network/cni:go_default_library", "//pkg/kubelet/dockershim/network/hostport:go_default_library", "//pkg/kubelet/dockershim/network/kubenet:go_default_library", - "//pkg/kubelet/kuberuntime:go_default_library", "//pkg/kubelet/leaky:go_default_library", + "//pkg/kubelet/legacy:go_default_library", "//pkg/kubelet/server/streaming:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/cache:go_default_library", diff --git a/pkg/kubelet/dockershim/cm/container_manager.go b/pkg/kubelet/dockershim/cm/container_manager.go index 45abfcedb15..088bb6bbae9 100644 --- a/pkg/kubelet/dockershim/cm/container_manager.go +++ b/pkg/kubelet/dockershim/cm/container_manager.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/cm/container_manager_linux.go b/pkg/kubelet/dockershim/cm/container_manager_linux.go index da38ec0d1b1..bacb9738eca 100644 --- a/pkg/kubelet/dockershim/cm/container_manager_linux.go +++ b/pkg/kubelet/dockershim/cm/container_manager_linux.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/cm/container_manager_unsupported.go b/pkg/kubelet/dockershim/cm/container_manager_unsupported.go index 736c6ebd16d..3cf286fa8dc 100644 --- a/pkg/kubelet/dockershim/cm/container_manager_unsupported.go +++ b/pkg/kubelet/dockershim/cm/container_manager_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!dockerless /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/cm/container_manager_windows.go b/pkg/kubelet/dockershim/cm/container_manager_windows.go index 0c2ad462099..3d42314a61f 100644 --- a/pkg/kubelet/dockershim/cm/container_manager_windows.go +++ b/pkg/kubelet/dockershim/cm/container_manager_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/convert.go b/pkg/kubelet/dockershim/convert.go index e38d4971127..1400d123bed 100644 --- a/pkg/kubelet/dockershim/convert.go +++ b/pkg/kubelet/dockershim/convert.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/convert_test.go b/pkg/kubelet/dockershim/convert_test.go index 1befadf72ee..a9b07eecab0 100644 --- a/pkg/kubelet/dockershim/convert_test.go +++ b/pkg/kubelet/dockershim/convert_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/doc.go b/pkg/kubelet/dockershim/doc.go index 82f3fbe7032..2e9fda933f3 100644 --- a/pkg/kubelet/dockershim/doc.go +++ b/pkg/kubelet/dockershim/doc.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_checkpoint.go b/pkg/kubelet/dockershim/docker_checkpoint.go index e821feb9528..4d881f7771a 100644 --- a/pkg/kubelet/dockershim/docker_checkpoint.go +++ b/pkg/kubelet/dockershim/docker_checkpoint.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_checkpoint_test.go b/pkg/kubelet/dockershim/docker_checkpoint_test.go index 49f4e4d174a..9d64217e1e3 100644 --- a/pkg/kubelet/dockershim/docker_checkpoint_test.go +++ b/pkg/kubelet/dockershim/docker_checkpoint_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index d1397478763..ee0020f7f62 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_container_test.go b/pkg/kubelet/dockershim/docker_container_test.go index d26a136ee05..7834da3315c 100644 --- a/pkg/kubelet/dockershim/docker_container_test.go +++ b/pkg/kubelet/dockershim/docker_container_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_container_unsupported.go b/pkg/kubelet/dockershim/docker_container_unsupported.go index e3848320ba1..a9ed72bd003 100644 --- a/pkg/kubelet/dockershim/docker_container_unsupported.go +++ b/pkg/kubelet/dockershim/docker_container_unsupported.go @@ -1,4 +1,4 @@ -// +build !windows +// +build !windows,!dockerless /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_container_windows.go b/pkg/kubelet/dockershim/docker_container_windows.go index 17b01c9c79d..57a7f8d8313 100644 --- a/pkg/kubelet/dockershim/docker_container_windows.go +++ b/pkg/kubelet/dockershim/docker_container_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_container_windows_test.go b/pkg/kubelet/dockershim/docker_container_windows_test.go index d6c39bcda3f..a2df1af0a39 100644 --- a/pkg/kubelet/dockershim/docker_container_windows_test.go +++ b/pkg/kubelet/dockershim/docker_container_windows_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_image.go b/pkg/kubelet/dockershim/docker_image.go index 356f34d0ec9..d9fa556c7a7 100644 --- a/pkg/kubelet/dockershim/docker_image.go +++ b/pkg/kubelet/dockershim/docker_image.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_image_linux.go b/pkg/kubelet/dockershim/docker_image_linux.go index 25e3d7a074e..221aa0d2ca4 100644 --- a/pkg/kubelet/dockershim/docker_image_linux.go +++ b/pkg/kubelet/dockershim/docker_image_linux.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_image_test.go b/pkg/kubelet/dockershim/docker_image_test.go index 0bdbda2559e..16b0ac124b5 100644 --- a/pkg/kubelet/dockershim/docker_image_test.go +++ b/pkg/kubelet/dockershim/docker_image_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_image_unsupported.go b/pkg/kubelet/dockershim/docker_image_unsupported.go index f6c1c72055b..282e8e7296e 100644 --- a/pkg/kubelet/dockershim/docker_image_unsupported.go +++ b/pkg/kubelet/dockershim/docker_image_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!dockerless /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_image_windows.go b/pkg/kubelet/dockershim/docker_image_windows.go index 3d559392ce1..dd2282f07f7 100644 --- a/pkg/kubelet/dockershim/docker_image_windows.go +++ b/pkg/kubelet/dockershim/docker_image_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_legacy_service.go b/pkg/kubelet/dockershim/docker_legacy_service.go index 5026722303d..dde49f19505 100644 --- a/pkg/kubelet/dockershim/docker_legacy_service.go +++ b/pkg/kubelet/dockershim/docker_legacy_service.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. @@ -32,25 +34,17 @@ import ( kubetypes "k8s.io/apimachinery/pkg/types" "k8s.io/klog" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - "k8s.io/kubernetes/pkg/kubelet/kuberuntime" "k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker" ) -// DockerLegacyService interface embeds some legacy methods for backward compatibility. -// This file/interface will be removed in the near future. Do not modify or add -// more functions. -type DockerLegacyService interface { - // GetContainerLogs gets logs for a specific container. - GetContainerLogs(context.Context, *v1.Pod, kubecontainer.ContainerID, *v1.PodLogOptions, io.Writer, io.Writer) error - - // IsCRISupportedLogDriver checks whether the logging driver used by docker is - // supported by native CRI integration. - // TODO(resouer): remove this when deprecating unsupported log driver - IsCRISupportedLogDriver() (bool, error) - - kuberuntime.LegacyLogProvider -} +// We define `DockerLegacyService` in `pkg/kubelet/legacy`, instead of in this +// file. We make this decision because `pkg/kubelet` depends on +// `DockerLegacyService`, and we want to be able to build the `kubelet` without +// relying on `github.com/docker/docker` or `pkg/kubelet/dockershim`. +// +// See https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20200205-build-kubelet-without-docker.md +// for details. // GetContainerLogs get container logs directly from docker daemon. func (d *dockerService) GetContainerLogs(_ context.Context, pod *v1.Pod, containerID kubecontainer.ContainerID, logOptions *v1.PodLogOptions, stdout, stderr io.Writer) error { diff --git a/pkg/kubelet/dockershim/docker_logs.go b/pkg/kubelet/dockershim/docker_logs.go index 8a157ce8baf..760ff654028 100644 --- a/pkg/kubelet/dockershim/docker_logs.go +++ b/pkg/kubelet/dockershim/docker_logs.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2018 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_sandbox.go b/pkg/kubelet/dockershim/docker_sandbox.go index 0a077204782..b86ff9c7cd0 100644 --- a/pkg/kubelet/dockershim/docker_sandbox.go +++ b/pkg/kubelet/dockershim/docker_sandbox.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_sandbox_test.go b/pkg/kubelet/dockershim/docker_sandbox_test.go index b34c933746d..9d385a5f089 100644 --- a/pkg/kubelet/dockershim/docker_sandbox_test.go +++ b/pkg/kubelet/dockershim/docker_sandbox_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_service.go b/pkg/kubelet/dockershim/docker_service.go index 227bef8211a..3bc3a8e78df 100644 --- a/pkg/kubelet/dockershim/docker_service.go +++ b/pkg/kubelet/dockershim/docker_service.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. @@ -40,6 +42,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/dockershim/network/cni" "k8s.io/kubernetes/pkg/kubelet/dockershim/network/hostport" "k8s.io/kubernetes/pkg/kubelet/dockershim/network/kubenet" + "k8s.io/kubernetes/pkg/kubelet/legacy" "k8s.io/kubernetes/pkg/kubelet/server/streaming" "k8s.io/kubernetes/pkg/kubelet/util/cache" @@ -97,7 +100,7 @@ type DockerService interface { http.Handler // For supporting legacy features. - DockerLegacyService + legacy.DockerLegacyService } // NetworkPluginSettings is the subset of kubelet runtime args we pass diff --git a/pkg/kubelet/dockershim/docker_service_test.go b/pkg/kubelet/dockershim/docker_service_test.go index 6523f6f97c2..27ced99a072 100644 --- a/pkg/kubelet/dockershim/docker_service_test.go +++ b/pkg/kubelet/dockershim/docker_service_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_stats.go b/pkg/kubelet/dockershim/docker_stats.go index ede30c4efbb..f9b441fa842 100644 --- a/pkg/kubelet/dockershim/docker_stats.go +++ b/pkg/kubelet/dockershim/docker_stats.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_stats_linux.go b/pkg/kubelet/dockershim/docker_stats_linux.go index 11d6add29c4..811bb066aaf 100644 --- a/pkg/kubelet/dockershim/docker_stats_linux.go +++ b/pkg/kubelet/dockershim/docker_stats_linux.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_stats_test.go b/pkg/kubelet/dockershim/docker_stats_test.go index b4ce51ae6be..fa2d1559b53 100644 --- a/pkg/kubelet/dockershim/docker_stats_test.go +++ b/pkg/kubelet/dockershim/docker_stats_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_stats_unsupported.go b/pkg/kubelet/dockershim/docker_stats_unsupported.go index 736215a9d64..560e243671b 100644 --- a/pkg/kubelet/dockershim/docker_stats_unsupported.go +++ b/pkg/kubelet/dockershim/docker_stats_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_stats_windows.go b/pkg/kubelet/dockershim/docker_stats_windows.go index 086624c4737..8173d7be2d8 100644 --- a/pkg/kubelet/dockershim/docker_stats_windows.go +++ b/pkg/kubelet/dockershim/docker_stats_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_streaming.go b/pkg/kubelet/dockershim/docker_streaming.go index 76b2fecd11b..f1394ba5c27 100644 --- a/pkg/kubelet/dockershim/docker_streaming.go +++ b/pkg/kubelet/dockershim/docker_streaming.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_streaming_others.go b/pkg/kubelet/dockershim/docker_streaming_others.go index 75570086894..059c448be47 100644 --- a/pkg/kubelet/dockershim/docker_streaming_others.go +++ b/pkg/kubelet/dockershim/docker_streaming_others.go @@ -1,4 +1,4 @@ -// +build !windows +// +build !windows,!dockerless /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/docker_streaming_windows.go b/pkg/kubelet/dockershim/docker_streaming_windows.go index 151bd86066c..64c5ba18833 100644 --- a/pkg/kubelet/dockershim/docker_streaming_windows.go +++ b/pkg/kubelet/dockershim/docker_streaming_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2019 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/dockershim_nodocker.go b/pkg/kubelet/dockershim/dockershim_nodocker.go new file mode 100644 index 00000000000..1f5720a10af --- /dev/null +++ b/pkg/kubelet/dockershim/dockershim_nodocker.go @@ -0,0 +1,19 @@ +// +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 dockershim diff --git a/pkg/kubelet/dockershim/exec.go b/pkg/kubelet/dockershim/exec.go index 4b0d085b5a1..a4d8862154f 100644 --- a/pkg/kubelet/dockershim/exec.go +++ b/pkg/kubelet/dockershim/exec.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers.go b/pkg/kubelet/dockershim/helpers.go index c89db1a993a..c499cc01eb9 100644 --- a/pkg/kubelet/dockershim/helpers.go +++ b/pkg/kubelet/dockershim/helpers.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers_linux.go b/pkg/kubelet/dockershim/helpers_linux.go index 11931a9ba9a..e18692150a5 100644 --- a/pkg/kubelet/dockershim/helpers_linux.go +++ b/pkg/kubelet/dockershim/helpers_linux.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers_linux_test.go b/pkg/kubelet/dockershim/helpers_linux_test.go index 2f7ddb5329e..76ad4bb85f3 100644 --- a/pkg/kubelet/dockershim/helpers_linux_test.go +++ b/pkg/kubelet/dockershim/helpers_linux_test.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers_test.go b/pkg/kubelet/dockershim/helpers_test.go index 62c07a5c3e8..ff2e09db13b 100644 --- a/pkg/kubelet/dockershim/helpers_test.go +++ b/pkg/kubelet/dockershim/helpers_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers_unsupported.go b/pkg/kubelet/dockershim/helpers_unsupported.go index 623e0b56b44..72f1d1674aa 100644 --- a/pkg/kubelet/dockershim/helpers_unsupported.go +++ b/pkg/kubelet/dockershim/helpers_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!dockerless /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/helpers_windows.go b/pkg/kubelet/dockershim/helpers_windows.go index effdf92be3d..8442f9d93ce 100644 --- a/pkg/kubelet/dockershim/helpers_windows.go +++ b/pkg/kubelet/dockershim/helpers_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/client.go b/pkg/kubelet/dockershim/libdocker/client.go index 5ec3d224c38..68a4de6a5ee 100644 --- a/pkg/kubelet/dockershim/libdocker/client.go +++ b/pkg/kubelet/dockershim/libdocker/client.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/fake_client.go b/pkg/kubelet/dockershim/libdocker/fake_client.go index d75728d2e17..27d38ebfd93 100644 --- a/pkg/kubelet/dockershim/libdocker/fake_client.go +++ b/pkg/kubelet/dockershim/libdocker/fake_client.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/helpers.go b/pkg/kubelet/dockershim/libdocker/helpers.go index 171b247f8f0..067de82151b 100644 --- a/pkg/kubelet/dockershim/libdocker/helpers.go +++ b/pkg/kubelet/dockershim/libdocker/helpers.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/helpers_test.go b/pkg/kubelet/dockershim/libdocker/helpers_test.go index e6a48198343..2a31b658366 100644 --- a/pkg/kubelet/dockershim/libdocker/helpers_test.go +++ b/pkg/kubelet/dockershim/libdocker/helpers_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/instrumented_client.go b/pkg/kubelet/dockershim/libdocker/instrumented_client.go index d2cefafb729..d6c80e3dee7 100644 --- a/pkg/kubelet/dockershim/libdocker/instrumented_client.go +++ b/pkg/kubelet/dockershim/libdocker/instrumented_client.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/kube_docker_client.go b/pkg/kubelet/dockershim/libdocker/kube_docker_client.go index 7f961297a53..0daa7d7cd88 100644 --- a/pkg/kubelet/dockershim/libdocker/kube_docker_client.go +++ b/pkg/kubelet/dockershim/libdocker/kube_docker_client.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/libdocker/kube_docker_client_test.go b/pkg/kubelet/dockershim/libdocker/kube_docker_client_test.go index dca570bbd26..d004f38c6f5 100644 --- a/pkg/kubelet/dockershim/libdocker/kube_docker_client_test.go +++ b/pkg/kubelet/dockershim/libdocker/kube_docker_client_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/metrics/metrics.go b/pkg/kubelet/dockershim/metrics/metrics.go index 16be68982bc..73fd251707c 100644 --- a/pkg/kubelet/dockershim/metrics/metrics.go +++ b/pkg/kubelet/dockershim/metrics/metrics.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/naming.go b/pkg/kubelet/dockershim/naming.go index f464dab2831..47e55a05733 100644 --- a/pkg/kubelet/dockershim/naming.go +++ b/pkg/kubelet/dockershim/naming.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/naming_test.go b/pkg/kubelet/dockershim/naming_test.go index bc2f4408ac3..12b30f56c12 100644 --- a/pkg/kubelet/dockershim/naming_test.go +++ b/pkg/kubelet/dockershim/naming_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/cni/cni.go b/pkg/kubelet/dockershim/network/cni/cni.go index 5c471f9272d..c3748700e14 100644 --- a/pkg/kubelet/dockershim/network/cni/cni.go +++ b/pkg/kubelet/dockershim/network/cni/cni.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/cni/cni_others.go b/pkg/kubelet/dockershim/network/cni/cni_others.go index 55487454310..3c2c4852b71 100644 --- a/pkg/kubelet/dockershim/network/cni/cni_others.go +++ b/pkg/kubelet/dockershim/network/cni/cni_others.go @@ -1,4 +1,4 @@ -// +build !windows +// +build !windows,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/cni/cni_test.go b/pkg/kubelet/dockershim/network/cni/cni_test.go index ef6009eee29..0005c1940cf 100644 --- a/pkg/kubelet/dockershim/network/cni/cni_test.go +++ b/pkg/kubelet/dockershim/network/cni/cni_test.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/cni/cni_windows.go b/pkg/kubelet/dockershim/network/cni/cni_windows.go index 316d4df9b99..6554d7325d2 100644 --- a/pkg/kubelet/dockershim/network/cni/cni_windows.go +++ b/pkg/kubelet/dockershim/network/cni/cni_windows.go @@ -1,4 +1,4 @@ -// +build windows +// +build windows,!dockerless /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/cni/testing/mock_cni.go b/pkg/kubelet/dockershim/network/cni/testing/mock_cni.go index afc3a510f09..b81014f4919 100644 --- a/pkg/kubelet/dockershim/network/cni/testing/mock_cni.go +++ b/pkg/kubelet/dockershim/network/cni/testing/mock_cni.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hairpin/hairpin.go b/pkg/kubelet/dockershim/network/hairpin/hairpin.go index a3e455ff10c..53e1be21e3d 100644 --- a/pkg/kubelet/dockershim/network/hairpin/hairpin.go +++ b/pkg/kubelet/dockershim/network/hairpin/hairpin.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hairpin/hairpin_test.go b/pkg/kubelet/dockershim/network/hairpin/hairpin_test.go index eb4c15872e7..72e76b4e6d6 100644 --- a/pkg/kubelet/dockershim/network/hairpin/hairpin_test.go +++ b/pkg/kubelet/dockershim/network/hairpin/hairpin_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/fake_iptables.go b/pkg/kubelet/dockershim/network/hostport/fake_iptables.go index be59dd5a9a6..9080a58b3d5 100644 --- a/pkg/kubelet/dockershim/network/hostport/fake_iptables.go +++ b/pkg/kubelet/dockershim/network/hostport/fake_iptables.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/fake_iptables_test.go b/pkg/kubelet/dockershim/network/hostport/fake_iptables_test.go index bda4c024736..a503b6d822e 100644 --- a/pkg/kubelet/dockershim/network/hostport/fake_iptables_test.go +++ b/pkg/kubelet/dockershim/network/hostport/fake_iptables_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport.go b/pkg/kubelet/dockershim/network/hostport/hostport.go index 1cf83d134c6..f92ad07e248 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport_manager.go b/pkg/kubelet/dockershim/network/hostport/hostport_manager.go index f7e076ac49a..f7820ae0231 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport_manager.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport_manager.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport_manager_test.go b/pkg/kubelet/dockershim/network/hostport/hostport_manager_test.go index a8d03affd92..b41e7908c0b 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport_manager_test.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport_manager_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport_syncer.go b/pkg/kubelet/dockershim/network/hostport/hostport_syncer.go index 517c5a30889..454b86973a6 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport_syncer.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport_syncer.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport_syncer_test.go b/pkg/kubelet/dockershim/network/hostport/hostport_syncer_test.go index 874da8780bb..d8ac3affae3 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport_syncer_test.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport_syncer_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/hostport_test.go b/pkg/kubelet/dockershim/network/hostport/hostport_test.go index 97dd907c308..4721158f2a6 100644 --- a/pkg/kubelet/dockershim/network/hostport/hostport_test.go +++ b/pkg/kubelet/dockershim/network/hostport/hostport_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/hostport/testing/fake.go b/pkg/kubelet/dockershim/network/hostport/testing/fake.go index 3bde65cc2ed..24de155626c 100644 --- a/pkg/kubelet/dockershim/network/hostport/testing/fake.go +++ b/pkg/kubelet/dockershim/network/hostport/testing/fake.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/kubenet/kubenet.go b/pkg/kubelet/dockershim/network/kubenet/kubenet.go index 146ae732e70..558cf0bdfbe 100644 --- a/pkg/kubelet/dockershim/network/kubenet/kubenet.go +++ b/pkg/kubelet/dockershim/network/kubenet/kubenet.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/kubenet/kubenet_linux.go b/pkg/kubelet/dockershim/network/kubenet/kubenet_linux.go index e878e7c6175..5c5e4617b69 100644 --- a/pkg/kubelet/dockershim/network/kubenet/kubenet_linux.go +++ b/pkg/kubelet/dockershim/network/kubenet/kubenet_linux.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux,!dockerless /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/kubenet/kubenet_linux_test.go b/pkg/kubelet/dockershim/network/kubenet/kubenet_linux_test.go index cedb7772b0c..85e791e37be 100644 --- a/pkg/kubelet/dockershim/network/kubenet/kubenet_linux_test.go +++ b/pkg/kubelet/dockershim/network/kubenet/kubenet_linux_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2015 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/kubenet/kubenet_unsupported.go b/pkg/kubelet/dockershim/network/kubenet/kubenet_unsupported.go index 5b7ef00cb26..05d9c66fcf2 100644 --- a/pkg/kubelet/dockershim/network/kubenet/kubenet_unsupported.go +++ b/pkg/kubelet/dockershim/network/kubenet/kubenet_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux +// +build !linux,!dockerless /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/metrics/metrics.go b/pkg/kubelet/dockershim/network/metrics/metrics.go index b5da24400a6..eaa05f0649d 100644 --- a/pkg/kubelet/dockershim/network/metrics/metrics.go +++ b/pkg/kubelet/dockershim/network/metrics/metrics.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/network.go b/pkg/kubelet/dockershim/network/network.go index fbd1ba12550..a609c8cf8d9 100644 --- a/pkg/kubelet/dockershim/network/network.go +++ b/pkg/kubelet/dockershim/network/network.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/plugins.go b/pkg/kubelet/dockershim/network/plugins.go index 9c904202ba3..c3a4bc985aa 100644 --- a/pkg/kubelet/dockershim/network/plugins.go +++ b/pkg/kubelet/dockershim/network/plugins.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/testing/fake_host.go b/pkg/kubelet/dockershim/network/testing/fake_host.go index c2e3b65cbe7..6b07d0e6ad8 100644 --- a/pkg/kubelet/dockershim/network/testing/fake_host.go +++ b/pkg/kubelet/dockershim/network/testing/fake_host.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/testing/mock_network_plugin.go b/pkg/kubelet/dockershim/network/testing/mock_network_plugin.go index afb0752e1df..59fbb7b027e 100644 --- a/pkg/kubelet/dockershim/network/testing/mock_network_plugin.go +++ b/pkg/kubelet/dockershim/network/testing/mock_network_plugin.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/network/testing/plugins_test.go b/pkg/kubelet/dockershim/network/testing/plugins_test.go index 42c6ba9e8e1..8943197afe1 100644 --- a/pkg/kubelet/dockershim/network/testing/plugins_test.go +++ b/pkg/kubelet/dockershim/network/testing/plugins_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2014 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/remote/docker_server.go b/pkg/kubelet/dockershim/remote/docker_server.go index 167843dd321..125e203cfcf 100644 --- a/pkg/kubelet/dockershim/remote/docker_server.go +++ b/pkg/kubelet/dockershim/remote/docker_server.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/security_context.go b/pkg/kubelet/dockershim/security_context.go index 38fed8daded..571fdd33767 100644 --- a/pkg/kubelet/dockershim/security_context.go +++ b/pkg/kubelet/dockershim/security_context.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/security_context_test.go b/pkg/kubelet/dockershim/security_context_test.go index 46fb825adcf..6277f6bd5a3 100644 --- a/pkg/kubelet/dockershim/security_context_test.go +++ b/pkg/kubelet/dockershim/security_context_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2016 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/selinux_util.go b/pkg/kubelet/dockershim/selinux_util.go index 1cd05f04642..00565596273 100644 --- a/pkg/kubelet/dockershim/selinux_util.go +++ b/pkg/kubelet/dockershim/selinux_util.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/dockershim/selinux_util_test.go b/pkg/kubelet/dockershim/selinux_util_test.go index 93ef091723e..99eb6a437d1 100644 --- a/pkg/kubelet/dockershim/selinux_util_test.go +++ b/pkg/kubelet/dockershim/selinux_util_test.go @@ -1,3 +1,5 @@ +// +build !dockerless + /* Copyright 2017 The Kubernetes Authors. diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index b1adba3b59a..e9563a73bf4 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -70,13 +70,12 @@ import ( "k8s.io/kubernetes/pkg/kubelet/config" "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" "k8s.io/kubernetes/pkg/kubelet/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/kuberuntime" + "k8s.io/kubernetes/pkg/kubelet/legacy" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/logs" "k8s.io/kubernetes/pkg/kubelet/metrics" @@ -213,7 +212,7 @@ type Dependencies struct { CAdvisorInterface cadvisor.Interface Cloud cloudprovider.Interface ContainerManager cm.ContainerManager - DockerClientConfig *dockershim.ClientConfig + DockerOptions *DockerOptions EventClient v1core.EventsGetter HeartbeatClient clientset.Interface OnHeartbeatFailure func() @@ -232,11 +231,20 @@ type Dependencies struct { RemoteRuntimeService internalapi.RuntimeService RemoteImageService internalapi.ImageManagerService criHandler http.Handler - dockerLegacyService dockershim.DockerLegacyService + dockerLegacyService legacy.DockerLegacyService // remove it after cadvisor.UsingLegacyCadvisorStats dropped. useLegacyCadvisorStats bool } +// DockerOptions contains docker specific configuration. Importantly, since it +// lives outside of `dockershim`, it should not depend on the `docker/docker` +// client library. +type DockerOptions struct { + DockerEndpoint string + RuntimeRequestTimeout time.Duration + ImagePullProgressDeadline time.Duration +} + // makePodSourceConfig creates a config.PodConfig from the given // KubeletConfiguration or returns an error. func makePodSourceConfig(kubeCfg *kubeletconfiginternal.KubeletConfiguration, kubeDeps *Dependencies, nodeName types.NodeName, bootstrapCheckpointPath string) (*config.PodConfig, error) { @@ -306,46 +314,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 @@ -1155,7 +1132,7 @@ type Kubelet struct { // dockerLegacyService contains some legacy methods for backward compatibility. // It should be set only when docker is using non json-file logging driver. - dockerLegacyService dockershim.DockerLegacyService + dockerLegacyService legacy.DockerLegacyService // StatsProvider provides the node and the container stats. *stats.StatsProvider diff --git a/pkg/kubelet/kubelet_dockershim.go b/pkg/kubelet/kubelet_dockershim.go new file mode 100644 index 00000000000..1900fe2f8db --- /dev/null +++ b/pkg/kubelet/kubelet_dockershim.go @@ -0,0 +1,83 @@ +// +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) + dockerClientConfig := &dockershim.ClientConfig{ + DockerEndpoint: kubeDeps.DockerOptions.DockerEndpoint, + RuntimeRequestTimeout: kubeDeps.DockerOptions.RuntimeRequestTimeout, + ImagePullProgressDeadline: kubeDeps.DockerOptions.ImagePullProgressDeadline, + } + ds, err := dockershim.NewDockerService(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..63cb51fd98b --- /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") +} diff --git a/pkg/kubelet/legacy/BUILD b/pkg/kubelet/legacy/BUILD new file mode 100644 index 00000000000..c420c57af3c --- /dev/null +++ b/pkg/kubelet/legacy/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["logs.go"], + importpath = "k8s.io/kubernetes/pkg/kubelet/legacy", + visibility = ["//visibility:public"], + deps = [ + "//pkg/kubelet/container:go_default_library", + "//pkg/kubelet/kuberuntime:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/kubelet/legacy/logs.go b/pkg/kubelet/legacy/logs.go new file mode 100644 index 00000000000..d4b938a05c7 --- /dev/null +++ b/pkg/kubelet/legacy/logs.go @@ -0,0 +1,53 @@ +/* +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 legacy + +import ( + "context" + "io" + + "k8s.io/api/core/v1" + kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" + "k8s.io/kubernetes/pkg/kubelet/kuberuntime" +) + +// DockerLegacyService interface is used throughout `pkg/kubelet`. +// It used to live in the `pkg/kubelet/dockershim` package. While we +// would eventually like to remove it entirely, we need to give users some form +// of warning. +// +// By including the interface in +// `pkg/kubelet/legacy/logs.go`, we ensure the interface is +// available to `pkg/kubelet`, even when we are building with the `dockerless` +// tag (i.e. not compiling the dockershim). +// While the interface always exists, there will be no implementations of the +// interface when building with the `dockerless` tag. The lack of +// implementations should not be an issue, as we only expect `pkg/kubelet` code +// to need an implementation of the `DockerLegacyService` when we are using +// docker. If we are using docker, but building with the `dockerless` tag, than +// this will be just one of many things that breaks. +type DockerLegacyService interface { + // GetContainerLogs gets logs for a specific container. + GetContainerLogs(context.Context, *v1.Pod, kubecontainer.ContainerID, *v1.PodLogOptions, io.Writer, io.Writer) error + + // IsCRISupportedLogDriver checks whether the logging driver used by docker is + // supported by native CRI integration. + // TODO(resouer): remove this when deprecating unsupported log driver + IsCRISupportedLogDriver() (bool, error) + + kuberuntime.LegacyLogProvider +}