From b40018da7b68fb6dc0a8f28706650abb8e444767 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Tue, 11 Dec 2018 12:23:32 +0200 Subject: [PATCH] kubeadm: simplify minimum Kubernetes version bumps Replaced hardcoded "v0.12.0" strings with MinimumControlPlaneVersion and MinimumKubeletVersion global variables. This should help with a regular release version bumps. --- cmd/kubeadm/app/cmd/alpha/kubelet.go | 14 ++-- cmd/kubeadm/app/cmd/config_test.go | 14 ++-- cmd/kubeadm/app/cmd/token_test.go | 3 +- cmd/kubeadm/app/features/BUILD | 2 +- cmd/kubeadm/app/features/features_test.go | 8 +- cmd/kubeadm/app/phases/addons/proxy/BUILD | 1 + .../app/phases/addons/proxy/proxy_test.go | 3 +- .../app/phases/controlplane/manifests_test.go | 26 ++++--- .../app/phases/upgrade/compute_test.go | 44 +++++------ cmd/kubeadm/app/phases/upgrade/policy_test.go | 73 ++++++++++--------- .../app/phases/upgrade/staticpods_test.go | 2 +- cmd/kubeadm/app/preflight/BUILD | 1 + cmd/kubeadm/app/preflight/checks_test.go | 15 ++-- cmd/kubeadm/app/util/config/cluster_test.go | 2 +- cmd/kubeadm/test/cmd/init_test.go | 2 +- cmd/kubeadm/test/util.go | 7 +- 16 files changed, 114 insertions(+), 103 deletions(-) diff --git a/cmd/kubeadm/app/cmd/alpha/kubelet.go b/cmd/kubeadm/app/cmd/alpha/kubelet.go index 8ab3575ad99..9971abe0dfa 100644 --- a/cmd/kubeadm/app/cmd/alpha/kubelet.go +++ b/cmd/kubeadm/app/cmd/alpha/kubelet.go @@ -17,6 +17,8 @@ limitations under the License. package alpha import ( + "fmt" + "github.com/pkg/errors" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/util/version" @@ -38,13 +40,13 @@ var ( "kubelet --version" or respects the --kubelet-version parameter. ` + cmdutil.AlphaDisclaimer) - kubeletConfigDownloadExample = normalizer.Examples(` + kubeletConfigDownloadExample = normalizer.Examples(fmt.Sprintf(` # Downloads the kubelet configuration from the ConfigMap in the cluster. Autodetects the kubelet version. kubeadm alpha phase kubelet config download # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. - kubeadm alpha phase kubelet config download --kubelet-version v1.12.0 - `) + kubeadm alpha phase kubelet config download --kubelet-version %s + `, constants.MinimumKubeletVersion)) kubeletConfigEnableDynamicLongDesc = normalizer.LongDesc(` Enables or updates dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster, @@ -55,13 +57,13 @@ var ( ` + cmdutil.AlphaDisclaimer) - kubeletConfigEnableDynamicExample = normalizer.Examples(` + kubeletConfigEnableDynamicExample = normalizer.Examples(fmt.Sprintf(` # Enables dynamic kubelet configuration for a Node. - kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0 + kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version %s WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it may have surprising side-effects at this stage. - `) + `, constants.MinimumKubeletVersion)) ) // newCmdKubeletUtility returns command for `kubeadm phase kubelet` diff --git a/cmd/kubeadm/app/cmd/config_test.go b/cmd/kubeadm/app/cmd/config_test.go index a9bffee2b71..0a7a9f8fc2e 100644 --- a/cmd/kubeadm/app/cmd/config_test.go +++ b/cmd/kubeadm/app/cmd/config_test.go @@ -18,6 +18,7 @@ package cmd import ( "bytes" + "fmt" "io" "io/ioutil" "os" @@ -41,11 +42,12 @@ import ( const ( defaultNumberOfImages = 8 - // dummyKubernetesVersion is just used for unit testing, in order to not make - // kubeadm lookup dl.k8s.io to resolve what the latest stable release is - dummyKubernetesVersion = "v1.12.0" ) +// dummyKubernetesVersion is just used for unit testing, in order to not make +// kubeadm lookup dl.k8s.io to resolve what the latest stable release is +var dummyKubernetesVersion = constants.MinimumControlPlaneVersion.String() + func TestNewCmdConfigImagesList(t *testing.T) { var output bytes.Buffer mockK8sVersion := dummyKubernetesVersion @@ -83,11 +85,11 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { expectedImageSubstrings: []string{ "coredns", }, - configContents: []byte(dedent.Dedent(` + configContents: []byte(dedent.Dedent(fmt.Sprintf(` apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration - kubernetesVersion: v1.12.0 - `)), + kubernetesVersion: %s + `, constants.MinimumControlPlaneVersion))), }, } diff --git a/cmd/kubeadm/app/cmd/token_test.go b/cmd/kubeadm/app/cmd/token_test.go index 8de0595a6c9..28a55900d3d 100644 --- a/cmd/kubeadm/app/cmd/token_test.go +++ b/cmd/kubeadm/app/cmd/token_test.go @@ -32,6 +32,7 @@ import ( core "k8s.io/client-go/testing" "k8s.io/client-go/tools/clientcmd" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) const ( @@ -175,7 +176,7 @@ func TestRunCreateToken(t *testing.T) { ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{ // KubernetesVersion is not used, but we set this explicitly to avoid // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig - KubernetesVersion: "v1.12.0", + KubernetesVersion: constants.MinimumControlPlaneVersion.String(), }, BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{ { diff --git a/cmd/kubeadm/app/features/BUILD b/cmd/kubeadm/app/features/BUILD index e02ece2dd8b..f51ca8da81b 100644 --- a/cmd/kubeadm/app/features/BUILD +++ b/cmd/kubeadm/app/features/BUILD @@ -35,7 +35,7 @@ go_test( srcs = ["features_test.go"], embed = [":go_default_library"], deps = [ - "//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library", + "//cmd/kubeadm/app/constants:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/cmd/kubeadm/app/features/features_test.go b/cmd/kubeadm/app/features/features_test.go index e0679eabc93..0c01055e091 100644 --- a/cmd/kubeadm/app/features/features_test.go +++ b/cmd/kubeadm/app/features/features_test.go @@ -20,12 +20,10 @@ import ( "reflect" "testing" - "k8s.io/apimachinery/pkg/util/version" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) -var TestMinVersion = version.MustParseSemantic("v1.12.0-alpha.1") - func TestKnownFeatures(t *testing.T) { var someFeatures = FeatureList{ "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}}, @@ -130,7 +128,7 @@ func TestNewFeatureGate(t *testing.T) { func TestValidateVersion(t *testing.T) { var someFeatures = FeatureList{ "feature1": {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}}, - "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: TestMinVersion}, + "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.1")}, } var tests = []struct { @@ -144,7 +142,7 @@ func TestValidateVersion(t *testing.T) { }, { //min version but correct value given requestedFeatures: map[string]bool{"feature2": true}, - requestedVersion: "v1.12.0", + requestedVersion: constants.MinimumControlPlaneVersion.String(), expectedError: false, }, { //min version and incorrect value given diff --git a/cmd/kubeadm/app/phases/addons/proxy/BUILD b/cmd/kubeadm/app/phases/addons/proxy/BUILD index 9e7b581f79e..455ffc16b82 100644 --- a/cmd/kubeadm/app/phases/addons/proxy/BUILD +++ b/cmd/kubeadm/app/phases/addons/proxy/BUILD @@ -12,6 +12,7 @@ go_test( embed = [":go_default_library"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", + "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/config:go_default_library", "//pkg/apis/core:go_default_library", diff --git a/cmd/kubeadm/app/phases/addons/proxy/proxy_test.go b/cmd/kubeadm/app/phases/addons/proxy/proxy_test.go index 2f3dc32d16c..10fe642eb06 100644 --- a/cmd/kubeadm/app/phases/addons/proxy/proxy_test.go +++ b/cmd/kubeadm/app/phases/addons/proxy/proxy_test.go @@ -27,6 +27,7 @@ import ( clientsetfake "k8s.io/client-go/kubernetes/fake" core "k8s.io/client-go/testing" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" api "k8s.io/kubernetes/pkg/apis/core" @@ -183,7 +184,7 @@ func TestEnsureProxyAddon(t *testing.T) { PodSubnet: "5.6.7.8/24", }, ImageRepository: "someRepo", - KubernetesVersion: "v1.12.0", + KubernetesVersion: constants.MinimumControlPlaneVersion.String(), }, } diff --git a/cmd/kubeadm/app/phases/controlplane/manifests_test.go b/cmd/kubeadm/app/phases/controlplane/manifests_test.go index fa45da80194..31375b01095 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -40,6 +40,8 @@ const ( etcdDataDir = "/var/lib/etcd" ) +var cpVersion = kubeadmconstants.MinimumControlPlaneVersion.WithPreRelease("beta.2").String() + func TestGetStaticPodSpecs(t *testing.T) { // Creates a Master Configuration @@ -574,10 +576,10 @@ func TestGetControllerManagerCommand(t *testing.T) { expected []string }{ { - name: "custom certs dir for v1.12.0-beta.2", + name: "custom certs dir for " + cpVersion, cfg: &kubeadmapi.ClusterConfiguration{ CertificatesDir: testCertsDir, - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, }, expected: []string{ "kube-controller-manager", @@ -597,11 +599,11 @@ func TestGetControllerManagerCommand(t *testing.T) { }, }, { - name: "custom cluster-cidr for v1.12.0-beta.2", + name: "custom cluster-cidr for " + cpVersion, cfg: &kubeadmapi.ClusterConfiguration{ Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"}, CertificatesDir: testCertsDir, - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, }, expected: []string{ "kube-controller-manager", @@ -624,14 +626,14 @@ func TestGetControllerManagerCommand(t *testing.T) { }, }, { - name: "custom extra-args for v1.12.0-beta.2", + name: "custom extra-args for " + cpVersion, cfg: &kubeadmapi.ClusterConfiguration{ Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"}, ControllerManager: kubeadmapi.ControlPlaneComponent{ ExtraArgs: map[string]string{"node-cidr-mask-size": "20"}, }, CertificatesDir: testCertsDir, - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, }, expected: []string{ "kube-controller-manager", @@ -654,11 +656,11 @@ func TestGetControllerManagerCommand(t *testing.T) { }, }, { - name: "custom IPv6 networking for v1.12.0-beta.2", + name: "custom IPv6 networking for " + cpVersion, cfg: &kubeadmapi.ClusterConfiguration{ Networking: kubeadmapi.Networking{PodSubnet: "2001:db8::/64"}, CertificatesDir: testCertsDir, - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, }, expected: []string{ "kube-controller-manager", @@ -872,11 +874,11 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) { expectedArgFunc func(dir string) []string }{ { - name: "caKeyPresent-false for v1.12.0-beta.2", + name: "caKeyPresent-false for " + cpVersion, cfg: &kubeadmapi.InitConfiguration{ LocalAPIEndpoint: kubeadmapi.APIEndpoint{AdvertiseAddress: "1.2.3.4"}, ClusterConfiguration: kubeadmapi.ClusterConfiguration{ - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, }, }, @@ -901,11 +903,11 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) { }, }, { - name: "caKeyPresent true for v1.12.0-beta.2", + name: "caKeyPresent true for " + cpVersion, cfg: &kubeadmapi.InitConfiguration{ LocalAPIEndpoint: kubeadmapi.APIEndpoint{AdvertiseAddress: "1.2.3.4"}, ClusterConfiguration: kubeadmapi.ClusterConfiguration{ - KubernetesVersion: "v1.12.0-beta.2", + KubernetesVersion: cpVersion, Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"}, }, }, diff --git a/cmd/kubeadm/app/phases/upgrade/compute_test.go b/cmd/kubeadm/app/phases/upgrade/compute_test.go index a84f0c60f4a..73bd658172d 100644 --- a/cmd/kubeadm/app/phases/upgrade/compute_test.go +++ b/cmd/kubeadm/app/phases/upgrade/compute_test.go @@ -429,7 +429,7 @@ func TestGetAvailableUpgrades(t *testing.T) { stablePatchVersion: "v1.10.5", stableVersion: "v1.10.5", latestDevBranchVersion: "v1.11.0-beta.1", - latestVersion: "v1.12.0-alpha.0", + latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.0").String(), }, beforeDNSType: kubeadmapi.CoreDNS, beforeDNSVersion: "1.0.6", @@ -470,7 +470,7 @@ func TestGetAvailableUpgrades(t *testing.T) { stablePatchVersion: "v1.10.5", stableVersion: "v1.10.5", latestDevBranchVersion: "v1.11.0-rc.1", - latestVersion: "v1.12.0-alpha.1", + latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.1").String(), }, beforeDNSType: kubeadmapi.CoreDNS, beforeDNSVersion: "1.0.6", @@ -511,7 +511,7 @@ func TestGetAvailableUpgrades(t *testing.T) { stablePatchVersion: "v1.10.5", stableVersion: "v1.10.5", latestDevBranchVersion: "v1.11.6-rc.1", - latestVersion: "v1.12.1-alpha.0", + latestVersion: constants.MinimumControlPlaneVersion.WithPatch(1).WithPreRelease("alpha.0").String(), }, beforeDNSType: kubeadmapi.CoreDNS, beforeDNSVersion: "1.0.6", @@ -552,7 +552,7 @@ func TestGetAvailableUpgrades(t *testing.T) { stablePatchVersion: "v1.10.5", stableVersion: "v1.10.5", latestDevBranchVersion: "v1.11.0-rc.1", - latestVersion: "v1.12.0-alpha.2", + latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(), }, beforeDNSType: kubeadmapi.CoreDNS, beforeDNSVersion: "1.0.6", @@ -591,8 +591,8 @@ func TestGetAvailableUpgrades(t *testing.T) { EtcdVersion: "3.1.12", }, After: ClusterState{ - KubeVersion: "v1.12.0-alpha.2", - KubeadmVersion: "v1.12.0-alpha.2", + KubeVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(), + KubeadmVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(), DNSType: kubeadmapi.CoreDNS, DNSVersion: "1.2.6", EtcdVersion: "3.2.24", @@ -625,7 +625,7 @@ func TestGetAvailableUpgrades(t *testing.T) { clusterVersion: "v1.11.1", kubeletVersion: "v1.11.0", kubeadmVersion: "v1.11.1", - }, "v1.12.1"), + }, constants.MinimumControlPlaneVersion.WithPatch(1).String()), etcdClient: etcdClient, beforeDNSType: kubeadmapi.CoreDNS, beforeDNSVersion: "1.0.6", @@ -644,8 +644,8 @@ func TestGetAvailableUpgrades(t *testing.T) { EtcdVersion: "3.1.12", }, After: ClusterState{ - KubeVersion: "v1.12.1", - KubeadmVersion: "v1.12.1", + KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), + KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(), DNSType: kubeadmapi.CoreDNS, DNSVersion: "1.2.6", EtcdVersion: "3.2.24", @@ -658,10 +658,10 @@ func TestGetAvailableUpgrades(t *testing.T) { vg: &fakeVersionGetter{ clusterVersion: "v1.11.2", kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane - kubeadmVersion: "v1.12.0", + kubeadmVersion: constants.MinimumControlPlaneVersion.String(), - stablePatchVersion: "v1.12.0", - stableVersion: "v1.12.0", + stablePatchVersion: constants.MinimumControlPlaneVersion.String(), + stableVersion: constants.MinimumControlPlaneVersion.String(), }, etcdClient: etcdClient, beforeDNSType: kubeadmapi.KubeDNS, @@ -675,14 +675,14 @@ func TestGetAvailableUpgrades(t *testing.T) { KubeletVersions: map[string]uint16{ "v1.11.2": 1, }, - KubeadmVersion: "v1.12.0", + KubeadmVersion: constants.MinimumControlPlaneVersion.String(), DNSType: kubeadmapi.KubeDNS, DNSVersion: "1.14.7", EtcdVersion: "3.1.12", }, After: ClusterState{ - KubeVersion: "v1.12.0", - KubeadmVersion: "v1.12.0", + KubeVersion: constants.MinimumControlPlaneVersion.String(), + KubeadmVersion: constants.MinimumControlPlaneVersion.String(), DNSType: kubeadmapi.CoreDNS, DNSVersion: "1.2.6", EtcdVersion: "3.2.24", @@ -695,10 +695,10 @@ func TestGetAvailableUpgrades(t *testing.T) { vg: &fakeVersionGetter{ clusterVersion: "v1.11.2", kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane - kubeadmVersion: "v1.12.0", + kubeadmVersion: constants.MinimumControlPlaneVersion.String(), - stablePatchVersion: "v1.12.0", - stableVersion: "v1.12.0", + stablePatchVersion: constants.MinimumControlPlaneVersion.String(), + stableVersion: constants.MinimumControlPlaneVersion.String(), }, etcdClient: etcdClient, beforeDNSType: kubeadmapi.KubeDNS, @@ -712,14 +712,14 @@ func TestGetAvailableUpgrades(t *testing.T) { KubeletVersions: map[string]uint16{ "v1.11.2": 1, }, - KubeadmVersion: "v1.12.0", + KubeadmVersion: constants.MinimumControlPlaneVersion.String(), DNSType: kubeadmapi.KubeDNS, DNSVersion: "1.14.7", EtcdVersion: "3.1.12", }, After: ClusterState{ - KubeVersion: "v1.12.0", - KubeadmVersion: "v1.12.0", + KubeVersion: constants.MinimumControlPlaneVersion.String(), + KubeadmVersion: constants.MinimumControlPlaneVersion.String(), DNSType: kubeadmapi.KubeDNS, DNSVersion: "1.14.13", EtcdVersion: "3.2.24", @@ -860,7 +860,7 @@ func TestGetBranchFromVersion(t *testing.T) { expectedVersion: "1.9", }, { - version: "v1.12.5", + version: constants.MinimumControlPlaneVersion.WithPatch(5).String(), expectedVersion: "1.12", }, { diff --git a/cmd/kubeadm/app/phases/upgrade/policy_test.go b/cmd/kubeadm/app/phases/upgrade/policy_test.go index 5808353c705..8258583aa59 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy_test.go +++ b/cmd/kubeadm/app/phases/upgrade/policy_test.go @@ -20,6 +20,7 @@ import ( "testing" "k8s.io/apimachinery/pkg/util/version" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) func TestEnforceVersionPolicies(t *testing.T) { @@ -34,17 +35,17 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "minor upgrade", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", - kubeadmVersion: "v1.12.5", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), }, - newK8sVersion: "v1.12.5", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), }, { name: "major upgrade", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.2", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), kubeadmVersion: "v1.13.1", }, newK8sVersion: "v1.13.0", @@ -52,20 +53,20 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "downgrade", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", - kubeadmVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), }, - newK8sVersion: "v1.12.2", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(), }, { name: "same version upgrade", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", - kubeadmVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), }, - newK8sVersion: "v1.12.3", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), }, { name: "new version must be higher than v1.10.0", @@ -96,26 +97,26 @@ func TestEnforceVersionPolicies(t *testing.T) { kubeletVersion: "v1.14.3", kubeadmVersion: "v1.14.0", }, - newK8sVersion: "v1.12.3", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), expectedMandatoryErrs: 1, // can't downgrade two minor versions expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm }, { name: "kubeadm version must be higher than the new kube version. However, patch version skews may be forced", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", - kubeadmVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), }, - newK8sVersion: "v1.12.5", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(), expectedSkippableErrs: 1, }, { name: "kubeadm version must be higher than the new kube version. Trying to upgrade k8s to a higher minor version than kubeadm itself should never be supported", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", - kubeadmVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), + kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), }, newK8sVersion: "v1.13.0", expectedMandatoryErrs: 1, @@ -123,7 +124,7 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "the maximum skew between the cluster version and the kubelet versions should be one minor version. This may be forced through though.", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), kubeletVersion: "v1.11.8", kubeadmVersion: "v1.13.0", }, @@ -133,8 +134,8 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "experimental upgrades supported if the flag is set", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0-beta.1", }, newK8sVersion: "v1.13.0-beta.1", @@ -143,8 +144,8 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "release candidate upgrades supported if the flag is set", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0-rc.1", }, newK8sVersion: "v1.13.0-rc.1", @@ -153,8 +154,8 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "release candidate upgrades supported if the flag is set", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0-rc.1", }, newK8sVersion: "v1.13.0-rc.1", @@ -163,8 +164,8 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "the user should not be able to upgrade to an experimental version if they haven't opted into that", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0-beta.1", }, newK8sVersion: "v1.13.0-beta.1", @@ -174,8 +175,8 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0-rc.1", }, newK8sVersion: "v1.13.0-rc.1", @@ -184,11 +185,11 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.3", - kubeletVersion: "v1.12.3", + clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), + kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(), kubeadmVersion: "v1.13.0", }, - newK8sVersion: "v1.12.6", + newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(6).String(), expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm }, } diff --git a/cmd/kubeadm/app/phases/upgrade/staticpods_test.go b/cmd/kubeadm/app/phases/upgrade/staticpods_test.go index e246697bcc1..00f5772bead 100644 --- a/cmd/kubeadm/app/phases/upgrade/staticpods_test.go +++ b/cmd/kubeadm/app/phases/upgrade/staticpods_test.go @@ -431,7 +431,7 @@ func TestStaticPodControlPlane(t *testing.T) { } defer os.RemoveAll(tmpEtcdDataDir) - oldcfg, err := getConfig("v1.12.0", tempCertsDir, tmpEtcdDataDir) + oldcfg, err := getConfig(constants.MinimumControlPlaneVersion.String(), tempCertsDir, tmpEtcdDataDir) if err != nil { t.Fatalf("couldn't create config: %v", err) } diff --git a/cmd/kubeadm/app/preflight/BUILD b/cmd/kubeadm/app/preflight/BUILD index 0c248791a57..39578e47cdc 100644 --- a/cmd/kubeadm/app/preflight/BUILD +++ b/cmd/kubeadm/app/preflight/BUILD @@ -46,6 +46,7 @@ go_test( deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", + "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/github.com/pkg/errors:go_default_library", diff --git a/cmd/kubeadm/app/preflight/checks_test.go b/cmd/kubeadm/app/preflight/checks_test.go index 8d1b3d881f3..7745babc236 100644 --- a/cmd/kubeadm/app/preflight/checks_test.go +++ b/cmd/kubeadm/app/preflight/checks_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" "k8s.io/utils/exec" fakeexec "k8s.io/utils/exec/testing" @@ -647,13 +648,13 @@ func TestKubeletVersionCheck(t *testing.T) { expectErrors bool expectWarnings bool }{ - {"v1.13.2", "", false, false}, // check minimally supported version when there is no information about control plane - {"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail. - {"v1.12.0", "v1.12.5", false, false}, // kubelet within same major.minor as control plane - {"v1.12.5", "v1.12.1", false, false}, // kubelet is newer, but still within same major.minor as control plane - {"v1.12.0", "v1.13.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported - {"v1.13.0-alpha.1", "v1.12.1", true, false}, // kubelet is newer (development build) than control plane, should fail. - {"v1.13.0", "v1.12.5", true, false}, // kubelet is newer (release) than control plane, should fail. + {"v1.13.2", "", false, false}, // check minimally supported version when there is no information about control plane + {"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail. + {"v" + constants.MinimumKubeletVersion.String(), constants.MinimumControlPlaneVersion.WithPatch(5).String(), false, false}, // kubelet within same major.minor as control plane + {"v" + constants.MinimumKubeletVersion.WithPatch(5).String(), constants.MinimumControlPlaneVersion.WithPatch(1).String(), false, false}, // kubelet is newer, but still within same major.minor as control plane + {"v" + constants.MinimumKubeletVersion.String(), "v1.13.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported + {"v1.13.0-alpha.1", constants.MinimumControlPlaneVersion.WithPatch(1).String(), true, false}, // kubelet is newer (development build) than control plane, should fail. + {"v1.13.0", constants.MinimumControlPlaneVersion.WithPatch(5).String(), true, false}, // kubelet is newer (release) than control plane, should fail. } for _, tc := range cases { diff --git a/cmd/kubeadm/app/util/config/cluster_test.go b/cmd/kubeadm/app/util/config/cluster_test.go index 5605ca6046a..1fcc7c72c58 100644 --- a/cmd/kubeadm/app/util/config/cluster_test.go +++ b/cmd/kubeadm/app/util/config/cluster_test.go @@ -34,7 +34,7 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" ) -var k8sVersionString = "v1.12.0" +var k8sVersionString = kubeadmconstants.MinimumControlPlaneVersion.String() var k8sVersion = version.MustParseGeneric(k8sVersionString) var nodeName = "mynode" var cfgFiles = map[string][]byte{ diff --git a/cmd/kubeadm/test/cmd/init_test.go b/cmd/kubeadm/test/cmd/init_test.go index 282ec83527b..ea91829402f 100644 --- a/cmd/kubeadm/test/cmd/init_test.go +++ b/cmd/kubeadm/test/cmd/init_test.go @@ -102,7 +102,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) { }, { name: "valid version is accepted", - args: "--kubernetes-version=1.12.0", + args: "--kubernetes-version=1.13.0", expected: true, }, } diff --git a/cmd/kubeadm/test/util.go b/cmd/kubeadm/test/util.go index e54dde58575..0bbe47a53f5 100644 --- a/cmd/kubeadm/test/util.go +++ b/cmd/kubeadm/test/util.go @@ -17,6 +17,7 @@ limitations under the License. package test import ( + "fmt" "html/template" "io/ioutil" "os" @@ -54,7 +55,7 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini t.Fatalf("Couldn't create cfgDir") } - cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(` + cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(fmt.Sprintf(` apiVersion: kubeadm.k8s.io/v1beta1 kind: InitConfiguration apiEndpoint: @@ -66,8 +67,8 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration certificatesDir: {{.CertificatesDir}} - kubernetesVersion: v1.12.0 - `))) + kubernetesVersion: %s + `, kubeadmconstants.MinimumControlPlaneVersion)))) f, err := os.Create(cfgPath) if err != nil {