locked the feature-gate VolumeAttributesClass to default (true) and switch storage version from v1beta1 to v1

Signed-off-by: carlory <baofa.fan@daocloud.io>
This commit is contained in:
carlory 2025-12-18 15:35:05 +08:00
parent 53b29512ec
commit f8e8e55f1d
No known key found for this signature in database
GPG key ID: A045E1459D5F2869
16 changed files with 47 additions and 20 deletions

View file

@ -110,7 +110,7 @@
"vac"
],
"singularName": "volumeattributesclass",
"storageVersionHash": "Bl3MtjZ/n/s=",
"storageVersionHash": "tIjydgKBC5w=",
"verbs": [
"create",
"delete",

View file

@ -11,7 +11,7 @@
"vac"
],
"singularName": "volumeattributesclass",
"storageVersionHash": "Bl3MtjZ/n/s=",
"storageVersionHash": "tIjydgKBC5w=",
"verbs": [
"create",
"delete",

View file

@ -24,6 +24,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/version"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
api "k8s.io/kubernetes/pkg/apis/core"
@ -87,6 +88,9 @@ func TestDropDisabledFields(t *testing.T) {
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
if !tc.vacEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, tc.vacEnabled)
DropDisabledSpecFields(tc.newSpec, tc.oldSpec)

View file

@ -442,6 +442,9 @@ func TestDropDisabledVolumeAttributesClass(t *testing.T) {
for testName, test := range tests {
t.Run(testName, func(t *testing.T) {
if !test.vacEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, test.vacEnabled)
DropDisabledFields(&test.spec, &test.oldSpec)
if test.spec.VolumeAttributesClassName != test.wantVAC {

View file

@ -561,6 +561,9 @@ func TestValidatePersistentVolumes(t *testing.T) {
for name, scenario := range scenarios {
t.Run(name, func(t *testing.T) {
if !scenario.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, scenario.enableVolumeAttributesClass)
opts := ValidationOptionsForPersistentVolume(scenario.volume, nil)
@ -1040,6 +1043,9 @@ func TestValidationOptionsForPersistentVolume(t *testing.T) {
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
if !tc.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, tc.enableVolumeAttributesClass)
opts := ValidationOptionsForPersistentVolume(nil, tc.oldPv)
@ -1626,6 +1632,9 @@ func TestValidatePeristentVolumeAttributesClassUpdate(t *testing.T) {
}
for name, scenario := range scenarios {
if !scenario.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, scenario.enableVolumeAttributesClass)
originalNewPV := scenario.newPV.DeepCopy()
@ -2227,6 +2236,9 @@ func testValidatePVC(t *testing.T, ephemeral bool) {
for name, scenario := range scenarios {
t.Run(name, func(t *testing.T) {
if !scenario.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, scenario.enableVolumeAttributesClass)
var errs field.ErrorList
@ -3183,6 +3195,9 @@ func TestValidationOptionsForPersistentVolumeClaim(t *testing.T) {
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
if !tc.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, tc.enableVolumeAttributesClass)
opts := ValidationOptionsForPersistentVolumeClaim(nil, tc.oldPvc)
@ -3214,6 +3229,9 @@ func TestValidationOptionsForPersistentVolumeClaimTemplate(t *testing.T) {
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
if !tc.enableVolumeAttributesClass {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, tc.enableVolumeAttributesClass)
opts := ValidationOptionsForPersistentVolumeClaimTemplate(nil, tc.oldPvcTemplate)

View file

@ -23,6 +23,7 @@ import (
v1 "k8s.io/api/core/v1"
storage "k8s.io/api/storage/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/version"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/component-helpers/storage/volume"
@ -800,6 +801,9 @@ func TestSync(t *testing.T) {
}
for _, isEnabled := range []bool{true, false} {
if !isEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, isEnabled)
allTests := tests

View file

@ -23,12 +23,9 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/kubernetes/scheme"
ref "k8s.io/client-go/tools/reference"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/component-helpers/storage/volume"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/volume/util"
)
@ -78,9 +75,6 @@ func makeVolumeModePVC(size string, mode *v1.PersistentVolumeMode, modfn func(*v
}
func TestMatchVolume(t *testing.T) {
// Default enable the VolumeAttributesClass feature gate.
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, true)
volList := newPersistentVolumeOrderedIndex()
for _, pv := range createTestVolumes() {
volList.store.Add(pv)

View file

@ -80,7 +80,7 @@ var GVRToStorageVersionHash = map[string]string{
"storage.k8s.io/v1/storageclasses": "K+m6uJwbjGY=",
"storage.k8s.io/v1/csistoragecapacities": "xeVl+2Ly1kE=",
"storage.k8s.io/v1/volumeattachments": "tJx/ezt6UDU=",
"storage.k8s.io/v1/volumeattributesclasses": "Bl3MtjZ/n/s=",
"storage.k8s.io/v1/volumeattributesclasses": "tIjydgKBC5w=",
"apps/v1/controllerrevisions": "85nkx63pcBU=",
"apps/v1/daemonsets": "dd7pWHUlMKQ=",
"apps/v1/deployments": "8aSe+NMegvE=",

View file

@ -1912,6 +1912,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
{Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Beta},
{Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA},
{Version: version.MustParse("1.36"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
},
VolumeLimitScaling: {

View file

@ -39,7 +39,6 @@ import (
"k8s.io/kubernetes/pkg/apis/policy"
"k8s.io/kubernetes/pkg/apis/resource"
"k8s.io/kubernetes/pkg/apis/scheduling"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storagemigration"
)
@ -86,7 +85,6 @@ func NewStorageFactoryConfigEffectiveVersion(effectiveVersion basecompatibility.
admissionregistration.Resource("mutatingadmissionpolicybindings").WithVersion("v1beta1"),
certificates.Resource("clustertrustbundles").WithVersion("v1beta1"),
certificates.Resource("podcertificaterequests").WithVersion("v1beta1"),
storage.Resource("volumeattributesclasses").WithVersion("v1beta1"),
storagemigration.Resource("storagemigrations").WithVersion("v1beta1"),
resource.Resource("devicetaintrules").WithVersion("v1alpha3"),
scheduling.Resource("workloads").WithVersion("v1alpha1"),

View file

@ -146,7 +146,6 @@ func TestPersistentVolumeClaimEvaluatorMatchingScopes(t *testing.T) {
}
for testName, testCase := range testCases {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, true)
t.Run(testName, func(t *testing.T) {
gotSelectors, err := evaluator.MatchingScopes(testCase.claim, testCase.selectors)
if err != nil {

View file

@ -32,16 +32,13 @@ import (
genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/apiserver/pkg/admission/plugin/resourcequota"
resourcequotaapi "k8s.io/apiserver/pkg/admission/plugin/resourcequota/apis/resourcequota"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
testcore "k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
featuregatetesting "k8s.io/component-base/featuregate/testing"
api "k8s.io/kubernetes/pkg/apis/core"
controlplaneadmission "k8s.io/kubernetes/pkg/controlplane/apiserver/admission"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/quota/v1/install"
)
@ -993,8 +990,6 @@ func TestAdmitBelowTerminatingQuotaLimitWhenPodScopeUpdated(t *testing.T) {
// It creates a glod and silver quota, and creates a pvc with the glod class.
// It ensures that the glod quota is incremented, and the silver quota is not.
func TestAdmitBelowVolumeAttributesClassQuotaLimit(t *testing.T) {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, true)
classGold := "gold"
classSilver := "silver"
@ -1127,8 +1122,6 @@ func TestAdmitBelowVolumeAttributesClassQuotaLimit(t *testing.T) {
// use to lower / free the reserved quota. We need always overcount in the admission plugin if something later causes
// the request to be rejected, so you can not reduce quota with requests that aren't completed.
func TestAdmitBelowVolumeAttributesClassQuotaLimitWhenPVCScopeUpdated(t *testing.T) {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, true)
classGold := "gold"
classSilver := "silver"
classCopper := "copper"

View file

@ -25,6 +25,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/dump"
"k8s.io/apimachinery/pkg/util/version"
"k8s.io/apiserver/pkg/admission"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
@ -150,6 +151,9 @@ func TestAdmit(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
ctrl := newPlugin()
if !test.enableVacFeatureGate {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, test.enableVacFeatureGate)
obj := test.object.DeepCopyObject()

View file

@ -2001,6 +2001,10 @@
lockToDefault: false
preRelease: GA
version: "1.34"
- default: true
lockToDefault: true
preRelease: GA
version: "1.36"
- name: VolumeLimitScaling
versionedSpecs:
- default: false

View file

@ -388,6 +388,7 @@ func GetEtcdStorageDataForNamespaceServedAt(namespace string, v string, isEmulat
gvr("storage.k8s.io", "v1beta1", "volumeattributesclasses"): {
Stub: `{"metadata": {"name": "vac2"}, "driverName": "example.com/driver", "parameters": {"foo": "bar"}}`,
ExpectedEtcdPath: "/registry/volumeattributesclasses/vac2",
ExpectedGVK: gvkP("storage.k8s.io", "v1", "VolumeAttributesClass"),
IntroducedVersion: "1.31",
RemovedVersion: "1.37",
},
@ -397,7 +398,7 @@ func GetEtcdStorageDataForNamespaceServedAt(namespace string, v string, isEmulat
gvr("storage.k8s.io", "v1", "volumeattributesclasses"): {
Stub: `{"metadata": {"name": "vac3"}, "driverName": "example.com/driver", "parameters": {"foo": "bar"}}`,
ExpectedEtcdPath: "/registry/volumeattributesclasses/vac3",
ExpectedGVK: gvkP("storage.k8s.io", "v1beta1", "VolumeAttributesClass"),
ExpectedGVK: gvkP("storage.k8s.io", "v1", "VolumeAttributesClass"),
IntroducedVersion: "1.34",
},
// --

View file

@ -29,6 +29,7 @@ import (
storage "k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/version"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/watch"
utilfeature "k8s.io/apiserver/pkg/util/feature"
@ -673,6 +674,9 @@ func TestPersistentVolumeClaimVolumeAttirbutesClassName(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if !tc.featureEnabled {
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.35"))
}
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.VolumeAttributesClass, tc.featureEnabled)
s := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount,StorageObjectInUseProtection"}, framework.SharedEtcd())
defer s.TearDownFn()