Revert pull request #85879 "hollow-node use remote CRI"

This commit is contained in:
Jacek Kaniuk 2019-12-19 10:51:48 +01:00
parent 6c98d5515b
commit 4303be3d9f
8 changed files with 136 additions and 123 deletions

View File

@ -757,17 +757,6 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, featureGate f
klog.Warning(err) klog.Warning(err)
} }
err = kubelet.PreInitRuntimeService(&s.KubeletConfiguration,
kubeDeps, &s.ContainerRuntimeOptions,
s.ContainerRuntime,
s.RuntimeCgroups,
s.RemoteRuntimeEndpoint,
s.RemoteImageEndpoint,
s.NonMasqueradeCIDR)
if err != nil {
return err
}
if err := RunKubelet(s, kubeDeps, s.RunOnce); err != nil { if err := RunKubelet(s, kubeDeps, s.RunOnce); err != nil {
return err return err
} }
@ -1073,6 +1062,7 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie
kubeDeps, kubeDeps,
&kubeServer.ContainerRuntimeOptions, &kubeServer.ContainerRuntimeOptions,
kubeServer.ContainerRuntime, kubeServer.ContainerRuntime,
kubeServer.RuntimeCgroups,
kubeServer.HostnameOverride, kubeServer.HostnameOverride,
kubeServer.NodeIP, kubeServer.NodeIP,
kubeServer.ProviderID, kubeServer.ProviderID,
@ -1082,6 +1072,8 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie
kubeServer.RegisterNode, kubeServer.RegisterNode,
kubeServer.RegisterWithTaints, kubeServer.RegisterWithTaints,
kubeServer.AllowedUnsafeSysctls, kubeServer.AllowedUnsafeSysctls,
kubeServer.RemoteRuntimeEndpoint,
kubeServer.RemoteImageEndpoint,
kubeServer.ExperimentalMounterPath, kubeServer.ExperimentalMounterPath,
kubeServer.ExperimentalKernelMemcgNotification, kubeServer.ExperimentalKernelMemcgNotification,
kubeServer.ExperimentalCheckNodeCapabilitiesBeforeMount, kubeServer.ExperimentalCheckNodeCapabilitiesBeforeMount,
@ -1091,6 +1083,7 @@ func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencie
kubeServer.MaxContainerCount, kubeServer.MaxContainerCount,
kubeServer.MasterServiceNamespace, kubeServer.MasterServiceNamespace,
kubeServer.RegisterSchedulable, kubeServer.RegisterSchedulable,
kubeServer.NonMasqueradeCIDR,
kubeServer.KeepTerminatedPodVolumes, kubeServer.KeepTerminatedPodVolumes,
kubeServer.NodeLabels, kubeServer.NodeLabels,
kubeServer.SeccompProfileRoot, kubeServer.SeccompProfileRoot,
@ -1145,6 +1138,7 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
kubeDeps *kubelet.Dependencies, kubeDeps *kubelet.Dependencies,
crOptions *config.ContainerRuntimeOptions, crOptions *config.ContainerRuntimeOptions,
containerRuntime string, containerRuntime string,
runtimeCgroups string,
hostnameOverride string, hostnameOverride string,
nodeIP string, nodeIP string,
providerID string, providerID string,
@ -1154,6 +1148,8 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
registerNode bool, registerNode bool,
registerWithTaints []api.Taint, registerWithTaints []api.Taint,
allowedUnsafeSysctls []string, allowedUnsafeSysctls []string,
remoteRuntimeEndpoint string,
remoteImageEndpoint string,
experimentalMounterPath string, experimentalMounterPath string,
experimentalKernelMemcgNotification bool, experimentalKernelMemcgNotification bool,
experimentalCheckNodeCapabilitiesBeforeMount bool, experimentalCheckNodeCapabilitiesBeforeMount bool,
@ -1163,6 +1159,7 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
maxContainerCount int32, maxContainerCount int32,
masterServiceNamespace string, masterServiceNamespace string,
registerSchedulable bool, registerSchedulable bool,
nonMasqueradeCIDR string,
keepTerminatedPodVolumes bool, keepTerminatedPodVolumes bool,
nodeLabels map[string]string, nodeLabels map[string]string,
seccompProfileRoot string, seccompProfileRoot string,
@ -1175,6 +1172,7 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
kubeDeps, kubeDeps,
crOptions, crOptions,
containerRuntime, containerRuntime,
runtimeCgroups,
hostnameOverride, hostnameOverride,
nodeIP, nodeIP,
providerID, providerID,
@ -1184,6 +1182,8 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
registerNode, registerNode,
registerWithTaints, registerWithTaints,
allowedUnsafeSysctls, allowedUnsafeSysctls,
remoteRuntimeEndpoint,
remoteImageEndpoint,
experimentalMounterPath, experimentalMounterPath,
experimentalKernelMemcgNotification, experimentalKernelMemcgNotification,
experimentalCheckNodeCapabilitiesBeforeMount, experimentalCheckNodeCapabilitiesBeforeMount,
@ -1193,6 +1193,7 @@ func createAndInitKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
maxContainerCount, maxContainerCount,
masterServiceNamespace, masterServiceNamespace,
registerSchedulable, registerSchedulable,
nonMasqueradeCIDR,
keepTerminatedPodVolumes, keepTerminatedPodVolumes,
nodeLabels, nodeLabels,
seccompProfileRoot, seccompProfileRoot,

