From 1d6df8233cb320d763293c420aff9d1f82d839dd Mon Sep 17 00:00:00 2001 From: Matthew Cary Date: Sat, 11 Mar 2023 15:12:45 -0800 Subject: [PATCH] Graduate StatefulSetAutoDelete to beta Change-Id: Iee385580d313c69fbb8a893eb5c165aa0b75725d --- pkg/apis/apps/types.go | 2 +- pkg/apis/apps/v1beta2/defaults_test.go | 40 +++++++++++++++++-- pkg/features/kube_features.go | 3 +- .../testdata/controller-roles.yaml | 7 ++++ test/e2e/apps/statefulset.go | 4 +- 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/pkg/apis/apps/types.go b/pkg/apis/apps/types.go index a9046627306..90d71cd1693 100644 --- a/pkg/apis/apps/types.go +++ b/pkg/apis/apps/types.go @@ -230,7 +230,7 @@ type StatefulSetSpec struct { // PersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from // the StatefulSet VolumeClaimTemplates. This requires the - // StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. + // StatefulSetAutoDeletePVC feature gate to be enabled, which is beta and default on from 1.27. // +optional PersistentVolumeClaimRetentionPolicy *StatefulSetPersistentVolumeClaimRetentionPolicy diff --git a/pkg/apis/apps/v1beta2/defaults_test.go b/pkg/apis/apps/v1beta2/defaults_test.go index 5af73a590d4..81f1837de5a 100644 --- a/pkg/apis/apps/v1beta2/defaults_test.go +++ b/pkg/apis/apps/v1beta2/defaults_test.go @@ -205,10 +205,11 @@ func TestSetDefaultStatefulSet(t *testing.T) { } tests := []struct { - name string - original *appsv1beta2.StatefulSet - expected *appsv1beta2.StatefulSet - enableMaxUnavailablePolicy bool + name string + original *appsv1beta2.StatefulSet + expected *appsv1beta2.StatefulSet + enableMaxUnavailablePolicy bool + enableStatefulSetAutoDelete bool }{ { name: "labels and default update strategy", @@ -441,12 +442,43 @@ func TestSetDefaultStatefulSet(t *testing.T) { }, enableMaxUnavailablePolicy: true, }, + { + name: "StatefulSetAutoDeletePVC enabled", + original: &appsv1beta2.StatefulSet{ + Spec: appsv1beta2.StatefulSetSpec{ + Template: defaultTemplate, + }, + }, + expected: &appsv1beta2.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: appsv1beta2.StatefulSetSpec{ + Replicas: &defaultReplicas, + Template: defaultTemplate, + PodManagementPolicy: appsv1beta2.OrderedReadyPodManagement, + UpdateStrategy: appsv1beta2.StatefulSetUpdateStrategy{ + Type: appsv1beta2.RollingUpdateStatefulSetStrategyType, + RollingUpdate: &appsv1beta2.RollingUpdateStatefulSetStrategy{ + Partition: &defaultPartition, + }, + }, + RevisionHistoryLimit: utilpointer.Int32(10), + PersistentVolumeClaimRetentionPolicy: &appsv1beta2.StatefulSetPersistentVolumeClaimRetentionPolicy{ + WhenDeleted: appsv1beta2.RetainPersistentVolumeClaimRetentionPolicyType, + WhenScaled: appsv1beta2.RetainPersistentVolumeClaimRetentionPolicyType, + }, + }, + }, + enableStatefulSetAutoDelete: true, + }, } for _, test := range tests { test := test t.Run(test.name, func(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.MaxUnavailableStatefulSet, test.enableMaxUnavailablePolicy)() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetAutoDeletePVC, test.enableStatefulSetAutoDelete)() obj2 := roundTrip(t, runtime.Object(test.original)) got, ok := obj2.(*appsv1beta2.StatefulSet) if !ok { diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 0ff6ff7ae00..baae836a123 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -750,6 +750,7 @@ const ( // owner: @mattcary // alpha: v1.22 + // beta: v1.27 // // Enables policies controlling deletion of PVCs created by a StatefulSet. StatefulSetAutoDeletePVC featuregate.Feature = "StatefulSetAutoDeletePVC" @@ -1068,7 +1069,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS StableLoadBalancerNodeSet: {Default: true, PreRelease: featuregate.Beta}, - StatefulSetAutoDeletePVC: {Default: false, PreRelease: featuregate.Alpha}, + StatefulSetAutoDeletePVC: {Default: true, PreRelease: featuregate.Beta}, StatefulSetStartOrdinal: {Default: true, PreRelease: featuregate.Beta}, diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml index 9a476e9edd8..5493b907811 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/controller-roles.yaml @@ -1463,6 +1463,13 @@ items: - create - patch - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - delete + - update - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: diff --git a/test/e2e/apps/statefulset.go b/test/e2e/apps/statefulset.go index f133203b8a2..fb82ba00532 100644 --- a/test/e2e/apps/statefulset.go +++ b/test/e2e/apps/statefulset.go @@ -1214,7 +1214,7 @@ var _ = SIGDescribe("StatefulSet", func() { } }) - ginkgo.Describe("Non-retain StatefulSetPersistentVolumeClaimPolicy [Feature:StatefulSetAutoDeletePVC]", func() { + ginkgo.Describe("Non-retain StatefulSetPersistentVolumeClaimPolicy", func() { ssName := "ss" labels := map[string]string{ "foo": "bar", @@ -1320,7 +1320,7 @@ var _ = SIGDescribe("StatefulSet", func() { framework.ExpectNoError(err) }) - ginkgo.It("should delete PVCs after adopting pod (WhenScaled) [Feature:StatefulSetAutoDeletePVC]", func(ctx context.Context) { + ginkgo.It("should delete PVCs after adopting pod (WhenScaled)", func(ctx context.Context) { e2epv.SkipIfNoDefaultStorageClass(ctx, c) ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns) *(ss.Spec.Replicas) = 3