From 5d0e5d7d6177bf7883896640abea8531b3f4400e Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Tue, 5 May 2015 10:55:11 -0700 Subject: [PATCH 1/2] Inject dependencies to rkt --- pkg/kubelet/rkt/gc.go | 5 ++--- pkg/kubelet/rkt/rkt_linux.go | 18 +++++++++++++----- pkg/kubelet/rkt/rkt_unsupported.go | 9 +++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/rkt/gc.go b/pkg/kubelet/rkt/gc.go index ff3bfda959a..28cde1db2ff 100644 --- a/pkg/kubelet/rkt/gc.go +++ b/pkg/kubelet/rkt/gc.go @@ -18,11 +18,10 @@ package rkt // ImageManager manages and garbage collects the container images for rkt. type ImageManager struct { - runtime *runtime } -func NewImageManager(r *runtime) *ImageManager { - return &ImageManager{runtime: r} +func NewImageManager() *ImageManager { + return &ImageManager{} } // GarbageCollect collects the images. It is not implemented by rkt yet. diff --git a/pkg/kubelet/rkt/rkt_linux.go b/pkg/kubelet/rkt/rkt_linux.go index 1bd919f65ac..0429a0d5c98 100644 --- a/pkg/kubelet/rkt/rkt_linux.go +++ b/pkg/kubelet/rkt/rkt_linux.go @@ -34,6 +34,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client/record" "github.com/GoogleCloudPlatform/kubernetes/pkg/credentialprovider" kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/prober" @@ -104,7 +105,11 @@ var _ kubecontainer.Runtime = &runtime{} // New creates the rkt container runtime which implements the container runtime interface. // It will test if the rkt binary is in the $PATH, and whether we can get the // version of it. If so, creates the rkt container runtime, otherwise returns an error. -func New(config *Config) (kubecontainer.Runtime, error) { +func New(config *Config, + generator kubecontainer.RunContainerOptionsGenerator, + recorder record.EventRecorder, + containerRefManager *kubecontainer.RefManager, + readinessManager *kubecontainer.ReadinessManager) (kubecontainer.Runtime, error) { systemdVersion, err := getSystemdVersion() if err != nil { return nil, err @@ -129,11 +134,14 @@ func New(config *Config) (kubecontainer.Runtime, error) { } rkt := &runtime{ - systemd: systemd, - rktBinAbsPath: rktBinAbsPath, - config: config, - dockerKeyring: credentialprovider.NewDockerKeyring(), + generator: generator, + readinessManager: readinessManager, + systemd: systemd, + rktBinAbsPath: rktBinAbsPath, + config: config, + dockerKeyring: credentialprovider.NewDockerKeyring(), } + rkt.prober = prober.New(rkt, readinessManager, containerRefManager, recorder) // Test the rkt version. version, err := rkt.Version() diff --git a/pkg/kubelet/rkt/rkt_unsupported.go b/pkg/kubelet/rkt/rkt_unsupported.go index 2fefdfa57eb..6332741f40e 100644 --- a/pkg/kubelet/rkt/rkt_unsupported.go +++ b/pkg/kubelet/rkt/rkt_unsupported.go @@ -23,6 +23,7 @@ import ( "io" "github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/client/record" kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" ) @@ -32,6 +33,14 @@ type unsupportedRuntime struct { var _ kubecontainer.Runtime = &unsupportedRuntime{} +func New(config *Config, + generator kubecontainer.RunContainerOptionsGenerator, + recorder record.EventRecorder, + containerRefManager *kubecontainer.RefManager, + readinessManager *kubecontainer.ReadinessManager) (kubecontainer.Runtime, error) { + return nil, unsupportedError +} + var unsupportedError = fmt.Errorf("rkt runtime is unsupported in this platform") func (ur *unsupportedRuntime) Version() (kubecontainer.Version, error) { From 22297d316a5964c9b154c0a6f172507802a732ad Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Tue, 5 May 2015 10:55:21 -0700 Subject: [PATCH 2/2] Add rkt runtime to Kubelet init --- cmd/kubelet/app/server.go | 2 +- pkg/kubelet/kubelet.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 29e7b30d951..e4f2a06922d 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -208,7 +208,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&s.CloudConfigFile, "cloud-config", s.CloudConfigFile, "The path to the cloud provider configuration file. Empty string for no configuration file.") fs.StringVar(&s.ResourceContainer, "resource-container", s.ResourceContainer, "Absolute name of the resource-only container to create and run the Kubelet in (Default: /kubelet).") fs.StringVar(&s.CgroupRoot, "cgroup_root", s.CgroupRoot, "Optional root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Default: '', which means use the container runtime default.") - fs.StringVar(&s.ContainerRuntime, "container_runtime", s.ContainerRuntime, "The container runtime to use. Possible values: 'docker'. Default: 'docker'.") + fs.StringVar(&s.ContainerRuntime, "container_runtime", s.ContainerRuntime, "The container runtime to use. Possible values: 'docker', 'rkt'. Default: 'docker'.") // Flags intended for testing, not recommended used in production environments. fs.BoolVar(&s.ReallyCrashForTesting, "really-crash-for-testing", s.ReallyCrashForTesting, "If true, when panics occur crash. Intended for testing.") diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index bde538b75a3..4290fbcea5c 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -44,6 +44,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/metrics" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/network" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/prober" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/rkt" kubeletTypes "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/types" "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" @@ -261,6 +262,15 @@ func NewMainKubelet( klet, klet.httpClient, newKubeletRuntimeHooks(recorder)) + case "rkt": + conf := &rkt.Config{ + InsecureSkipVerify: true, + } + rktRuntime, err := rkt.New(conf, klet, recorder, containerRefManager, readinessManager) + if err != nil { + return nil, err + } + klet.containerRuntime = rktRuntime default: return nil, fmt.Errorf("unsupported container runtime %q specified", containerRuntime) }