View File

@ -19,7 +19,8 @@ go_library(
"//pkg/api/legacyscheme:go_default_library", "//pkg/api/legacyscheme:go_default_library",
"//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library",
"//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/remote/fake:go_default_library", "//pkg/kubelet/dockershim:go_default_library",
"//pkg/kubelet/dockershim/libdocker:go_default_library",
"//pkg/kubemark:go_default_library", "//pkg/kubemark:go_default_library",
"//pkg/master/ports:go_default_library", "//pkg/master/ports:go_default_library",
"//pkg/util/iptables/testing:go_default_library", "//pkg/util/iptables/testing:go_default_library",

View File

@ -43,7 +43,8 @@ import (
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
fakeremote "k8s.io/kubernetes/pkg/kubelet/remote/fake" "k8s.io/kubernetes/pkg/kubelet/dockershim"
"k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker"
"k8s.io/kubernetes/pkg/kubemark" "k8s.io/kubernetes/pkg/kubemark"
"k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/master/ports"
fakeiptables "k8s.io/kubernetes/pkg/util/iptables/testing" fakeiptables "k8s.io/kubernetes/pkg/util/iptables/testing"
@ -193,14 +194,19 @@ func run(config *hollowNodeConfig) {
NodeName: config.NodeName, NodeName: config.NodeName,
} }
containerManager := cm.NewStubContainerManager() containerManager := cm.NewStubContainerManager()
fakeRemoteRuntime := fakeremote.NewFakeRemoteRuntime()
fakeDockerClientConfig := &dockershim.ClientConfig{
DockerEndpoint: libdocker.FakeDockerEndpoint,
EnableSleep: true,
WithTraceDisabled: true,
}
hollowKubelet := kubemark.NewHollowKubelet( hollowKubelet := kubemark.NewHollowKubelet(
f, c, f, c,
client, client,
heartbeatClient, heartbeatClient,
cadvisorInterface, cadvisorInterface,
fakeRemoteRuntime, fakeDockerClientConfig,
containerManager, containerManager,
) )
hollowKubelet.Run() hollowKubelet.Run()

View File

@ -179,6 +179,8 @@ func NewDockerClientFromConfig(config *ClientConfig) libdocker.Interface {
config.DockerEndpoint, config.DockerEndpoint,
config.RuntimeRequestTimeout, config.RuntimeRequestTimeout,
config.ImagePullProgressDeadline, config.ImagePullProgressDeadline,
config.WithTraceDisabled,
config.EnableSleep,
) )
return client return client
} }

View File

