mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-01 10:48:15 +00:00 
			
		
		
		
	Merge pull request #128342 from gnufied/recovery-expansion-beta
Move RecoverVolumeExpansionFailure feature to beta
This commit is contained in:
		| @@ -3066,19 +3066,21 @@ func TestValidationOptionsForPersistentVolumeClaim(t *testing.T) { | ||||
| 		"nil pv": { | ||||
| 			oldPvc: nil, | ||||
| 			expectValidationOpts: PersistentVolumeClaimSpecValidationOptions{ | ||||
| 				EnableRecoverFromExpansionFailure: false, | ||||
| 				EnableRecoverFromExpansionFailure: true, | ||||
| 				EnableVolumeAttributesClass:       false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		"invaild apiGroup in dataSource allowed because the old pvc is used": { | ||||
| 			oldPvc: pvcWithDataSource(&core.TypedLocalObjectReference{APIGroup: &invaildAPIGroup}), | ||||
| 			expectValidationOpts: PersistentVolumeClaimSpecValidationOptions{ | ||||
| 				EnableRecoverFromExpansionFailure:     true, | ||||
| 				AllowInvalidAPIGroupInDataSourceOrRef: true, | ||||
| 			}, | ||||
| 		}, | ||||
| 		"invaild apiGroup in dataSourceRef allowed because the old pvc is used": { | ||||
| 			oldPvc: pvcWithDataSourceRef(&core.TypedObjectReference{APIGroup: &invaildAPIGroup}), | ||||
| 			expectValidationOpts: PersistentVolumeClaimSpecValidationOptions{ | ||||
| 				EnableRecoverFromExpansionFailure:     true, | ||||
| 				AllowInvalidAPIGroupInDataSourceOrRef: true, | ||||
| 			}, | ||||
| 		}, | ||||
| @@ -3086,7 +3088,7 @@ func TestValidationOptionsForPersistentVolumeClaim(t *testing.T) { | ||||
| 			oldPvc:                      pvcWithVolumeAttributesClassName(utilpointer.String("foo")), | ||||
| 			enableVolumeAttributesClass: true, | ||||
| 			expectValidationOpts: PersistentVolumeClaimSpecValidationOptions{ | ||||
| 				EnableRecoverFromExpansionFailure: false, | ||||
| 				EnableRecoverFromExpansionFailure: true, | ||||
| 				EnableVolumeAttributesClass:       true, | ||||
| 			}, | ||||
| 		}, | ||||
| @@ -3094,7 +3096,7 @@ func TestValidationOptionsForPersistentVolumeClaim(t *testing.T) { | ||||
| 			oldPvc:                      pvcWithVolumeAttributesClassName(utilpointer.String("foo")), | ||||
| 			enableVolumeAttributesClass: false, | ||||
| 			expectValidationOpts: PersistentVolumeClaimSpecValidationOptions{ | ||||
| 				EnableRecoverFromExpansionFailure: false, | ||||
| 				EnableRecoverFromExpansionFailure: true, | ||||
| 				EnableVolumeAttributesClass:       true, | ||||
| 			}, | ||||
| 		}, | ||||
|   | ||||
| @@ -509,6 +509,7 @@ const ( | ||||
|  | ||||
| 	// owner: @gnufied | ||||
| 	// kep: https://kep.k8s.io/1790 | ||||
| 	// beta - v1.32 | ||||
| 	// | ||||
| 	// Allow users to recover from volume expansion failure | ||||
| 	RecoverVolumeExpansionFailure featuregate.Feature = "RecoverVolumeExpansionFailure" | ||||
|   | ||||
| @@ -596,6 +596,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate | ||||
|  | ||||
| 	RecoverVolumeExpansionFailure: { | ||||
| 		{Version: version.MustParse("1.23"), Default: false, PreRelease: featuregate.Alpha}, | ||||
| 		{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta}, | ||||
| 	}, | ||||
| 	RecursiveReadOnlyMounts: { | ||||
| 		{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, | ||||
|   | ||||
| @@ -24,6 +24,7 @@ import ( | ||||
| 	clientset "k8s.io/client-go/kubernetes" | ||||
| 	"k8s.io/client-go/tools/record" | ||||
| 	"k8s.io/klog/v2" | ||||
| 	"k8s.io/kubectl/pkg/util/storage" | ||||
| 	kevents "k8s.io/kubernetes/pkg/kubelet/events" | ||||
| 	"k8s.io/kubernetes/pkg/volume/util" | ||||
| 	volumetypes "k8s.io/kubernetes/pkg/volume/util/types" | ||||
| @@ -97,7 +98,9 @@ func (ne *NodeExpander) runPreCheck() bool { | ||||
|  | ||||
| 	// PVC is already expanded but we are still trying to expand the volume because | ||||
| 	// last recorded size in ASOW is older. This can happen for RWX volume types. | ||||
| 	if ne.pvcStatusCap.Cmp(ne.pluginResizeOpts.NewSize) >= 0 && ne.resizeStatus == "" { | ||||
| 	if ne.pvcStatusCap.Cmp(ne.pluginResizeOpts.NewSize) >= 0 && | ||||
| 		ne.resizeStatus == "" && | ||||
| 		storage.ContainsAccessMode(ne.pvc.Spec.AccessModes, v1.ReadWriteMany) { | ||||
| 		ne.pvcAlreadyUpdated = true | ||||
| 		return true | ||||
| 	} | ||||
|   | ||||
| @@ -110,10 +110,21 @@ func TestNodeExpander(t *testing.T) { | ||||
| 			expectedStatusSize:       resource.MustParse("1G"), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "pv.spec.cap = pvc.status.cap, resizeStatus='', desiredSize > actualSize", | ||||
| 			name: "RWO volumes, pv.spec.cap = pvc.status.cap, resizeStatus='', desiredSize > actualSize", | ||||
| 			pvc:  getTestPVC("test-vol0", "2G", "2G", "2G", nil), | ||||
| 			pv:   getTestPV("test-vol0", "2G"), | ||||
|  | ||||
| 			expectedResizeStatus:     "", | ||||
| 			expectResizeCall:         false, | ||||
| 			assumeResizeOpAsFinished: true, | ||||
| 			expectFinalErrors:        false, | ||||
| 			expectedStatusSize:       resource.MustParse("2G"), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "RWX volumes, pv.spec.cap = pvc.status.cap, resizeStatus='', desiredSize > actualSize", | ||||
| 			pvc:  addAccessMode(getTestPVC("test-vol0", "2G", "2G", "2G", nil), v1.ReadWriteMany), | ||||
| 			pv:   getTestPV("test-vol0", "2G"), | ||||
|  | ||||
| 			expectedResizeStatus:     "", | ||||
| 			expectResizeCall:         true, | ||||
| 			assumeResizeOpAsFinished: true, | ||||
|   | ||||
| @@ -255,7 +255,7 @@ func TestOperationGenerator_nodeExpandVolume(t *testing.T) { | ||||
| 			actualSize:  getSizeFunc("1G"), | ||||
|  | ||||
| 			expectedResizeStatus: "", | ||||
| 			resizeCallCount:      1, | ||||
| 			resizeCallCount:      0, | ||||
| 			expectedStatusSize:   resource.MustParse("2G"), | ||||
| 		}, | ||||
| 		{ | ||||
| @@ -455,6 +455,11 @@ func getTestPVC(volumeName string, specSize, statusSize, allocatedSize string, r | ||||
| 	return pvc | ||||
| } | ||||
|  | ||||
| func addAccessMode(pvc *v1.PersistentVolumeClaim, mode v1.PersistentVolumeAccessMode) *v1.PersistentVolumeClaim { | ||||
| 	pvc.Spec.AccessModes = append(pvc.Spec.AccessModes, mode) | ||||
| 	return pvc | ||||
| } | ||||
|  | ||||
| func getTestPV(volumeName string, specSize string) *v1.PersistentVolume { | ||||
| 	return &v1.PersistentVolume{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{ | ||||
|   | ||||
| @@ -964,6 +964,10 @@ | ||||
|     lockToDefault: false | ||||
|     preRelease: Alpha | ||||
|     version: "1.23" | ||||
|   - default: true | ||||
|     lockToDefault: false | ||||
|     preRelease: Beta | ||||
|     version: "1.32" | ||||
| - name: RecursiveReadOnlyMounts | ||||
|   versionedSpecs: | ||||
|   - default: false | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Prow Robot
					Kubernetes Prow Robot