From bf08da0fdc254810ab67c86f8a10647c825cbeb7 Mon Sep 17 00:00:00 2001 From: Jonathan Wills Date: Sat, 15 Aug 2015 09:52:48 -0400 Subject: [PATCH 1/3] change coreos node env file from yaml to KEY=VALUE --- cluster/gce/coreos/helper.sh | 58 ++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/cluster/gce/coreos/helper.sh b/cluster/gce/coreos/helper.sh index 5497c945450..705d284227c 100755 --- a/cluster/gce/coreos/helper.sh +++ b/cluster/gce/coreos/helper.sh @@ -67,35 +67,35 @@ KUBELET_APISERVER: $(yaml-quote ${KUBELET_APISERVER:-}) EOF else cat >>$file < Date: Sat, 15 Aug 2015 09:53:33 -0400 Subject: [PATCH 2/3] Fix rkt binary path --- cluster/gce/coreos/node.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster/gce/coreos/node.yaml b/cluster/gce/coreos/node.yaml index 984624b0615..a08d4be2bf4 100644 --- a/cluster/gce/coreos/node.yaml +++ b/cluster/gce/coreos/node.yaml @@ -202,4 +202,4 @@ coreos: After=kubernetes-install-rkt.service [Service] EnvironmentFile=/etc/kube-env - ExecStart=/opt/rkt/rkt metadata-service + ExecStart=/opt/rkt/rkt/rkt metadata-service From 80e799fc0c8db6b7b3c6c2f5bbdbbe4cacfc3378 Mon Sep 17 00:00:00 2001 From: Jonathan Wills Date: Mon, 17 Aug 2015 13:03:45 -0400 Subject: [PATCH 3/3] Allow configuring the rkt binary in a kubelet with a flag. This is necessary because coreos comes with rkt installed, and if we want to use a different version we need some way to avoid the default one. --- cluster/gce/coreos/node.yaml | 3 ++- cmd/kubelet/app/server.go | 6 ++++++ contrib/mesos/pkg/executor/service/service.go | 1 + hack/verify-flags/known-flags.txt | 1 + pkg/kubelet/kubelet.go | 6 +++++- pkg/kubelet/rkt/config.go | 2 ++ pkg/kubelet/rkt/rkt.go | 13 ++++++++----- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/cluster/gce/coreos/node.yaml b/cluster/gce/coreos/node.yaml index a08d4be2bf4..0bcffef910f 100644 --- a/cluster/gce/coreos/node.yaml +++ b/cluster/gce/coreos/node.yaml @@ -151,7 +151,8 @@ coreos: --cluster-dns=10.0.0.10 \ --cluster-domain=cluster.local \ --logtostderr=true \ - --container-runtime=${KUBERNETES_CONTAINER_RUNTIME} + --container-runtime=${KUBERNETES_CONTAINER_RUNTIME} \ + --rkt-path=/opt/rkt/rkt/rkt Restart=always RestartSec=10 diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 2859325ec33..a581e56233b 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -116,6 +116,7 @@ type KubeletServer struct { ResourceContainer string CgroupRoot string ContainerRuntime string + RktPath string DockerDaemonContainer string SystemContainer string ConfigureCBR0 bool @@ -182,6 +183,7 @@ func NewKubeletServer() *KubeletServer { ResourceContainer: "/kubelet", CgroupRoot: "", ContainerRuntime: "docker", + RktPath: "", DockerDaemonContainer: "/docker-daemon", SystemContainer: "", ConfigureCBR0: false, @@ -245,6 +247,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) { 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', 'rkt'. Default: 'docker'.") + fs.StringVar(&s.RktPath, "rkt-path", s.RktPath, "Path of rkt binary. Leave empty to use the first rkt in $PATH. Only used if --container-runtime='rkt'") fs.StringVar(&s.SystemContainer, "system-container", s.SystemContainer, "Optional resource-only container in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. (Default: \"\").") fs.BoolVar(&s.ConfigureCBR0, "configure-cbr0", s.ConfigureCBR0, "If true, kubelet will configure cbr0 based on Node.Spec.PodCIDR.") fs.IntVar(&s.MaxPods, "max-pods", 40, "Number of Pods that can run on this Kubelet.") @@ -348,6 +351,7 @@ func (s *KubeletServer) KubeletConfig() (*KubeletConfig, error) { ResourceContainer: s.ResourceContainer, CgroupRoot: s.CgroupRoot, ContainerRuntime: s.ContainerRuntime, + RktPath: s.RktPath, Mounter: mounter, DockerDaemonContainer: s.DockerDaemonContainer, SystemContainer: s.SystemContainer, @@ -753,6 +757,7 @@ type KubeletConfig struct { OSInterface kubecontainer.OSInterface CgroupRoot string ContainerRuntime string + RktPath string Mounter mount.Interface DockerDaemonContainer string SystemContainer string @@ -811,6 +816,7 @@ func createAndInitKubelet(kc *KubeletConfig) (k KubeletBootstrap, pc *config.Pod kc.OSInterface, kc.CgroupRoot, kc.ContainerRuntime, + kc.RktPath, kc.Mounter, kc.DockerDaemonContainer, kc.SystemContainer, diff --git a/contrib/mesos/pkg/executor/service/service.go b/contrib/mesos/pkg/executor/service/service.go index 6df7a39cdda..5afaeb52295 100644 --- a/contrib/mesos/pkg/executor/service/service.go +++ b/contrib/mesos/pkg/executor/service/service.go @@ -346,6 +346,7 @@ func (ks *KubeletExecutorServer) createAndInitKubelet( kc.OSInterface, kc.CgroupRoot, kc.ContainerRuntime, + kc.RktPath, kc.Mounter, kc.DockerDaemonContainer, kc.SystemContainer, diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index c6e44676474..b17ffbd684f 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -198,6 +198,7 @@ required-contexts resource-container resource-quota-sync-period resource-version +rkt-path root-ca-file root-dir run-proxy diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 3f9d82779c9..c8c278157e7 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -144,6 +144,7 @@ func NewMainKubelet( osInterface kubecontainer.OSInterface, cgroupRoot string, containerRuntime string, + rktPath string, mounter mount.Interface, dockerDaemonContainer string, systemContainer string, @@ -304,7 +305,10 @@ func NewMainKubelet( oomAdjuster, procFs) case "rkt": - conf := &rkt.Config{InsecureSkipVerify: true} + conf := &rkt.Config{ + Path: rktPath, + InsecureSkipVerify: true, + } rktRuntime, err := rkt.New( conf, klet, diff --git a/pkg/kubelet/rkt/config.go b/pkg/kubelet/rkt/config.go index aba4385cf1f..c59aa51ebee 100644 --- a/pkg/kubelet/rkt/config.go +++ b/pkg/kubelet/rkt/config.go @@ -21,6 +21,8 @@ import "fmt" // Config stores the global configuration for the rkt runtime. // Run 'rkt' for more details. type Config struct { + // The absolute path to the binary, or leave empty to find it in $PATH. + Path string // The debug flag for rkt. Debug bool // The rkt data directory. diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index ef8299effe1..6bbe0acb0dc 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -128,11 +128,14 @@ func New(config *Config, return nil, fmt.Errorf("cannot connect to dbus: %v", err) } - // Test if rkt binary is in $PATH. - // TODO(yifan): Use a kubelet flag to read the path. - rktBinAbsPath, err := exec.LookPath("rkt") - if err != nil { - return nil, fmt.Errorf("cannot find rkt binary: %v", err) + rktBinAbsPath := config.Path + if rktBinAbsPath == "" { + // No default rkt path was set, so try to find one in $PATH. + var err error + rktBinAbsPath, err = exec.LookPath("rkt") + if err != nil { + return nil, fmt.Errorf("cannot find rkt binary: %v", err) + } } rkt := &runtime{