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
