diff --git a/metropolis/test/e2e/persistentvolume/main.go b/metropolis/test/e2e/persistentvolume/main.go
index c80700a..6af1258 100644
--- a/metropolis/test/e2e/persistentvolume/main.go
+++ b/metropolis/test/e2e/persistentvolume/main.go
@@ -88,16 +88,16 @@
 	return nil
 }
 
-func testPersistentVolume() error {
-	if err := checkFilesystemVolume("/vol/default", 0, 1*1024*1024); err != nil {
+func testPersistentVolume(expectedBytes uint64) error {
+	if err := checkFilesystemVolume("/vol/default", 0, expectedBytes); err != nil {
 		return err
 	}
-	if err := checkFilesystemVolume("/vol/readonly", unix.ST_RDONLY, 1*1024*1024); err != nil {
+	if err := checkFilesystemVolume("/vol/readonly", unix.ST_RDONLY, expectedBytes); err != nil {
 		return err
 	}
 	// Block volumes are not supported on gVisor.
 	if *runtimeClass != "gvisor" {
-		if err := checkBlockVolume("/vol/block", 1*1024*1024); err != nil {
+		if err := checkBlockVolume("/vol/block", expectedBytes); err != nil {
 			return err
 		}
 	}
@@ -108,12 +108,26 @@
 	flag.Parse()
 	fmt.Printf("PersistentVolume tests starting on %s...\n", *runtimeClass)
 
-	if err := testPersistentVolume(); err != nil {
+	if err := testPersistentVolume(1 * 1024 * 1024); err != nil {
 		fmt.Println(err.Error())
 		// The final log line communicates the test outcome to the e2e test.
-		fmt.Println("[TESTS-FAILED]")
+		fmt.Println("[INIT-FAILED]")
 	} else {
-		fmt.Println("[TESTS-PASSED]")
+		fmt.Println("[INIT-PASSED]")
+
+		nextLog := time.Now().Add(10 * time.Second)
+		for {
+			if err := testPersistentVolume(4 * 1024 * 1024); err != nil {
+				if time.Now().After(nextLog) {
+					fmt.Println("Waiting for resize:", err.Error())
+					nextLog = time.Now().Add(10 * time.Second)
+				}
+				time.Sleep(100 * time.Millisecond)
+			} else {
+				fmt.Println("[RESIZE-PASSED]")
+				break
+			}
+		}
 	}
 
 	// Sleep forever, because if the process exits, Kubernetes will restart it.
diff --git a/metropolis/test/e2e/suites/kubernetes/BUILD.bazel b/metropolis/test/e2e/suites/kubernetes/BUILD.bazel
index 99731a3..a25bbe8 100644
--- a/metropolis/test/e2e/suites/kubernetes/BUILD.bazel
+++ b/metropolis/test/e2e/suites/kubernetes/BUILD.bazel
@@ -46,6 +46,7 @@
         "@io_k8s_api//networking/v1:networking",
         "@io_k8s_apimachinery//pkg/api/errors",
         "@io_k8s_apimachinery//pkg/apis/meta/v1:meta",
+        "@io_k8s_apimachinery//pkg/types",
         "@io_k8s_apimachinery//pkg/util/intstr",
         "@io_k8s_kubernetes//pkg/api/v1/pod",
         "@io_k8s_utils//ptr",
diff --git a/metropolis/test/e2e/suites/kubernetes/run_test.go b/metropolis/test/e2e/suites/kubernetes/run_test.go
index ee39c1c..8333567 100644
--- a/metropolis/test/e2e/suites/kubernetes/run_test.go
+++ b/metropolis/test/e2e/suites/kubernetes/run_test.go
@@ -15,6 +15,7 @@
 	_ "net/http/pprof"
 	"net/url"
 	"os"
+	"slices"
 	"strings"
 	"testing"
 	"time"
@@ -25,6 +26,7 @@
 	nwkv1 "k8s.io/api/networking/v1"
 	kerrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/intstr"
 	podv1 "k8s.io/kubernetes/pkg/api/v1/pod"
 	"k8s.io/utils/ptr"
@@ -445,6 +447,7 @@
 			_, err := clientSet.AppsV1().StatefulSets("default").Create(ctx, makeTestStatefulSet(statefulSetName, runtimeClass), metav1.CreateOptions{})
 			return err
 		})
+		var podName string
 		util.TestEventual(t, fmt.Sprintf("StatefulSet with %s tests successful", runtimeClass), ctx, smallTestTimeout, func(ctx context.Context) error {
 			res, err := clientSet.CoreV1().Pods("default").List(ctx, metav1.ListOptions{LabelSelector: fmt.Sprintf("name=%s", statefulSetName)})
 			if err != nil {
@@ -454,20 +457,51 @@
 				return errors.New("pod didn't get created")
 			}
 			pod := res.Items[0]
-			lines, err := getPodLogLines(ctx, clientSet, pod.Name, 50)
+			podName = pod.Name
+			lines, err := getPodLogLines(ctx, clientSet, podName, 50)
 			if err != nil {
 				return fmt.Errorf("could not get logs: %w", err)
 			}
-			if len(lines) > 0 {
-				switch lines[len(lines)-1] {
-				case "[TESTS-PASSED]":
-					return nil
-				case "[TESTS-FAILED]":
-					return util.Permanent(fmt.Errorf("tests failed, log:\n  %s", strings.Join(lines, "\n  ")))
-				}
+			if slices.Contains(lines, "[INIT-PASSED]") {
+				return nil
+			}
+			if slices.Contains(lines, "[INIT-FAILED]") {
+				return util.Permanent(fmt.Errorf("tests failed, log:\n  %s", strings.Join(lines, "\n  ")))
 			}
 			return fmt.Errorf("pod is not ready: %v, log:\n  %s", pod.Status.Phase, strings.Join(lines, "\n  "))
 		})
+		util.TestEventual(t, fmt.Sprintf("StatefulSet with %s request resize", runtimeClass), ctx, smallTestTimeout, func(ctx context.Context) error {
+			for _, templateName := range []string{"vol-default", "vol-readonly", "vol-block"} {
+				name := fmt.Sprintf("%s-%s-0", templateName, statefulSetName)
+				patch := `{"spec": {"resources": {"requests": {"storage": "4Mi"}}}}`
+				_, err := clientSet.CoreV1().PersistentVolumeClaims("default").Patch(ctx, name, types.StrategicMergePatchType, []byte(patch), metav1.PatchOptions{})
+				if err != nil {
+					return err
+				}
+			}
+			return nil
+		})
+		i := 0
+		util.TestEventual(t, fmt.Sprintf("StatefulSet with %s resize successful", runtimeClass), ctx, smallTestTimeout, func(ctx context.Context) error {
+			// Make a change to the pod to make kubelet look at it and notice that it
+			// should call NodeExpandVolume. If we don't do this, it might take up to
+			// 1 minute for kubelet to notice, which slows down the test.
+			patch := fmt.Sprintf(`{"metadata": {"labels": {"trigger-kubelet-update": "%d"}}}`, i)
+			i += 1
+			_, err := clientSet.CoreV1().Pods("default").Patch(ctx, podName, types.StrategicMergePatchType, []byte(patch), metav1.PatchOptions{})
+			if err != nil {
+				return err
+			}
+
+			lines, err := getPodLogLines(ctx, clientSet, podName, 50)
+			if err != nil {
+				return fmt.Errorf("could not get logs: %w", err)
+			}
+			if slices.Contains(lines, "[RESIZE-PASSED]") {
+				return nil
+			}
+			return fmt.Errorf("waiting for resize, log:\n  %s", strings.Join(lines, "\n  "))
+		})
 	}
 	util.TestEventual(t, "Deployment in user namespace", ctx, largeTestTimeout, func(ctx context.Context) error {
 		deployment := makeTestDeploymentSpec("test-userns-1")
