From 534a0941e8d39926015dccfaab0e37251a070cf7 Mon Sep 17 00:00:00 2001 From: Paco Xu Date: Fri, 22 Sep 2023 20:46:29 +0800 Subject: [PATCH 1/2] kubeadm: change kubelet skew to apiserver to n-3 --- cmd/kubeadm/app/constants/constants.go | 3 ++- cmd/kubeadm/app/phases/upgrade/policy.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index f316b9db8ce..a11a800fcde 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -453,7 +453,8 @@ var ( MinimumControlPlaneVersion = getSkewedKubernetesVersion(-1) // MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports - MinimumKubeletVersion = getSkewedKubernetesVersion(-1) + // Refer to https://kubernetes.io/releases/version-skew-policy/#kubelet-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..d3723dbaf2f 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy.go +++ b/cmd/kubeadm/app/phases/upgrade/policy.go @@ -35,7 +35,8 @@ const ( MaximumAllowedMinorVersionDowngradeSkew = 1 // MaximumAllowedMinorVersionKubeletSkew describes how many minor versions the control plane version and the kubelet can skew in a kubeadm cluster - MaximumAllowedMinorVersionKubeletSkew = 1 + // Refer to https://kubernetes.io/releases/version-skew-policy/#kubelet-1 + MaximumAllowedMinorVersionKubeletSkew = 3 ) // VersionSkewPolicyErrors describes version skew errors that might be seen during the validation process in EnforceVersionPolicies From 7b1d87383ecd65bb25e5b479154d8cba45b6c91d Mon Sep 17 00:00:00 2001 From: Paco Xu Date: Sun, 8 Oct 2023 11:08:59 +0800 Subject: [PATCH 2/2] add kubelet policy skew test for kubeadm --- cmd/kubeadm/app/constants/constants.go | 1 - cmd/kubeadm/app/phases/upgrade/policy.go | 1 - cmd/kubeadm/app/phases/upgrade/policy_test.go | 35 ++++++++++++++++--- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index a11a800fcde..2f0d30bd488 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -453,7 +453,6 @@ var ( MinimumControlPlaneVersion = getSkewedKubernetesVersion(-1) // MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports - // Refer to https://kubernetes.io/releases/version-skew-policy/#kubelet-1 MinimumKubeletVersion = getSkewedKubernetesVersion(-3) // CurrentKubernetesVersion specifies current Kubernetes version supported by kubeadm diff --git a/cmd/kubeadm/app/phases/upgrade/policy.go b/cmd/kubeadm/app/phases/upgrade/policy.go index d3723dbaf2f..497e03747dd 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy.go +++ b/cmd/kubeadm/app/phases/upgrade/policy.go @@ -35,7 +35,6 @@ const ( MaximumAllowedMinorVersionDowngradeSkew = 1 // MaximumAllowedMinorVersionKubeletSkew describes how many minor versions the control plane version and the kubelet can skew in a kubeadm cluster - // Refer to https://kubernetes.io/releases/version-skew-policy/#kubelet-1 MaximumAllowedMinorVersionKubeletSkew = 3 ) 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, }, {