Unverified Commit 6c7fb87c authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #63920 from dixudx/kubeadm-support-version

Automatic merge from submit-queue (batch tested with PRs 63920, 63716, 63928, 60553, 63946). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Update kubeadm's minimum supported Kubernetes in v1.11.x to 1.10 **What this PR does / why we need it**: This PR does, * Restricts supported Kubernetes version in 1.11 cycle; * Removes useless v190-specific variables, since the minimum version is v1.10; * Bumps etcd version based on k8s version to 1.10.X => 3.1.12, 1.11.X => 3.2.18, 1.12.X => 3.2.18; **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes kubernetes/kubeadm#815 **Special notes for your reviewer**: /cc kubernetes/sig-cluster-lifecycle-pr-reviews /cc luxas **Release note**: ```release-note Update kubeadm's minimum supported kubernetes in v1.11.x to 1.10 ```
parents f86ec3f7 c3fad6ec
...@@ -62,12 +62,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) { ...@@ -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/v1alpha2 apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration kind: MasterConfiguration
kubernetesVersion: 1.9.1 kubernetesVersion: 1.10.1
`)), `)),
}, },
{ {
......
...@@ -31,7 +31,7 @@ import ( ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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,16 +285,16 @@ var ( ...@@ -285,16 +285,16 @@ 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{
9: "3.1.12",
10: "3.1.12", 10: "3.1.12",
11: "3.2.18", 11: "3.2.18",
12: "3.2.18",
} }
) )
......
...@@ -127,23 +127,23 @@ func TestEtcdSupportedVersion(t *testing.T) { ...@@ -127,23 +127,23 @@ func TestEtcdSupportedVersion(t *testing.T) {
expectedError: fmt.Errorf("Unsupported or unknown kubernetes version(1.99.0)"), expectedError: fmt.Errorf("Unsupported or unknown kubernetes version(1.99.0)"),
}, },
{ {
kubernetesVersion: "1.9.0", kubernetesVersion: "1.10.0",
expectedVersion: version.MustParseSemantic("3.1.12"), expectedVersion: version.MustParseSemantic("3.1.12"),
expectedError: nil, expectedError: nil,
}, },
{ {
kubernetesVersion: "1.9.2", kubernetesVersion: "1.10.2",
expectedVersion: version.MustParseSemantic("3.1.12"), expectedVersion: version.MustParseSemantic("3.1.12"),
expectedError: nil, expectedError: nil,
}, },
{ {
kubernetesVersion: "1.10.0", kubernetesVersion: "1.11.0",
expectedVersion: version.MustParseSemantic("3.1.12"), expectedVersion: version.MustParseSemantic("3.2.18"),
expectedError: nil, expectedError: nil,
}, },
{ {
kubernetesVersion: "1.10.1", kubernetesVersion: "1.12.1",
expectedVersion: version.MustParseSemantic("3.1.12"), expectedVersion: version.MustParseSemantic("3.2.18"),
expectedError: nil, expectedError: nil,
}, },
} }
......
...@@ -46,16 +46,14 @@ const ( ...@@ -46,16 +46,14 @@ const (
Auditing = "Auditing" Auditing = "Auditing"
) )
var v190 = version.MustParseSemantic("v1.9.0-alpha.1")
// InitFeatureGates are the default feature gates for the init command // InitFeatureGates are the default feature gates for the init command
var InitFeatureGates = FeatureList{ var InitFeatureGates = FeatureList{
SelfHosting: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}}, SelfHosting: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
StoreCertsInSecrets: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}}, StoreCertsInSecrets: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
// We don't want to advertise this feature gate exists in v1.9 to avoid confusion as it is not yet working // We don't want to advertise this feature gate exists in v1.9 to avoid confusion as it is not yet working
HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190, HiddenInHelpText: true}, HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, HiddenInHelpText: true},
CoreDNS: {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.GA}, MinimumVersion: v190}, CoreDNS: {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.GA}},
DynamicKubeletConfig: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190}, DynamicKubeletConfig: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
Auditing: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}}, Auditing: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
} }
......
...@@ -121,7 +121,7 @@ func TestNewFeatureGate(t *testing.T) { ...@@ -121,7 +121,7 @@ func TestNewFeatureGate(t *testing.T) {
func TestValidateVersion(t *testing.T) { func TestValidateVersion(t *testing.T) {
var someFeatures = FeatureList{ var someFeatures = FeatureList{
"feature1": {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}}, "feature1": {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}},
"feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: v190}, "feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}},
} }
var tests = []struct { var tests = []struct {
...@@ -133,16 +133,10 @@ func TestValidateVersion(t *testing.T) { ...@@ -133,16 +133,10 @@ func TestValidateVersion(t *testing.T) {
requestedFeatures: map[string]bool{"feature1": true}, requestedFeatures: map[string]bool{"feature1": true},
expectedError: false, expectedError: false,
}, },
{ //min version but correct value given { //no min version
requestedFeatures: map[string]bool{"feature2": true}, requestedFeatures: map[string]bool{"feature2": true},
requestedVersion: "v1.9.0",
expectedError: false, expectedError: false,
}, },
{ //min version and incorrect value given
requestedFeatures: map[string]bool{"feature2": true},
requestedVersion: "v1.8.2",
expectedError: true,
},
} }
for _, test := range tests { for _, test := range tests {
......
...@@ -94,7 +94,7 @@ func TestCompileManifests(t *testing.T) { ...@@ -94,7 +94,7 @@ func TestCompileManifests(t *testing.T) {
expected bool expected bool
}{ }{
{ {
manifest: v180AndAboveKubeDNSDeployment, manifest: KubeDNSDeployment,
data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSProbeAddr, DNSDomain, MasterTaintKey string }{ data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSProbeAddr, DNSDomain, MasterTaintKey string }{
ImageRepository: "foo", ImageRepository: "foo",
Arch: "foo", Arch: "foo",
......
...@@ -17,8 +17,8 @@ limitations under the License. ...@@ -17,8 +17,8 @@ limitations under the License.
package dns package dns
const ( const (
// v180AndAboveKubeDNSDeployment is the kube-dns Deployment manifest for the kube-dns manifest for v1.7+ // KubeDNSDeployment is the kube-dns Deployment manifest for the kube-dns manifest for v1.7+
v180AndAboveKubeDNSDeployment = ` KubeDNSDeployment = `
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
......
...@@ -46,7 +46,7 @@ func GetDNSVersion(kubeVersion *version.Version, dns string) string { ...@@ -46,7 +46,7 @@ func GetDNSVersion(kubeVersion *version.Version, dns string) string {
func GetKubeDNSManifest(kubeVersion *version.Version) string { func GetKubeDNSManifest(kubeVersion *version.Version) string {
// v1.8.0+ has only one known YAML manifest spec, just return that here // v1.8.0+ has only one known YAML manifest spec, just return that here
// In the future when the kube-dns version is bumped at HEAD; add conditional logic to return the right manifest // In the future when the kube-dns version is bumped at HEAD; add conditional logic to return the right manifest
return v180AndAboveKubeDNSDeployment return KubeDNSDeployment
} }
// GetCoreDNSManifest returns the right CoreDNS YAML manifest for a specific k8s version // GetCoreDNSManifest returns the right CoreDNS YAML manifest for a specific k8s version
......
...@@ -197,7 +197,7 @@ func TestEnsureProxyAddon(t *testing.T) { ...@@ -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",
} }
......
...@@ -279,7 +279,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA ...@@ -279,7 +279,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
} }
func getBranchFromVersion(version string) string { func getBranchFromVersion(version string) string {
return strings.TrimPrefix(version, "v")[:3] return strings.TrimPrefix(version, "v")[:4]
} }
func patchVersionBranchExists(clusterVersion, stableVersion *version.Version) bool { func patchVersionBranchExists(clusterVersion, stableVersion *version.Version) bool {
......
...@@ -34,159 +34,159 @@ func TestEnforceVersionPolicies(t *testing.T) { ...@@ -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
}, },
} }
......
...@@ -43,7 +43,6 @@ import ( ...@@ -43,7 +43,6 @@ import (
"k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/pkg/util/version"
) )
var v190alpha3 = version.MustParseSemantic("v1.9.0-alpha.3")
var expiry = 180 * 24 * time.Hour var expiry = 180 * 24 * time.Hour
// PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do // PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do
...@@ -74,7 +73,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterC ...@@ -74,7 +73,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterC
} }
// Upgrade to a self-hosted control plane if possible // Upgrade to a self-hosted control plane if possible
if err := upgradeToSelfHosting(client, cfg, newK8sVer, dryRun); err != nil { if err := upgradeToSelfHosting(client, cfg, dryRun); err != nil {
errs = append(errs, err) errs = append(errs, err)
} }
...@@ -144,8 +143,8 @@ func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.MasterConfiguratio ...@@ -144,8 +143,8 @@ func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.MasterConfiguratio
}, 10) }, 10)
} }
func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, newK8sVer *version.Version, dryRun bool) error { func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, dryRun bool) error {
if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) && newK8sVer.AtLeast(v190alpha3) { if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) {
waiter := getWaiter(dryRun, client) waiter := getWaiter(dryRun, client)
......
...@@ -627,13 +627,13 @@ func TestKubeletVersionCheck(t *testing.T) { ...@@ -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 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment