UNPKG

cdk8s-plus-25

Version:

cdk8s+ is a software development framework that provides high level abstractions for authoring Kubernetes applications. cdk8s-plus-25 synthesizes Kubernetes manifests for Kubernetes 1.25.0

78 lines (56 loc) 2.75 kB
# PersistentVolumeClaim A `PersistentVolumeClaim` (PVC) is a request for storage by a pod. !!! tip "" [API Reference](../../reference/cdk8s-plus-25/typescript.md#persistent-volume-claim) A `PersistentVolumeClaim` contains the requirements of the request, and the Kubernetes control plane is responsible providing a physical volume that satisfies the claim's requirements. ```ts import * as kplus from 'cdk8s-plus-25'; import * as cdk8s from 'cdk8s'; const pod = new kplus.Pod(chart, 'Pod'); const container = pod.addContainer({ image: 'node' }); // create the storage request const claim = new kplus.PersistentVolumeClaim(chart, 'Claim', { storage: cdk8s.Size.gibibytes(50), }); // mount a volume based on the request to the container // this will also add the volume itself to the pod spec. container.mount('/data', kplus.Volume.fromPersistentVolumeClaim(claim)); ``` ## Storage Class By default, the `storageClassName` property of a claim is not set. This means that the backing volume can be provided by one of two methods: 1. Dynamically provision a volume with the default storage class. 2. If a default storage class is not configured in the cluster, the backing volume must pre-exist and not be assigned to any storage class. > See [Provisioning](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#provisioning) for more details. You can also provide an explicit storage class name, ```ts const claim = new kplus.PersistentVolumeClaim(chart, 'Claim', { storage: cdk8s.Size.gibibytes(50), storageClassName: 'large-ebs', }); ``` In this case, Kubernetes control plane will either locate an existing volume with the `larg-ebs` storage class, or dynamically provision a new using the appropriate provisioner. You can also pass in a special `""` value, this means the volume must not be assigned to any storage class. Since all dynamically provisioend volumes belong to a storage class, setting this value effectively disables dynamic provisioning for this claim. ```ts const claim = new kplus.PersistentVolumeClaim(chart, 'Claim', { storage: cdk8s.Size.gibibytes(50), // disable dynamic provisioning storageClassName: "", }); ``` ## Bind Binding is a part of the reservation process, but it only creates a one directional link. You can use it to bind a PVC to an existing PV. Note however that if the PV is not bound to the PVC, there's no guarantee this claim will indeed be given to that specific volume. ```ts const claim = new kplus.PersistentVolumeClaim(chart, 'Claim', { storage: cdk8s.Size.gibibytes(50), }); const vol = kplus.PersistentVolume.fromPersistentVolumeName('vol'); // will modify the claim resource to refer to the volume. // but no the other way around. claim.bind(vol); ```