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.
pull/564/head
Ed Bartosh 2018-12-11 12:23:32 +02:00
parent af07603178
commit b40018da7b
16 changed files with 114 additions and 103 deletions

View File

@ -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`

View File

@ -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))),
},
}

View File

@ -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{
{

View File

@ -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",
],
)

View File

@ -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

View File

@ -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",

View File

@ -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(),
},
}

View File

@ -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"},
},
},

View File

@ -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",
},
{

View File

@ -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
},
}

View File

@ -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)
}

View File

@ -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",

View File

@ -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 {

View File

@ -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{

View File

@ -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,
},
}

View File

@ -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 {