When using StatefulSet, you can define volumeClaimTemplates to provide stable, persistent storage for each pod. Each pod in the set receives its own unique PersistentVolumeClaim (e.g., name-statefulset-0).
To use these templates:
- Define the templates in the
StatefulSet constructor via volumeClaimTemplates or using the addVolumeClaimTemplate method. - Reference the volumes in your container's
volumeMounts using Volume.fromName(chart, templateName, volumeName).
import * as kplus from 'cdk8s-plus-32';
import { Size } from 'cdk8s';
// Reference a volume defined in a template
const dataVolume = Volume.fromName(chart, "pvc-template-data", "data-volume")
// Create a StatefulSet with PVC templates
const statefulSet = new kplus.StatefulSet(this, 'StatefulSet', {
containers: [{
image: 'nginx',
volumeMounts: [{
volume: dataVolume,
path: '/data',
}, {
volume: Volume.fromName(chart, "pvc-template-temp", "temp-volume"),
path: '/data',
}],
}],
volumeClaimTemplates: [{
name: dataVolume.name,
storage: Size.gibibytes(10),
accessModes: [kplus.PersistentVolumeAccessMode.READ_WRITE_ONCE],
storageClassName: 'standard',
}, {
name: 'temp-volume',
storage: Size.gibibytes(10),
accessModes: [kplus.PersistentVolumeAccessMode.READ_WRITE_ONCE],
storageClassName: 'standard',
}],
});
// Or add PVC templates after creation
statefulSet.addVolumeClaimTemplate({
name: 'logs-volume',
storage: Size.gibibytes(5),
accessModes: [kplus.PersistentVolumeAccessMode.READ_WRITE_ONCE],
});