From 37dab8017346dfd9c813e2501cc34eebf17c6527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20K=C3=A4ldstr=C3=B6m?= Date: Fri, 23 Sep 2016 16:40:38 +0300 Subject: [PATCH] Make the Kubernetes control plane version configurable --- cmd/kubeadm/app/api/types.go | 4 ++++ cmd/kubeadm/app/cmd/init.go | 5 ++++- cmd/kubeadm/app/cmd/join.go | 4 ++-- cmd/kubeadm/app/images/images.go | 15 +++++++-------- cmd/kubeadm/app/master/addons.go | 2 +- cmd/kubeadm/app/master/manifests.go | 8 ++++---- hack/verify-flags/known-flags.txt | 1 + 7 files changed, 23 insertions(+), 16 deletions(-) diff --git a/cmd/kubeadm/app/api/types.go b/cmd/kubeadm/app/api/types.go index 4152e1bfe1b..f753be58037 100644 --- a/cmd/kubeadm/app/api/types.go +++ b/cmd/kubeadm/app/api/types.go @@ -54,6 +54,9 @@ type InitFlags struct { PodNetwork struct { CIDR net.IPNet } + Versions struct { + Kubernetes string + } CloudProvider string Schedulable bool } @@ -61,6 +64,7 @@ type InitFlags struct { const ( DefaultServiceDNSDomain = "cluster.local" DefaultServicesCIDRString = "100.64.0.0/12" + DefaultKubernetesVersion = "v1.4.0-beta.10" ) var ( diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index 83d0b02558d..b4548bd202e 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -86,9 +86,12 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { &s.InitFlags.Schedulable, "schedule-pods-here", false, `(optional) Allow to schedule workload to the node`, ) + cmd.PersistentFlags().StringVar( + &s.InitFlags.Versions.Kubernetes, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, + `(optional) Choose a specific Kubernetes version for the control plane`, + ) // TODO (phase1+) @errordeveloper make the flags below not show up in --help but rather on --advanced-help - cmd.PersistentFlags().StringSliceVar( &s.InitFlags.API.Etcd.ExternalEndpoints, "external-etcd-endpoints", []string{}, `(optional) etcd endpoints to use, in case you have an external cluster.`, diff --git a/cmd/kubeadm/app/cmd/join.go b/cmd/kubeadm/app/cmd/join.go index 1cba613f5ae..a5fe58ab975 100644 --- a/cmd/kubeadm/app/cmd/join.go +++ b/cmd/kubeadm/app/cmd/join.go @@ -52,8 +52,8 @@ func NewCmdJoin(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { }, } - cmd.PersistentFlags().StringVarP( - &s.Secrets.GivenToken, "token", "", "", + cmd.PersistentFlags().StringVar( + &s.Secrets.GivenToken, "token", "", `Shared secret used to secure bootstrap. Must match the output of 'kubeadm init'.`, ) diff --git a/cmd/kubeadm/app/images/images.go b/cmd/kubeadm/app/images/images.go index a899a87cbf2..bda982c0797 100644 --- a/cmd/kubeadm/app/images/images.go +++ b/cmd/kubeadm/app/images/images.go @@ -19,6 +19,8 @@ package images import ( "fmt" "runtime" + + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/api" ) const ( @@ -41,20 +43,17 @@ const ( exechealthzVersion = "1.1" ) -// TODO(phase1): Make this configurable + default to a v1.4 value fetched from: https://storage.googleapis.com/kubernetes-release/release/stable.txt -var DefaultKubeVersion = "v1.4.0-beta.8" - -func GetCoreImage(image string, overrideImage string) string { +func GetCoreImage(image string, cfg *kubeadmapi.KubeadmConfig, overrideImage string) string { if overrideImage != "" { return overrideImage } return map[string]string{ KubeEtcdImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "etcd", runtime.GOARCH, etcdVersion), - KubeAPIServerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-apiserver", runtime.GOARCH, DefaultKubeVersion), - KubeControllerManagerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-controller-manager", runtime.GOARCH, DefaultKubeVersion), - KubeSchedulerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-scheduler", runtime.GOARCH, DefaultKubeVersion), - KubeProxyImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-proxy", runtime.GOARCH, DefaultKubeVersion), + KubeAPIServerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-apiserver", runtime.GOARCH, cfg.Versions.Kubernetes), + KubeControllerManagerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-controller-manager", runtime.GOARCH, cfg.Versions.Kubernetes), + KubeSchedulerImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-scheduler", runtime.GOARCH, cfg.Versions.Kubernetes), + KubeProxyImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-proxy", runtime.GOARCH, cfg.Versions.Kubernetes), }[image] } diff --git a/cmd/kubeadm/app/master/addons.go b/cmd/kubeadm/app/master/addons.go index 85e89c38ae7..e95be511332 100644 --- a/cmd/kubeadm/app/master/addons.go +++ b/cmd/kubeadm/app/master/addons.go @@ -40,7 +40,7 @@ func createKubeProxyPodSpec(s *kubeadmapi.KubeadmConfig, architecture string) ap }, Containers: []api.Container{{ Name: kubeProxy, - Image: images.GetCoreImage(images.KubeProxyImage, s.EnvParams["hyperkube_image"]), + Image: images.GetCoreImage(images.KubeProxyImage, s, s.EnvParams["hyperkube_image"]), Command: append(getComponentCommand("proxy", s), "--kubeconfig=/run/kubeconfig"), SecurityContext: &api.SecurityContext{Privileged: &privilegedTrue}, VolumeMounts: []api.VolumeMount{ diff --git a/cmd/kubeadm/app/master/manifests.go b/cmd/kubeadm/app/master/manifests.go index ed90430c057..db82c7c30dd 100644 --- a/cmd/kubeadm/app/master/manifests.go +++ b/cmd/kubeadm/app/master/manifests.go @@ -59,7 +59,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error { staticPodSpecs := map[string]api.Pod{ kubeAPIServer: componentPod(api.Container{ Name: kubeAPIServer, - Image: images.GetCoreImage(images.KubeAPIServerImage, s.EnvParams["hyperkube_image"]), + Image: images.GetCoreImage(images.KubeAPIServerImage, s, s.EnvParams["hyperkube_image"]), Command: getComponentCommand(apiServer, s), VolumeMounts: []api.VolumeMount{certsVolumeMount(), k8sVolumeMount()}, LivenessProbe: componentProbe(8080, "/healthz"), @@ -67,7 +67,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error { }, certsVolume(s), k8sVolume(s)), kubeControllerManager: componentPod(api.Container{ Name: kubeControllerManager, - Image: images.GetCoreImage(images.KubeControllerManagerImage, s.EnvParams["hyperkube_image"]), + Image: images.GetCoreImage(images.KubeControllerManagerImage, s, s.EnvParams["hyperkube_image"]), Command: getComponentCommand(controllerManager, s), VolumeMounts: []api.VolumeMount{k8sVolumeMount()}, LivenessProbe: componentProbe(10252, "/healthz"), @@ -75,7 +75,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error { }, k8sVolume(s)), kubeScheduler: componentPod(api.Container{ Name: kubeScheduler, - Image: images.GetCoreImage(images.KubeSchedulerImage, s.EnvParams["hyperkube_image"]), + Image: images.GetCoreImage(images.KubeSchedulerImage, s, s.EnvParams["hyperkube_image"]), Command: getComponentCommand(scheduler, s), LivenessProbe: componentProbe(10251, "/healthz"), Resources: componentResources("100m"), @@ -93,7 +93,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error { "--data-dir=/var/etcd/data", }, VolumeMounts: []api.VolumeMount{certsVolumeMount(), etcdVolumeMount(), k8sVolumeMount()}, - Image: images.GetCoreImage(images.KubeEtcdImage, s.EnvParams["etcd_image"]), + Image: images.GetCoreImage(images.KubeEtcdImage, s, s.EnvParams["etcd_image"]), LivenessProbe: componentProbe(2379, "/health"), Resources: componentResources("200m"), SecurityContext: &api.SecurityContext{ diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index 1c98b734dcb..7435cf1a08f 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -532,6 +532,7 @@ update-period upgrade-image upgrade-target use-kubernetes-cluster-service +use-kubernetes-version user-whitelist verify-only volume-dir