From 0dd468039da91ef87de05505ca9012b36d96a7b7 Mon Sep 17 00:00:00 2001 From: louisgong Date: Fri, 6 Dec 2019 13:17:27 +0800 Subject: [PATCH] inject remoteRuntime to kubelet dependency --- cmd/kubemark/BUILD | 1 + cmd/kubemark/hollow-node.go | 3 ++ pkg/kubelet/BUILD | 1 - pkg/kubelet/dockershim/docker_service.go | 2 -- pkg/kubelet/dockershim/libdocker/client.go | 14 +-------- pkg/kubelet/kubelet.go | 36 +++++++++------------- pkg/kubelet/remote/fake/fake_runtime.go | 8 ----- pkg/kubemark/hollow_kubelet.go | 29 ++++++++--------- 8 files changed, 35 insertions(+), 59 deletions(-) diff --git a/cmd/kubemark/BUILD b/cmd/kubemark/BUILD index 6114b765259..39d3f3a65a9 100644 --- a/cmd/kubemark/BUILD +++ b/cmd/kubemark/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cm:go_default_library", + "//pkg/kubelet/remote/fake:go_default_library", "//pkg/kubemark:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/util/iptables/testing:go_default_library", diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index 974aa944c9d..0198536eed5 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -43,6 +43,7 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/cm" + fakeremote "k8s.io/kubernetes/pkg/kubelet/remote/fake" "k8s.io/kubernetes/pkg/kubemark" "k8s.io/kubernetes/pkg/master/ports" fakeiptables "k8s.io/kubernetes/pkg/util/iptables/testing" @@ -192,12 +193,14 @@ func run(config *hollowNodeConfig) { NodeName: config.NodeName, } containerManager := cm.NewStubContainerManager() + fakeRemoteRuntime := fakeremote.NewFakeRemoteRuntime() hollowKubelet := kubemark.NewHollowKubelet( f, c, client, heartbeatClient, cadvisorInterface, + fakeRemoteRuntime, containerManager, ) hollowKubelet.Run() diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index b261b5d36da..f942cf4c2aa 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -77,7 +77,6 @@ go_library( "//pkg/kubelet/prober:go_default_library", "//pkg/kubelet/prober/results:go_default_library", "//pkg/kubelet/remote:go_default_library", - "//pkg/kubelet/remote/fake:go_default_library", "//pkg/kubelet/runtimeclass:go_default_library", "//pkg/kubelet/secret:go_default_library", "//pkg/kubelet/server:go_default_library", diff --git a/pkg/kubelet/dockershim/docker_service.go b/pkg/kubelet/dockershim/docker_service.go index 0f07a4ca236..227bef8211a 100644 --- a/pkg/kubelet/dockershim/docker_service.go +++ b/pkg/kubelet/dockershim/docker_service.go @@ -179,8 +179,6 @@ func NewDockerClientFromConfig(config *ClientConfig) libdocker.Interface { config.DockerEndpoint, config.RuntimeRequestTimeout, config.ImagePullProgressDeadline, - config.WithTraceDisabled, - config.EnableSleep, ) return client } diff --git a/pkg/kubelet/dockershim/libdocker/client.go b/pkg/kubelet/dockershim/libdocker/client.go index 97cf509a9e4..72af28d05d2 100644 --- a/pkg/kubelet/dockershim/libdocker/client.go +++ b/pkg/kubelet/dockershim/libdocker/client.go @@ -84,19 +84,7 @@ func getDockerClient(dockerEndpoint string) (*dockerapi.Client, error) { // is the timeout for docker requests. If timeout is exceeded, the request // will be cancelled and throw out an error. If requestTimeout is 0, a default // value will be applied. -func ConnectToDockerOrDie(dockerEndpoint string, requestTimeout, imagePullProgressDeadline time.Duration, - withTraceDisabled bool, enableSleep bool) Interface { - if dockerEndpoint == FakeDockerEndpoint { - fakeClient := NewFakeDockerClient() - if withTraceDisabled { - fakeClient = fakeClient.WithTraceDisabled() - } - - if enableSleep { - fakeClient.EnableSleep = true - } - return fakeClient - } +func ConnectToDockerOrDie(dockerEndpoint string, requestTimeout, imagePullProgressDeadline time.Duration) Interface { client, err := getDockerClient(dockerEndpoint) if err != nil { klog.Fatalf("Couldn't connect to docker: %v", err) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 105b3ccb4a1..1e840a5394f 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -93,7 +93,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/prober" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" "k8s.io/kubernetes/pkg/kubelet/remote" - fakeremote "k8s.io/kubernetes/pkg/kubelet/remote/fake" "k8s.io/kubernetes/pkg/kubelet/runtimeclass" "k8s.io/kubernetes/pkg/kubelet/secret" "k8s.io/kubernetes/pkg/kubelet/server" @@ -265,6 +264,8 @@ type Dependencies struct { DynamicPluginProber volume.DynamicPluginProber TLSOptions *server.TLSOptions KubeletConfigController *kubeletconfig.Controller + RemoteRuntimeService internalapi.RuntimeService + RemoteImageService internalapi.ImageManagerService } // makePodSourceConfig creates a config.PodConfig from the given @@ -318,23 +319,6 @@ func makePodSourceConfig(kubeCfg *kubeletconfiginternal.KubeletConfiguration, ku return cfg, nil } -func getRuntimeAndImageServices(remoteRuntimeEndpoint string, remoteImageEndpoint string, runtimeRequestTimeout metav1.Duration) (internalapi.RuntimeService, internalapi.ImageManagerService, error) { - if remoteRuntimeEndpoint == fakeremote.FakeRemoteRuntimeEndpoint && remoteImageEndpoint == fakeremote.FakeRemoteImageEndpoint { - fakeRuntime := fakeremote.NewFakeRemoteRuntime() - return fakeRuntime.RuntimeService, fakeRuntime.ImageService, nil - } - - rs, err := remote.NewRemoteRuntimeService(remoteRuntimeEndpoint, runtimeRequestTimeout.Duration) - if err != nil { - return nil, nil, err - } - is, err := remote.NewRemoteImageService(remoteImageEndpoint, runtimeRequestTimeout.Duration) - if err != nil { - return nil, nil, err - } - return rs, is, err -} - // NewMainKubelet instantiates a new Kubelet object along with all the required internal modules. // No initialization of Kubelet and its modules should happen here. func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, @@ -666,9 +650,19 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, default: return nil, fmt.Errorf("unsupported CRI runtime: %q", containerRuntime) } - runtimeService, imageService, err := getRuntimeAndImageServices(remoteRuntimeEndpoint, remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout) - if err != nil { - return nil, err + + runtimeService, imageService := kubeDeps.RemoteRuntimeService, kubeDeps.RemoteImageService + if runtimeService == nil { + runtimeService, err = remote.NewRemoteRuntimeService(remoteRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration) + if err != nil { + return nil, err + } + } + if imageService == nil { + imageService, err = remote.NewRemoteImageService(remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout.Duration) + if err != nil { + return nil, err + } } klet.runtimeService = runtimeService diff --git a/pkg/kubelet/remote/fake/fake_runtime.go b/pkg/kubelet/remote/fake/fake_runtime.go index ea6a80b6141..af77239ed11 100644 --- a/pkg/kubelet/remote/fake/fake_runtime.go +++ b/pkg/kubelet/remote/fake/fake_runtime.go @@ -28,14 +28,6 @@ import ( utilexec "k8s.io/utils/exec" ) -const ( - // FakeRemoteRuntimeEndpoint used by kubemark hollow-node - FakeRemoteRuntimeEndpoint = "fake://runtime" - - // FakeRemoteImageEndpoint used by kubemark hollow-node - FakeRemoteImageEndpoint = "fake://image" -) - // RemoteRuntime represents a fake remote container runtime. type RemoteRuntime struct { server *grpc.Server diff --git a/pkg/kubemark/hollow_kubelet.go b/pkg/kubemark/hollow_kubelet.go index 1be0fff4016..caceaf097e8 100644 --- a/pkg/kubemark/hollow_kubelet.go +++ b/pkg/kubemark/hollow_kubelet.go @@ -98,20 +98,23 @@ func NewHollowKubelet( client *clientset.Clientset, heartbeatClient *clientset.Clientset, cadvisorInterface cadvisor.Interface, + remoteRuntime *fakeremote.RemoteRuntime, containerManager cm.ContainerManager) *HollowKubelet { d := &kubelet.Dependencies{ - KubeClient: client, - HeartbeatClient: heartbeatClient, - CAdvisorInterface: cadvisorInterface, - Cloud: nil, - OSInterface: &containertest.FakeOS{}, - ContainerManager: containerManager, - VolumePlugins: volumePlugins(), - TLSOptions: nil, - OOMAdjuster: oom.NewFakeOOMAdjuster(), - Mounter: &mount.FakeMounter{}, - Subpather: &subpath.FakeSubpath{}, - HostUtil: hostutil.NewFakeHostUtil(nil), + KubeClient: client, + HeartbeatClient: heartbeatClient, + RemoteRuntimeService: remoteRuntime.RuntimeService, + RemoteImageService: remoteRuntime.ImageService, + CAdvisorInterface: cadvisorInterface, + Cloud: nil, + OSInterface: &containertest.FakeOS{}, + ContainerManager: containerManager, + VolumePlugins: volumePlugins(), + TLSOptions: nil, + OOMAdjuster: oom.NewFakeOOMAdjuster(), + Mounter: &mount.FakeMounter{}, + Subpather: &subpath.FakeSubpath{}, + HostUtil: hostutil.NewFakeHostUtil(nil), } return &HollowKubelet{ @@ -159,8 +162,6 @@ func GetHollowKubeletConfig(opt *HollowKubletOptions) (*options.KubeletFlags, *k f.MaxPerPodContainerCount = 2 f.NodeLabels = opt.NodeLabels f.ContainerRuntimeOptions.ContainerRuntime = kubetypes.RemoteContainerRuntime - f.RemoteRuntimeEndpoint = fakeremote.FakeRemoteRuntimeEndpoint - f.RemoteImageEndpoint = fakeremote.FakeRemoteImageEndpoint f.RegisterNode = true f.RegisterSchedulable = true f.ProviderID = fmt.Sprintf("kubemark://%v", opt.NodeName)