@ -84,7 +84,19 @@ func getDockerClient(dockerEndpoint string) (*dockerapi.Client, error) {
// is the timeout for docker requests. If timeout is exceeded, the request // 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 // will be cancelled and throw out an error. If requestTimeout is 0, a default
// value will be applied. // value will be applied.
func ConnectToDockerOrDie(dockerEndpoint string, requestTimeout, imagePullProgressDeadline time.Duration) Interface { 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
}
client, err := getDockerClient(dockerEndpoint) client, err := getDockerClient(dockerEndpoint)
if err != nil { if err != nil {
klog.Fatalf("Couldn't connect to docker: %v", err) klog.Fatalf("Couldn't connect to docker: %v", err)

View File

@ -264,12 +264,6 @@ type Dependencies struct {
DynamicPluginProber volume.DynamicPluginProber DynamicPluginProber volume.DynamicPluginProber
TLSOptions *server.TLSOptions TLSOptions *server.TLSOptions
KubeletConfigController *kubeletconfig.Controller KubeletConfigController *kubeletconfig.Controller
RemoteRuntimeService internalapi.RuntimeService
RemoteImageService internalapi.ImageManagerService
criHandler http.Handler
dockerLegacyService dockershim.DockerLegacyService
// remove it after cadvisor.UsingLegacyCadvisorStats dropped.
useLegacyCadvisorStats bool
} }
// makePodSourceConfig creates a config.PodConfig from the given // makePodSourceConfig creates a config.PodConfig from the given
@ -323,82 +317,16 @@ func makePodSourceConfig(kubeCfg *kubeletconfiginternal.KubeletConfiguration, ku
return cfg, nil return cfg, nil
} }
// PreInitRuntimeService will init runtime service before RunKubelet. func getRuntimeAndImageServices(remoteRuntimeEndpoint string, remoteImageEndpoint string, runtimeRequestTimeout metav1.Duration) (internalapi.RuntimeService, internalapi.ImageManagerService, error) {
func PreInitRuntimeService(kubeCfg *kubeletconfiginternal.KubeletConfiguration, rs, err := remote.NewRemoteRuntimeService(remoteRuntimeEndpoint, runtimeRequestTimeout.Duration)
kubeDeps *Dependencies,
crOptions *config.ContainerRuntimeOptions,
containerRuntime string,
runtimeCgroups string,
remoteRuntimeEndpoint string,
remoteImageEndpoint string,
nonMasqueradeCIDR string) error {
if remoteRuntimeEndpoint != "" {
// remoteImageEndpoint is same as remoteRuntimeEndpoint if not explicitly specified
if remoteImageEndpoint == "" {
remoteImageEndpoint = remoteRuntimeEndpoint
}
}
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 { if err != nil {
return err return nil, nil, err
} }
if crOptions.RedirectContainerStreaming { is, err := remote.NewRemoteImageService(remoteImageEndpoint, runtimeRequestTimeout.Duration)
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 { if err != nil {
return err return nil, nil, err
} }
if !supported { return rs, is, err
kubeDeps.dockerLegacyService = ds
}
case kubetypes.RemoteContainerRuntime:
// No-op.
break
default:
return fmt.Errorf("unsupported CRI runtime: %q", containerRuntime)
}
var err error
if kubeDeps.RemoteRuntimeService, err = remote.NewRemoteRuntimeService(remoteRuntimeEndpoint, kubeCfg.RuntimeRequestTimeout.Duration); err != nil {
return err
}
if kubeDeps.RemoteImageService, err = remote.NewRemoteImageService(remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout.Duration); err != nil {
return err
}
kubeDeps.useLegacyCadvisorStats = cadvisor.UsingLegacyCadvisorStats(containerRuntime, remoteRuntimeEndpoint)
return nil
} }
// NewMainKubelet instantiates a new Kubelet object along with all the required internal modules. // NewMainKubelet instantiates a new Kubelet object along with all the required internal modules.
@ -407,6 +335,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
kubeDeps *Dependencies, kubeDeps *Dependencies,
crOptions *config.ContainerRuntimeOptions, crOptions *config.ContainerRuntimeOptions,
containerRuntime string, containerRuntime string,
runtimeCgroups string,
hostnameOverride string, hostnameOverride string,
nodeIP string, nodeIP string,
providerID string, providerID string,
@ -416,6 +345,8 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
registerNode bool, registerNode bool,
registerWithTaints []api.Taint, registerWithTaints []api.Taint,
allowedUnsafeSysctls []string, allowedUnsafeSysctls []string,
remoteRuntimeEndpoint string,
remoteImageEndpoint string,
experimentalMounterPath string, experimentalMounterPath string,
experimentalKernelMemcgNotification bool, experimentalKernelMemcgNotification bool,
experimentalCheckNodeCapabilitiesBeforeMount bool, experimentalCheckNodeCapabilitiesBeforeMount bool,
@ -425,6 +356,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
maxContainerCount int32, maxContainerCount int32,
masterServiceNamespace string, masterServiceNamespace string,
registerSchedulable bool, registerSchedulable bool,
nonMasqueradeCIDR string,
keepTerminatedPodVolumes bool, keepTerminatedPodVolumes bool,
nodeLabels map[string]string, nodeLabels map[string]string,
seccompProfileRoot string, seccompProfileRoot string,
@ -667,11 +599,72 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
klet.statusManager = status.NewManager(klet.kubeClient, klet.podManager, klet) klet.statusManager = status.NewManager(klet.kubeClient, klet.podManager, klet)
if remoteRuntimeEndpoint != "" {
// remoteImageEndpoint is same as remoteRuntimeEndpoint if not explicitly specified
if remoteImageEndpoint == "" {
remoteImageEndpoint = remoteRuntimeEndpoint
}
}
// 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),
}
klet.resourceAnalyzer = serverstats.NewResourceAnalyzer(klet, kubeCfg.VolumeStatsAggPeriod.Duration) klet.resourceAnalyzer = serverstats.NewResourceAnalyzer(klet, kubeCfg.VolumeStatsAggPeriod.Duration)
klet.dockerLegacyService = kubeDeps.dockerLegacyService // if left at nil, that means it is unneeded
klet.criHandler = kubeDeps.criHandler var legacyLogProvider kuberuntime.LegacyLogProvider
klet.runtimeService = kubeDeps.RemoteRuntimeService
switch containerRuntime {
case kubetypes.DockerContainerRuntime:
// 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 nil, err
}
if crOptions.RedirectContainerStreaming {
klet.criHandler = ds
}
// The unix socket for kubelet <-> dockershim communication.
klog.V(5).Infof("RemoteRuntimeEndpoint: %q, RemoteImageEndpoint: %q",
remoteRuntimeEndpoint,
remoteImageEndpoint)
klog.V(2).Infof("Starting the GRPC server for the docker CRI shim.")
server := dockerremote.NewDockerServer(remoteRuntimeEndpoint, ds)
if err := server.Start(); err != nil {
return nil, err
}
// Create dockerLegacyService when the logging driver is not supported.
supported, err := ds.IsCRISupportedLogDriver()
if err != nil {
return nil, err
}
if !supported {
klet.dockerLegacyService = ds
legacyLogProvider = ds
}
case kubetypes.RemoteContainerRuntime:
// No-op.
break
default:
return nil, fmt.Errorf("unsupported CRI runtime: %q", containerRuntime)
}
runtimeService, imageService, err := getRuntimeAndImageServices(remoteRuntimeEndpoint, remoteImageEndpoint, kubeCfg.RuntimeRequestTimeout)
if err != nil {
return nil, err
}
klet.runtimeService = runtimeService
if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) && kubeDeps.KubeClient != nil { if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) && kubeDeps.KubeClient != nil {
klet.runtimeClassManager = runtimeclass.NewManager(kubeDeps.KubeClient) klet.runtimeClassManager = runtimeclass.NewManager(kubeDeps.KubeClient)
@ -694,10 +687,10 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
int(kubeCfg.RegistryBurst), int(kubeCfg.RegistryBurst),
kubeCfg.CPUCFSQuota, kubeCfg.CPUCFSQuota,
kubeCfg.CPUCFSQuotaPeriod, kubeCfg.CPUCFSQuotaPeriod,
kubeDeps.RemoteRuntimeService, runtimeService,
kubeDeps.RemoteImageService, imageService,
kubeDeps.ContainerManager.InternalContainerLifecycle(), kubeDeps.ContainerManager.InternalContainerLifecycle(),
kubeDeps.dockerLegacyService, legacyLogProvider,
klet.runtimeClassManager, klet.runtimeClassManager,
) )
if err != nil { if err != nil {
@ -713,7 +706,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
} }
klet.runtimeCache = runtimeCache klet.runtimeCache = runtimeCache
if kubeDeps.useLegacyCadvisorStats { if cadvisor.UsingLegacyCadvisorStats(containerRuntime, remoteRuntimeEndpoint) {
klet.StatsProvider = stats.NewCadvisorStatsProvider( klet.StatsProvider = stats.NewCadvisorStatsProvider(
klet.cadvisor, klet.cadvisor,
klet.resourceAnalyzer, klet.resourceAnalyzer,
@ -727,8 +720,8 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
klet.resourceAnalyzer, klet.resourceAnalyzer,
klet.podManager, klet.podManager,
klet.runtimeCache, klet.runtimeCache,
kubeDeps.RemoteRuntimeService, runtimeService,
kubeDeps.RemoteImageService, imageService,
stats.NewLogMetricsService(), stats.NewLogMetricsService(),
kubecontainer.RealOS{}) kubecontainer.RealOS{})
} }

