diff --git a/cluster.yml b/cluster.yml index 11ceb4ce..12cd7ad2 100644 --- a/cluster.yml +++ b/cluster.yml @@ -56,29 +56,28 @@ nodes: services: etcd: - image: quay.io/coreos/etcd:latest + kube-api: - image: rancher/k8s:v1.8.3-rancher2 + service_cluster_ip_range: 10.233.0.0/18 pod_security_policy: false extra_args: v: 4 kube-controller: - image: rancher/k8s:v1.8.3-rancher2 cluster_cidr: 10.233.64.0/18 service_cluster_ip_range: 10.233.0.0/18 scheduler: - image: rancher/k8s:v1.8.3-rancher2 kubelet: - image: rancher/k8s:v1.8.3-rancher2 cluster_domain: cluster.local cluster_dns_server: 10.233.0.3 infra_container_image: gcr.io/google_containers/pause-amd64:3.0 kubeproxy: - image: rancher/k8s:v1.8.3-rancher2 + system_images: + etcd: quay.io/coreos/etcd:latest + kubernetes: rancher/k8s:v1.8.5-rancher4 alpine: alpine:latest nginx_proxy: rancher/rke-nginx-proxy:v0.1.1 cert_downloader: rancher/rke-cert-deployer:v0.1.1 diff --git a/cluster/cluster.go b/cluster/cluster.go index 7e33676c..c3ba2d3c 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -7,6 +7,7 @@ import ( "path/filepath" "strings" + ref "github.com/docker/distribution/reference" "github.com/rancher/rke/authz" "github.com/rancher/rke/docker" "github.com/rancher/rke/hosts" @@ -167,9 +168,24 @@ func (c *Cluster) setClusterDefaults(ctx context.Context) { log.Warnf(ctx, "PodSecurityPolicy can't be enabled with RBAC support disabled") c.Services.KubeAPI.PodSecurityPolicy = false } + c.setClusterImageDefaults() + c.setClusterKubernetesImageVersion(ctx) c.setClusterServicesDefaults() c.setClusterNetworkDefaults() - c.setClusterImageDefaults() +} + +func (c *Cluster) setClusterKubernetesImageVersion(ctx context.Context) { + k8sImageNamed, _ := ref.ParseNormalizedNamed(c.SystemImages.Kubernetes) + // Kubernetes image is already set by c.setClusterImageDefaults(), + // I will override it here if Version is set. + var VersionedImageNamed ref.NamedTagged + if c.Version != "" { + VersionedImageNamed, _ = ref.WithTag(ref.TrimNamed(k8sImageNamed), c.Version) + c.SystemImages.Kubernetes = VersionedImageNamed.String() + } + if c.SystemImages.Kubernetes != k8sImageNamed.String() { + log.Infof(ctx, "Overrding Kubernetes image [%s] with tag [%s]", VersionedImageNamed.Name(), VersionedImageNamed.Tag()) + } } func (c *Cluster) setClusterServicesDefaults() { @@ -181,12 +197,12 @@ func (c *Cluster) setClusterServicesDefaults() { &c.Services.Kubelet.ClusterDomain: DefaultClusterDomain, &c.Services.Kubelet.InfraContainerImage: DefaultInfraContainerImage, &c.Authentication.Strategy: DefaultAuthStrategy, - &c.Services.KubeAPI.Image: DefaultK8sImage, - &c.Services.Scheduler.Image: DefaultK8sImage, - &c.Services.KubeController.Image: DefaultK8sImage, - &c.Services.Kubelet.Image: DefaultK8sImage, - &c.Services.Kubeproxy.Image: DefaultK8sImage, - &c.Services.Etcd.Image: DefaultEtcdImage, + &c.Services.KubeAPI.Image: c.SystemImages.Kubernetes, + &c.Services.Scheduler.Image: c.SystemImages.Kubernetes, + &c.Services.KubeController.Image: c.SystemImages.Kubernetes, + &c.Services.Kubelet.Image: c.SystemImages.Kubernetes, + &c.Services.Kubeproxy.Image: c.SystemImages.Kubernetes, + &c.Services.Etcd.Image: c.SystemImages.Etcd, } for k, v := range serviceConfigDefaultsMap { setDefaultIfEmpty(k, v) @@ -204,6 +220,8 @@ func (c *Cluster) setClusterImageDefaults() { &c.SystemImages.DNSmasq: DefaultDNSmasqImage, &c.SystemImages.KubeDNSAutoscaler: DefaultKubeDNSAutoScalerImage, &c.SystemImages.KubernetesServicesSidecar: DefaultKubernetesServicesSidecarImage, + &c.SystemImages.Etcd: DefaultEtcdImage, + &c.SystemImages.Kubernetes: DefaultK8sImage, } for k, v := range systemImagesDefaultsMap { setDefaultIfEmpty(k, v)