Skip to content
DocsTry Aspire
DocsTry

KubernetesPersistentVolumeResource Constructors

ClassConstructors1 member
Represents a Kubernetes PersistentVolumeClaim as a first-class resource in the Aspire application model. A persistent volume resource carries the storage class, capacity, access modes, and metadata annotations needed to render a v1.PersistentVolumeClaim at publish time. Workloads bind to it with KubernetesPersistentVolumeExtensions.WithPersistentVolume.
Constructor(string, KubernetesEnvironmentResource)Section titled Constructor(string, KubernetesEnvironmentResource)
Represents a Kubernetes PersistentVolumeClaim as a first-class resource in the Aspire application model. A persistent volume resource carries the storage class, capacity, access modes, and metadata annotations needed to render a v1.PersistentVolumeClaim at publish time. Workloads bind to it with KubernetesPersistentVolumeExtensions.WithPersistentVolume.
public sealed class KubernetesPersistentVolumeResource
{
public KubernetesPersistentVolumeResource(
string name,
KubernetesEnvironmentResource environment)
{
// ...
}
}
namestringThe name of the persistent volume resource. Used as the generated PersistentVolumeClaim.metadata.name after lower-casing.
environmentKubernetesEnvironmentResourceThe parent Kubernetes environment resource.

Bind a workload to the volume by either:

  • Adding a matching WithVolume("name", "/mount/path") on a container resource and then calling WithPersistentVolume(volume). The publisher matches by volume name and routes the pod's volumes[] entry through this resource's generated PVC.
  • Calling the KubernetesPersistentVolumeExtensions.WithPersistentVolume overload that takes a mount path. Works for both ContainerResource and ProjectResource.

Any workload bound to a persistent volume is automatically rendered as a StatefulSet rather than a Deployment — Kubernetes requires stable identity and ordered rollout for pods that share named PVCs.

This resource is publish-only. It has no run-mode behavior or dashboard surface.

var k8s = builder.AddKubernetesEnvironment("k8s");
var data = k8s.AddPersistentVolume("data")
.WithStorageClass("managed-csi")
.WithCapacity("20Gi")
.WithAccessMode(PersistentVolumeAccessMode.ReadWriteOnce)
.WithVolumeAnnotation("volume.beta.kubernetes.io/storage-provisioner", "disk.csi.azure.com");
builder.AddContainer("postgres", "postgres:16")
.WithVolume("data", "/var/lib/postgresql/data")
.WithPersistentVolume(data);