mirror of https://github.com/k3s-io/k3s
Make the Kubernetes control plane version configurable
parent
5862ea6f38
commit
37dab80173
|
@ -54,6 +54,9 @@ type InitFlags struct {
|
||||||
PodNetwork struct {
|
PodNetwork struct {
|
||||||
CIDR net.IPNet
|
CIDR net.IPNet
|
||||||
}
|
}
|
||||||
|
Versions struct {
|
||||||
|
Kubernetes string
|
||||||
|
}
|
||||||
CloudProvider string
|
CloudProvider string
|
||||||
Schedulable bool
|
Schedulable bool
|
||||||
}
|
}
|
||||||
|
@ -61,6 +64,7 @@ type InitFlags struct {
|
||||||
const (
|
const (
|
||||||
DefaultServiceDNSDomain = "cluster.local"
|
DefaultServiceDNSDomain = "cluster.local"
|
||||||
DefaultServicesCIDRString = "100.64.0.0/12"
|
DefaultServicesCIDRString = "100.64.0.0/12"
|
||||||
|
DefaultKubernetesVersion = "v1.4.0-beta.10"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -86,9 +86,12 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command {
|
||||||
&s.InitFlags.Schedulable, "schedule-pods-here", false,
|
&s.InitFlags.Schedulable, "schedule-pods-here", false,
|
||||||
`(optional) Allow to schedule workload to the node`,
|
`(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
|
// TODO (phase1+) @errordeveloper make the flags below not show up in --help but rather on --advanced-help
|
||||||
|
|
||||||
cmd.PersistentFlags().StringSliceVar(
|
cmd.PersistentFlags().StringSliceVar(
|
||||||
&s.InitFlags.API.Etcd.ExternalEndpoints, "external-etcd-endpoints", []string{},
|
&s.InitFlags.API.Etcd.ExternalEndpoints, "external-etcd-endpoints", []string{},
|
||||||
`(optional) etcd endpoints to use, in case you have an external cluster.`,
|
`(optional) etcd endpoints to use, in case you have an external cluster.`,
|
||||||
|
|
|
@ -52,8 +52,8 @@ func NewCmdJoin(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.PersistentFlags().StringVarP(
|
cmd.PersistentFlags().StringVar(
|
||||||
&s.Secrets.GivenToken, "token", "", "",
|
&s.Secrets.GivenToken, "token", "",
|
||||||
`Shared secret used to secure bootstrap. Must match the output of 'kubeadm init'.`,
|
`Shared secret used to secure bootstrap. Must match the output of 'kubeadm init'.`,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@ package images
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -41,20 +43,17 @@ const (
|
||||||
exechealthzVersion = "1.1"
|
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
|
func GetCoreImage(image string, cfg *kubeadmapi.KubeadmConfig, overrideImage string) string {
|
||||||
var DefaultKubeVersion = "v1.4.0-beta.8"
|
|
||||||
|
|
||||||
func GetCoreImage(image string, overrideImage string) string {
|
|
||||||
if overrideImage != "" {
|
if overrideImage != "" {
|
||||||
return overrideImage
|
return overrideImage
|
||||||
}
|
}
|
||||||
|
|
||||||
return map[string]string{
|
return map[string]string{
|
||||||
KubeEtcdImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "etcd", runtime.GOARCH, etcdVersion),
|
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),
|
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, DefaultKubeVersion),
|
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, DefaultKubeVersion),
|
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, DefaultKubeVersion),
|
KubeProxyImage: fmt.Sprintf("%s/%s-%s:%s", gcrPrefix, "kube-proxy", runtime.GOARCH, cfg.Versions.Kubernetes),
|
||||||
}[image]
|
}[image]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ func createKubeProxyPodSpec(s *kubeadmapi.KubeadmConfig, architecture string) ap
|
||||||
},
|
},
|
||||||
Containers: []api.Container{{
|
Containers: []api.Container{{
|
||||||
Name: kubeProxy,
|
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"),
|
Command: append(getComponentCommand("proxy", s), "--kubeconfig=/run/kubeconfig"),
|
||||||
SecurityContext: &api.SecurityContext{Privileged: &privilegedTrue},
|
SecurityContext: &api.SecurityContext{Privileged: &privilegedTrue},
|
||||||
VolumeMounts: []api.VolumeMount{
|
VolumeMounts: []api.VolumeMount{
|
||||||
|
|
|
@ -59,7 +59,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error {
|
||||||
staticPodSpecs := map[string]api.Pod{
|
staticPodSpecs := map[string]api.Pod{
|
||||||
kubeAPIServer: componentPod(api.Container{
|
kubeAPIServer: componentPod(api.Container{
|
||||||
Name: kubeAPIServer,
|
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),
|
Command: getComponentCommand(apiServer, s),
|
||||||
VolumeMounts: []api.VolumeMount{certsVolumeMount(), k8sVolumeMount()},
|
VolumeMounts: []api.VolumeMount{certsVolumeMount(), k8sVolumeMount()},
|
||||||
LivenessProbe: componentProbe(8080, "/healthz"),
|
LivenessProbe: componentProbe(8080, "/healthz"),
|
||||||
|
@ -67,7 +67,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error {
|
||||||
}, certsVolume(s), k8sVolume(s)),
|
}, certsVolume(s), k8sVolume(s)),
|
||||||
kubeControllerManager: componentPod(api.Container{
|
kubeControllerManager: componentPod(api.Container{
|
||||||
Name: kubeControllerManager,
|
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),
|
Command: getComponentCommand(controllerManager, s),
|
||||||
VolumeMounts: []api.VolumeMount{k8sVolumeMount()},
|
VolumeMounts: []api.VolumeMount{k8sVolumeMount()},
|
||||||
LivenessProbe: componentProbe(10252, "/healthz"),
|
LivenessProbe: componentProbe(10252, "/healthz"),
|
||||||
|
@ -75,7 +75,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error {
|
||||||
}, k8sVolume(s)),
|
}, k8sVolume(s)),
|
||||||
kubeScheduler: componentPod(api.Container{
|
kubeScheduler: componentPod(api.Container{
|
||||||
Name: kubeScheduler,
|
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),
|
Command: getComponentCommand(scheduler, s),
|
||||||
LivenessProbe: componentProbe(10251, "/healthz"),
|
LivenessProbe: componentProbe(10251, "/healthz"),
|
||||||
Resources: componentResources("100m"),
|
Resources: componentResources("100m"),
|
||||||
|
@ -93,7 +93,7 @@ func WriteStaticPodManifests(s *kubeadmapi.KubeadmConfig) error {
|
||||||
"--data-dir=/var/etcd/data",
|
"--data-dir=/var/etcd/data",
|
||||||
},
|
},
|
||||||
VolumeMounts: []api.VolumeMount{certsVolumeMount(), etcdVolumeMount(), k8sVolumeMount()},
|
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"),
|
LivenessProbe: componentProbe(2379, "/health"),
|
||||||
Resources: componentResources("200m"),
|
Resources: componentResources("200m"),
|
||||||
SecurityContext: &api.SecurityContext{
|
SecurityContext: &api.SecurityContext{
|
||||||
|
|
|
@ -532,6 +532,7 @@ update-period
|
||||||
upgrade-image
|
upgrade-image
|
||||||
upgrade-target
|
upgrade-target
|
||||||
use-kubernetes-cluster-service
|
use-kubernetes-cluster-service
|
||||||
|
use-kubernetes-version
|
||||||
user-whitelist
|
user-whitelist
|
||||||
verify-only
|
verify-only
|
||||||
volume-dir
|
volume-dir
|
||||||
|
|
Loading…
Reference in New Issue