diff --git a/metropolis/test/e2e/persistentvolume/main.go b/metropolis/test/e2e/persistentvolume/main.go
index 577c343..d9ff958 100644
--- a/metropolis/test/e2e/persistentvolume/main.go
+++ b/metropolis/test/e2e/persistentvolume/main.go
@@ -9,6 +9,7 @@
 
 import (
 	"errors"
+	"flag"
 	"fmt"
 	"os"
 	"path/filepath"
@@ -23,6 +24,8 @@
 // This is a copy of the constant in metropolis/node/kubernetes/provisioner.go.
 const inodeCapacityRatio = 4 * 512
 
+var runtimeClass = flag.String("runtimeclass", "", "Name of the runtime class")
+
 // checkFilesystemVolume checks that the filesystem containing path has the
 // given mount flags and capacity.
 func checkFilesystemVolume(path string, expectedFlags int64, expectedBytes uint64) error {
@@ -86,20 +89,21 @@
 	if err := checkFilesystemVolume("/vol/default", 0, 1*1024*1024); err != nil {
 		return err
 	}
-	if err := checkFilesystemVolume("/vol/local-strict", unix.ST_NOSUID|unix.ST_NODEV|unix.ST_NOEXEC, 5*1024*1024); err != nil {
-		return err
-	}
 	if err := checkFilesystemVolume("/vol/readonly", unix.ST_RDONLY, 1*1024*1024); err != nil {
 		return err
 	}
-	if err := checkBlockVolume("/vol/block", 1*1024*1024); err != nil {
-		return err
+	// Block volumes are not supported on gVisor.
+	if *runtimeClass != "gvisor" {
+		if err := checkBlockVolume("/vol/block", 1*1024*1024); err != nil {
+			return err
+		}
 	}
 	return nil
 }
 
 func main() {
-	fmt.Println("PersistentVolume tests starting...")
+	flag.Parse()
+	fmt.Printf("PersistentVolume tests starting on %s...\n", *runtimeClass)
 
 	if err := testPersistentVolume(); err != nil {
 		fmt.Println(err.Error())
diff --git a/metropolis/test/e2e/suites/kubernetes/kubernetes_helpers.go b/metropolis/test/e2e/suites/kubernetes/kubernetes_helpers.go
index 25a785d..9c67117 100644
--- a/metropolis/test/e2e/suites/kubernetes/kubernetes_helpers.go
+++ b/metropolis/test/e2e/suites/kubernetes/kubernetes_helpers.go
@@ -156,7 +156,7 @@
 }
 
 // makeTestStatefulSet generates a StatefulSet spec
-func makeTestStatefulSet(name string) *appsv1.StatefulSet {
+func makeTestStatefulSet(name string, runtimeClass string) *appsv1.StatefulSet {
 	return &appsv1.StatefulSet{
 		ObjectMeta: metav1.ObjectMeta{Name: name},
 		Spec: appsv1.StatefulSetSpec{
@@ -175,17 +175,6 @@
 					},
 				},
 				{
-					ObjectMeta: metav1.ObjectMeta{Name: "vol-local-strict"},
-					Spec: corev1.PersistentVolumeClaimSpec{
-						AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
-						Resources: corev1.VolumeResourceRequirements{
-							Requests: map[corev1.ResourceName]resource.Quantity{corev1.ResourceStorage: resource.MustParse("5Mi")},
-						},
-						StorageClassName: ptr.To("local-strict"),
-						VolumeMode:       ptr.To(corev1.PersistentVolumeFilesystem),
-					},
-				},
-				{
 					ObjectMeta: metav1.ObjectMeta{Name: "vol-readonly"},
 					Spec: corev1.PersistentVolumeClaimSpec{
 						AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
@@ -218,16 +207,13 @@
 							Name:            "test",
 							ImagePullPolicy: corev1.PullIfNotPresent,
 							Image:           "test.monogon.internal/metropolis/test/e2e/persistentvolume/persistentvolume_image",
+							Args:            []string{"-runtimeclass", runtimeClass},
 							VolumeMounts: []corev1.VolumeMount{
 								{
 									Name:      "vol-default",
 									MountPath: "/vol/default",
 								},
 								{
-									Name:      "vol-local-strict",
-									MountPath: "/vol/local-strict",
-								},
-								{
 									Name:      "vol-readonly",
 									ReadOnly:  true,
 									MountPath: "/vol/readonly",
@@ -241,6 +227,7 @@
 							},
 						},
 					},
+					RuntimeClassName: ptr.To(runtimeClass),
 				},
 			},
 		},
diff --git a/metropolis/test/e2e/suites/kubernetes/run_test.go b/metropolis/test/e2e/suites/kubernetes/run_test.go
index 5a4be60..baaa235 100644
--- a/metropolis/test/e2e/suites/kubernetes/run_test.go
+++ b/metropolis/test/e2e/suites/kubernetes/run_test.go
@@ -370,33 +370,36 @@
 			return fmt.Errorf("pod is not ready: %s", errorMsg.String())
 		}
 	})
-	util.TestEventual(t, "StatefulSet with PersistentVolume tests", ctx, smallTestTimeout, func(ctx context.Context) error {
-		_, err := clientSet.AppsV1().StatefulSets("default").Create(ctx, makeTestStatefulSet("test-statefulset-1"), metav1.CreateOptions{})
-		return err
-	})
-	util.TestEventual(t, "StatefulSet with PersistentVolume tests successful", ctx, smallTestTimeout, func(ctx context.Context) error {
-		res, err := clientSet.CoreV1().Pods("default").List(ctx, metav1.ListOptions{LabelSelector: "name=test-statefulset-1"})
-		if err != nil {
+	for _, runtimeClass := range []string{"runc", "gvisor"} {
+		statefulSetName := fmt.Sprintf("test-statefulset-%s", runtimeClass)
+		util.TestEventual(t, fmt.Sprintf("StatefulSet with %s tests", runtimeClass), ctx, smallTestTimeout, func(ctx context.Context) error {
+			_, err := clientSet.AppsV1().StatefulSets("default").Create(ctx, makeTestStatefulSet(statefulSetName, runtimeClass), metav1.CreateOptions{})
 			return err
-		}
-		if len(res.Items) == 0 {
-			return errors.New("pod didn't get created")
-		}
-		pod := res.Items[0]
-		lines, err := getPodLogLines(ctx, clientSet, pod.Name, 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  ")))
+		})
+		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 {
+				return err
 			}
-		}
-		return fmt.Errorf("pod is not ready: %v, log:\n  %s", pod.Status.Phase, strings.Join(lines, "\n  "))
-	})
+			if len(res.Items) == 0 {
+				return errors.New("pod didn't get created")
+			}
+			pod := res.Items[0]
+			lines, err := getPodLogLines(ctx, clientSet, pod.Name, 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  ")))
+				}
+			}
+			return fmt.Errorf("pod is not ready: %v, log:\n  %s", pod.Status.Phase, strings.Join(lines, "\n  "))
+		})
+	}
 	util.TestEventual(t, "In-cluster self-test job", ctx, smallTestTimeout, func(ctx context.Context) error {
 		_, err := clientSet.BatchV1().Jobs("default").Create(ctx, makeSelftestSpec("selftest"), metav1.CreateOptions{})
 		return err
