aws-ebs-csi-driver icon indicating copy to clipboard operation
aws-ebs-csi-driver copied to clipboard

[Deprecation Announcement] `volume-modifier-for-k8s`

Open torredil opened this issue 1 year ago • 7 comments

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.0 and later fully support modifying volumes using VolumeAttributesClass for all properties previously supported via volume-modifier-for-k8s.
  • VolumeAttributesClass support is available in Kubernetes v1.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

Support

Please reach out directly on this issue if you have questions or require assistance during this transition.

torredil avatar Apr 03 '25 14:04 torredil

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.

ahilsend avatar Apr 11 '25 07:04 ahilsend

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: 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)

torredil avatar Apr 15 '25 16:04 torredil

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/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was 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

k8s-triage-robot avatar Jul 14 '25 16:07 k8s-triage-robot

/lifecycle frozen

ConnorJC3 avatar Jul 15 '25 19:07 ConnorJC3

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 GA VolumeAttributesClass features (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.

torredil avatar Oct 03 '25 16:10 torredil