diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index f316b9db8ce..2f0d30bd488 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -453,7 +453,7 @@ var ( MinimumControlPlaneVersion = getSkewedKubernetesVersion(-1) // MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports - MinimumKubeletVersion = getSkewedKubernetesVersion(-1) + MinimumKubeletVersion = getSkewedKubernetesVersion(-3) // CurrentKubernetesVersion specifies current Kubernetes version supported by kubeadm CurrentKubernetesVersion = getSkewedKubernetesVersion(0) diff --git a/cmd/kubeadm/app/phases/upgrade/policy.go b/cmd/kubeadm/app/phases/upgrade/policy.go index eed1ed5346e..497e03747dd 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy.go +++ b/cmd/kubeadm/app/phases/upgrade/policy.go @@ -35,7 +35,7 @@ const ( MaximumAllowedMinorVersionDowngradeSkew = 1 // MaximumAllowedMinorVersionKubeletSkew describes how many minor versions the control plane version and the kubelet can skew in a kubeadm cluster - MaximumAllowedMinorVersionKubeletSkew = 1 + MaximumAllowedMinorVersionKubeletSkew = 3 ) // VersionSkewPolicyErrors describes version skew errors that might be seen during the validation process in EnforceVersionPolicies diff --git a/cmd/kubeadm/app/phases/upgrade/policy_test.go b/cmd/kubeadm/app/phases/upgrade/policy_test.go index 5d97eca84a7..a747046a361 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy_test.go +++ b/cmd/kubeadm/app/phases/upgrade/policy_test.go @@ -90,6 +90,24 @@ func TestEnforceVersionPolicies(t *testing.T) { }, newK8sVersion: "v1.13.0", expectedMandatoryErrs: 1, // can't upgrade two minor versions + }, + { + name: "upgrading with n-3 kubelet is supported", + vg: &fakeVersionGetter{ + clusterVersion: "v1.14.3", + kubeletVersion: "v1.12.3", + kubeadmVersion: "v1.15.0", + }, + newK8sVersion: "v1.15.0", + }, + { + name: "upgrading with n-4 kubelet is not supported", + vg: &fakeVersionGetter{ + clusterVersion: "v1.14.3", + kubeletVersion: "v1.11.3", + kubeadmVersion: "v1.15.0", + }, + newK8sVersion: "v1.15.0", expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large }, { @@ -123,13 +141,22 @@ func TestEnforceVersionPolicies(t *testing.T) { 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 three minor version.", vg: &fakeVersionGetter{ - clusterVersion: "v1.12.0", + clusterVersion: "v1.13.0", kubeletVersion: "v1.10.8", - kubeadmVersion: "v1.12.0", + kubeadmVersion: "v1.13.0", }, - newK8sVersion: "v1.12.0", + newK8sVersion: "v1.13.0", + }, + { + name: "the maximum skew between the cluster version and the kubelet versions should be three minor version. This may be forced through though.", + vg: &fakeVersionGetter{ + clusterVersion: "v1.14.0", + kubeletVersion: "v1.10.8", + kubeadmVersion: "v1.14.0", + }, + newK8sVersion: "v1.14.0", expectedSkippableErrs: 1, }, {