Update kubeadm's minimum supported kubernetes in v1.11.x to 1.10
This commit is contained in:
@@ -62,12 +62,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
|
|||||||
name: "set k8s version",
|
name: "set k8s version",
|
||||||
expectedImageCount: defaultNumberOfImages,
|
expectedImageCount: defaultNumberOfImages,
|
||||||
expectedImageSubstrings: []string{
|
expectedImageSubstrings: []string{
|
||||||
":v1.9.1",
|
":v1.10.1",
|
||||||
},
|
},
|
||||||
configContents: []byte(dedent.Dedent(`
|
configContents: []byte(dedent.Dedent(`
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
apiVersion: kubeadm.k8s.io/v1alpha1
|
||||||
kind: MasterConfiguration
|
kind: MasterConfiguration
|
||||||
kubernetesVersion: 1.9.1
|
kubernetesVersion: 1.10.1
|
||||||
`)),
|
`)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -31,7 +31,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// phaseTestK8sVersion is a fake kubernetes version to use when testing
|
// phaseTestK8sVersion is a fake kubernetes version to use when testing
|
||||||
const phaseTestK8sVersion = "v1.9.0"
|
const phaseTestK8sVersion = "v1.10.0"
|
||||||
|
|
||||||
func TestCertsSubCommandsHasFlags(t *testing.T) {
|
func TestCertsSubCommandsHasFlags(t *testing.T) {
|
||||||
|
|
||||||
|
@@ -90,7 +90,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
|||||||
{
|
{
|
||||||
command: "all",
|
command: "all",
|
||||||
additionalFlags: []string{
|
additionalFlags: []string{
|
||||||
"--kubernetes-version=v1.9.0",
|
"--kubernetes-version=v1.10.0",
|
||||||
"--apiserver-advertise-address=1.2.3.4",
|
"--apiserver-advertise-address=1.2.3.4",
|
||||||
"--apiserver-bind-port=6443",
|
"--apiserver-bind-port=6443",
|
||||||
"--service-cidr=1.2.3.4/16",
|
"--service-cidr=1.2.3.4/16",
|
||||||
@@ -105,7 +105,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
|||||||
{
|
{
|
||||||
command: "apiserver",
|
command: "apiserver",
|
||||||
additionalFlags: []string{
|
additionalFlags: []string{
|
||||||
"--kubernetes-version=v1.9.0",
|
"--kubernetes-version=v1.10.0",
|
||||||
"--apiserver-advertise-address=1.2.3.4",
|
"--apiserver-advertise-address=1.2.3.4",
|
||||||
"--apiserver-bind-port=6443",
|
"--apiserver-bind-port=6443",
|
||||||
"--service-cidr=1.2.3.4/16",
|
"--service-cidr=1.2.3.4/16",
|
||||||
@@ -115,7 +115,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
|||||||
{
|
{
|
||||||
command: "controller-manager",
|
command: "controller-manager",
|
||||||
additionalFlags: []string{
|
additionalFlags: []string{
|
||||||
"--kubernetes-version=v1.9.0",
|
"--kubernetes-version=v1.10.0",
|
||||||
"--pod-network-cidr=1.2.3.4/16",
|
"--pod-network-cidr=1.2.3.4/16",
|
||||||
},
|
},
|
||||||
expectedFiles: []string{"kube-controller-manager.yaml"},
|
expectedFiles: []string{"kube-controller-manager.yaml"},
|
||||||
@@ -123,7 +123,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
|||||||
{
|
{
|
||||||
command: "scheduler",
|
command: "scheduler",
|
||||||
additionalFlags: []string{
|
additionalFlags: []string{
|
||||||
"--kubernetes-version=v1.9.0",
|
"--kubernetes-version=v1.10.0",
|
||||||
},
|
},
|
||||||
expectedFiles: []string{"kube-scheduler.yaml"},
|
expectedFiles: []string{"kube-scheduler.yaml"},
|
||||||
},
|
},
|
||||||
|
@@ -184,7 +184,7 @@ func TestRunCreateToken(t *testing.T) {
|
|||||||
|
|
||||||
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
|
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
|
||||||
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
|
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
|
||||||
KubernetesVersion: "v1.9.0",
|
KubernetesVersion: "v1.10.0",
|
||||||
Token: tc.token,
|
Token: tc.token,
|
||||||
TokenTTL: &metav1.Duration{Duration: 0},
|
TokenTTL: &metav1.Duration{Duration: 0},
|
||||||
TokenUsages: tc.usages,
|
TokenUsages: tc.usages,
|
||||||
|
@@ -285,10 +285,10 @@ var (
|
|||||||
MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler}
|
MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler}
|
||||||
|
|
||||||
// MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy
|
// MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy
|
||||||
MinimumControlPlaneVersion = version.MustParseSemantic("v1.9.0")
|
MinimumControlPlaneVersion = version.MustParseSemantic("v1.10.0")
|
||||||
|
|
||||||
// MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports
|
// MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports
|
||||||
MinimumKubeletVersion = version.MustParseSemantic("v1.9.0")
|
MinimumKubeletVersion = version.MustParseSemantic("v1.10.0")
|
||||||
|
|
||||||
// SupportedEtcdVersion lists officially supported etcd versions with corresponding kubernetes releases
|
// SupportedEtcdVersion lists officially supported etcd versions with corresponding kubernetes releases
|
||||||
SupportedEtcdVersion = map[uint8]string{
|
SupportedEtcdVersion = map[uint8]string{
|
||||||
|
@@ -197,7 +197,7 @@ func TestEnsureProxyAddon(t *testing.T) {
|
|||||||
PodSubnet: "5.6.7.8/24",
|
PodSubnet: "5.6.7.8/24",
|
||||||
},
|
},
|
||||||
ImageRepository: "someRepo",
|
ImageRepository: "someRepo",
|
||||||
KubernetesVersion: "v1.9.0",
|
KubernetesVersion: "v1.10.0",
|
||||||
UnifiedControlPlaneImage: "someImage",
|
UnifiedControlPlaneImage: "someImage",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,159 +34,159 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "minor upgrade",
|
name: "minor upgrade",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.5",
|
kubeadmVersion: "v1.10.5",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.5",
|
newK8sVersion: "v1.10.5",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "major upgrade",
|
name: "major upgrade",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.2",
|
kubeletVersion: "v1.10.2",
|
||||||
kubeadmVersion: "v1.10.1",
|
kubeadmVersion: "v1.11.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0",
|
newK8sVersion: "v1.11.0",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "downgrade",
|
name: "downgrade",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.3",
|
kubeadmVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.2",
|
newK8sVersion: "v1.10.2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "same version upgrade",
|
name: "same version upgrade",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.3",
|
kubeadmVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.3",
|
newK8sVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "new version must be higher than v1.9.0",
|
name: "new version must be higher than v1.10.0",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.3",
|
kubeadmVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.8.10",
|
newK8sVersion: "v1.9.10",
|
||||||
expectedMandatoryErrs: 2, // version must be higher than v1.9.0, can't upgrade old k8s with newer kubeadm
|
expectedMandatoryErrs: 2, // version must be higher than v1.10.0, can't upgrade old k8s with newer kubeadm
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "upgrading two minor versions in one go is not supported",
|
name: "upgrading two minor versions in one go is not supported",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.11.0",
|
kubeadmVersion: "v1.12.0",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.11.0",
|
newK8sVersion: "v1.12.0",
|
||||||
expectedMandatoryErrs: 1, // can't upgrade two minor versions
|
expectedMandatoryErrs: 1, // can't upgrade two minor versions
|
||||||
expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large
|
expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "downgrading two minor versions in one go is not supported",
|
name: "downgrading two minor versions in one go is not supported",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.11.3",
|
clusterVersion: "v1.12.3",
|
||||||
kubeletVersion: "v1.11.3",
|
kubeletVersion: "v1.12.3",
|
||||||
kubeadmVersion: "v1.11.0",
|
kubeadmVersion: "v1.12.0",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.3",
|
newK8sVersion: "v1.10.3",
|
||||||
expectedMandatoryErrs: 2, // can't downgrade two minor versions, can't upgrade old k8s with newer kubeadm
|
expectedMandatoryErrs: 2, // can't downgrade two minor versions, 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",
|
name: "kubeadm version must be higher than the new kube version. However, patch version skews may be forced",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.3",
|
kubeadmVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.5",
|
newK8sVersion: "v1.10.5",
|
||||||
expectedSkippableErrs: 1,
|
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",
|
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{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.9.3",
|
kubeadmVersion: "v1.10.3",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0",
|
newK8sVersion: "v1.11.0",
|
||||||
expectedMandatoryErrs: 1,
|
expectedMandatoryErrs: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "the maximum skew between the cluster version and the kubelet versions should be one minor version. This may be forced through though.",
|
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{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.8.8",
|
kubeletVersion: "v1.9.8",
|
||||||
kubeadmVersion: "v1.10.0",
|
kubeadmVersion: "v1.11.0",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0",
|
newK8sVersion: "v1.11.0",
|
||||||
expectedSkippableErrs: 1,
|
expectedSkippableErrs: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "experimental upgrades supported if the flag is set",
|
name: "experimental upgrades supported if the flag is set",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0-beta.1",
|
kubeadmVersion: "v1.11.0-beta.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0-beta.1",
|
newK8sVersion: "v1.11.0-beta.1",
|
||||||
allowExperimental: true,
|
allowExperimental: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "release candidate upgrades supported if the flag is set",
|
name: "release candidate upgrades supported if the flag is set",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0-rc.1",
|
kubeadmVersion: "v1.11.0-rc.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0-rc.1",
|
newK8sVersion: "v1.11.0-rc.1",
|
||||||
allowRCs: true,
|
allowRCs: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "release candidate upgrades supported if the flag is set",
|
name: "release candidate upgrades supported if the flag is set",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0-rc.1",
|
kubeadmVersion: "v1.11.0-rc.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0-rc.1",
|
newK8sVersion: "v1.11.0-rc.1",
|
||||||
allowExperimental: true,
|
allowExperimental: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "the user should not be able to upgrade to an experimental version if they haven't opted into that",
|
name: "the user should not be able to upgrade to an experimental version if they haven't opted into that",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0-beta.1",
|
kubeadmVersion: "v1.11.0-beta.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0-beta.1",
|
newK8sVersion: "v1.11.0-beta.1",
|
||||||
allowRCs: true,
|
allowRCs: true,
|
||||||
expectedSkippableErrs: 1,
|
expectedSkippableErrs: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that",
|
name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0-rc.1",
|
kubeadmVersion: "v1.11.0-rc.1",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.10.0-rc.1",
|
newK8sVersion: "v1.11.0-rc.1",
|
||||||
expectedSkippableErrs: 1,
|
expectedSkippableErrs: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm",
|
name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm",
|
||||||
vg: &fakeVersionGetter{
|
vg: &fakeVersionGetter{
|
||||||
clusterVersion: "v1.9.3",
|
clusterVersion: "v1.10.3",
|
||||||
kubeletVersion: "v1.9.3",
|
kubeletVersion: "v1.10.3",
|
||||||
kubeadmVersion: "v1.10.0",
|
kubeadmVersion: "v1.11.0",
|
||||||
},
|
},
|
||||||
newK8sVersion: "v1.9.6",
|
newK8sVersion: "v1.10.6",
|
||||||
expectedMandatoryErrs: 1, // can't upgrade old k8s with newer kubeadm
|
expectedMandatoryErrs: 1, // can't upgrade old k8s with newer kubeadm
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -627,13 +627,13 @@ func TestKubeletVersionCheck(t *testing.T) {
|
|||||||
expectErrors bool
|
expectErrors bool
|
||||||
expectWarnings bool
|
expectWarnings bool
|
||||||
}{
|
}{
|
||||||
{"v1.10.2", "", false, false}, // check minimally supported version when there is no information about control plane
|
{"v1.11.2", "", false, false}, // check minimally supported version when there is no information about control plane
|
||||||
{"v1.7.3", "v1.7.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
|
{"v1.8.3", "v1.8.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
|
||||||
{"v1.9.0", "v1.9.5", false, false}, // kubelet within same major.minor as control plane
|
{"v1.10.0", "v1.10.5", false, false}, // kubelet within same major.minor as control plane
|
||||||
{"v1.9.5", "v1.9.1", false, false}, // kubelet is newer, but still within same major.minor as control plane
|
{"v1.10.5", "v1.10.1", false, false}, // kubelet is newer, but still within same major.minor as control plane
|
||||||
{"v1.9.0", "v1.10.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
{"v1.10.0", "v1.11.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
||||||
{"v1.10.0-alpha.1", "v1.9.1", true, false}, // kubelet is newer (development build) than control plane, should fail.
|
{"v1.11.0-alpha.1", "v1.10.1", true, false}, // kubelet is newer (development build) than control plane, should fail.
|
||||||
{"v1.10.0", "v1.9.5", true, false}, // kubelet is newer (release) than control plane, should fail.
|
{"v1.11.0", "v1.10.5", true, false}, // kubelet is newer (release) than control plane, should fail.
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
Reference in New Issue
Block a user