[Deprecation Announcement] `volume-modifier-for-k8s`
Summary
Effective immediately, the volume-modifier-for-k8s project (which enables EBS volume modifications in Kubernetes via annotations) is deprecated in favor of the native Kubernetes VolumeAttributesClass API.
No new features will be added to volume-modifier-for-k8s. Security and bug fixes will still be released until April 1, 2026.
Background
The volume-modifier-for-k8s project was originally created to provide a solution for modifying EBS volume parameters in Kubernetes before a native solution existed. With the introduction of the VolumeAttributesClass API in Kubernetes, users now have a native, standardized way to manage these modifications.
Compatibility and Support
- AWS EBS CSI Driver versions
v1.35.0and later fully support modifying volumes usingVolumeAttributesClassfor all properties previously supported viavolume-modifier-for-k8s. -
VolumeAttributesClasssupport is available in Kubernetesv1.31+and is enabled by default on Amazon EKS clusters running this version. - Users on older Kubernetes versions may continue using
volume-modifier-for-k8s.
Migration Guidance
We strongly encourage all users of volume-modifier-for-k8s to begin transitioning to the official Kubernetes solution. Here's a simple migration example:
Before (using volume-modifier-for-k8s):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
annotations:
ebs.csi.aws.com/volumeType: "gp3"
ebs.csi.aws.com/iops: "4000"
After (using VolumeAttributesClass):
apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass
metadata:
name: example-vac
driverName: ebs.csi.aws.com
parameters:
type: gp3
iops: "4000"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
volumeAttributesClassName: example-vac
Additional Resources
- Kubernetes Documentation on VolumeAttributesClasses
- AWS Blog Post on Using VolumeAttributesClasses with EKS
- EBS CSI Driver Documentation for Volume Modification
Support
Please reach out directly on this issue if you have questions or require assistance during this transition.
I've tried out the VolumeAttributesClass, but unfortunately can't get it it to work.
VolumeAttributesClass:
apiVersion: storage.k8s.io/v1beta1
driverName: ebs.csi.aws.com
kind: VolumeAttributesClass
metadata:
name: vac-test
parameters:
iops: "3100"
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datadir-test-0
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: xfs-storage-class
volumeAttributesClassName: vac-test
volumeMode: Filesystem
volumeName: pvc-fc8ab0dd-cd71-42e0-ad36-18019fc545c0
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
phase: Bound
- EKS version: v1.32.2-eks-bc803b4
- aws-ebs-csi-driver addon: v1.41.0-eksbuild.1
I tried uninstalling, and re-installing the EBS CSI driver, but no success. There are no events on the PVC, like the driver doesn't do anything.
Hi @ahilsend, can you provide the output of the following command for the volume ID associated with that PVC?
aws ec2 describe-volumes --volume-id <> --region <> | grep "Iops"
There are no events on the PVC
This does not necessarily mean that the modification did not take place.
the driver doesn't do anything.
This is likely because the logging verbosity for the controller plugin needs to be configured accordingly. The default logging value is 2, setting it to at least 4 will enable logging for the relevant code paths:
- CreateVolume (example):
"CreateVolume: called" args="name:\"pvc-6f221581-ab76-40d3-beee-5c1b47e17cc1\"... mutable_parameters:{key:\"iops\" value:\"3100\"}"
klog.V(4).InfoS("Received Resize and/or Modify Disk request", "volumeID", volumeID, "newSizeBytes", newSizeBytes, "options", options)
The Kubernetes project currently lacks enough contributors to adequately respond to all issues.
This bot triages un-triaged issues according to the following rules:
- After 90d of inactivity,
lifecycle/staleis applied - After 30d of inactivity since
lifecycle/stalewas applied,lifecycle/rottenis applied - After 30d of inactivity since
lifecycle/rottenwas applied, the issue is closed
You can:
- Mark this issue as fresh with
/remove-lifecycle stale - Close this issue with
/close - Offer to help out with Issue Triage
Please send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle stale
/lifecycle frozen
Hi all, as an update on this issue - EKS 1.34 is now GA. No new features will be added to the volume-modifier-for-k8s project - security and bug fixes will still be released until April 1, 2026.
A few other important points to consider:
-
VolumeAttributesClass(VAC) was promoted to GA in Kubernetes 1.34. As part of this graduation, CSI sidecars (external-resizer and external-provisioner) are being updated to use the stable v1 API exclusively. To use GAVolumeAttributesClassfeatures (such as modification rollback), please upgrade to EKS 1.34 or later. - If you use the EBS CSI driver with AWS-managed sidecar containers (https://gallery.ecr.aws/csi-components), volume modification will continue to work seamlessly on EKS 1.31-1.33 clusters. AWS will patch the sidecars to support beta VAC APIs until the end of EKS 1.33 standard support (July 29, 2026).
- If you self-manage your CSI sidecar containers, you may need to pin to older sidecar versions on pre-1.34 clusters to maintain VAC functionality.