View File

@ -22,7 +22,7 @@ go_library(
"//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/cadvisor:go_default_library",
"//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/container/testing:go_default_library", "//pkg/kubelet/container/testing:go_default_library",
"//pkg/kubelet/remote/fake:go_default_library", "//pkg/kubelet/dockershim:go_default_library",
"//pkg/kubelet/types:go_default_library", "//pkg/kubelet/types:go_default_library",
"//pkg/proxy:go_default_library", "//pkg/proxy:go_default_library",
"//pkg/proxy/config:go_default_library", "//pkg/proxy/config:go_default_library",

View File

@ -32,7 +32,7 @@ import (
"k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/cadvisor"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
fakeremote "k8s.io/kubernetes/pkg/kubelet/remote/fake" "k8s.io/kubernetes/pkg/kubelet/dockershim"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/util/oom"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
@ -98,13 +98,12 @@ func NewHollowKubelet(
client *clientset.Clientset, client *clientset.Clientset,
heartbeatClient *clientset.Clientset, heartbeatClient *clientset.Clientset,
cadvisorInterface cadvisor.Interface, cadvisorInterface cadvisor.Interface,
remoteRuntime *fakeremote.RemoteRuntime, dockerClientConfig *dockershim.ClientConfig,
containerManager cm.ContainerManager) *HollowKubelet { containerManager cm.ContainerManager) *HollowKubelet {
d := &kubelet.Dependencies{ d := &kubelet.Dependencies{
KubeClient: client, KubeClient: client,
HeartbeatClient: heartbeatClient, HeartbeatClient: heartbeatClient,
RemoteRuntimeService: remoteRuntime.RuntimeService, DockerClientConfig: dockerClientConfig,
RemoteImageService: remoteRuntime.ImageService,
CAdvisorInterface: cadvisorInterface, CAdvisorInterface: cadvisorInterface,
Cloud: nil, Cloud: nil,
OSInterface: &containertest.FakeOS{}, OSInterface: &containertest.FakeOS{},
@ -161,7 +160,6 @@ func GetHollowKubeletConfig(opt *HollowKubletOptions) (*options.KubeletFlags, *k
f.MaxContainerCount = 100 f.MaxContainerCount = 100
f.MaxPerPodContainerCount = 2 f.MaxPerPodContainerCount = 2
f.NodeLabels = opt.NodeLabels f.NodeLabels = opt.NodeLabels
f.ContainerRuntimeOptions.ContainerRuntime = kubetypes.RemoteContainerRuntime
f.RegisterNode = true f.RegisterNode = true
f.RegisterSchedulable = true f.RegisterSchedulable = true
f.ProviderID = fmt.Sprintf("kubemark://%v", opt.NodeName) f.ProviderID = fmt.Sprintf("kubemark://%v", opt.NodeName)