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
164 lines (163 loc) • 5.88 kB
TypeScript
import { Size, ApiObject } from 'cdk8s';
import { Construct } from 'constructs';
import * as base from './base';
import * as k8s from './imports/k8s';
import * as pv from './pv';
/**
* Contract of a `PersistentVolumeClaim`.
*/
export interface IPersistentVolumeClaim extends base.IResource {
}
/**
* Properties for `PersistentVolumeClaim`.
*/
export interface PersistentVolumeClaimProps extends base.ResourceProps {
/**
* Contains the access modes the volume should support.
*
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
* @default - No access modes requirement.
*/
readonly accessModes?: PersistentVolumeAccessMode[];
/**
* Minimum storage size the volume should have.
*
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
* @default - No storage requirement.
*/
readonly storage?: Size;
/**
* Name of the StorageClass required by the claim.
* When this property is not set, the behavior is as follows:
*
* - If the admission plugin is turned on, the storage class marked as default will be used.
* - If the admission plugin is turned off, the pvc can only be bound to volumes without a storage class.
*
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
* @default - Not set.
*/
readonly storageClassName?: string;
/**
* Defines what type of volume is required by the claim.
*
* @default VolumeMode.FILE_SYSTEM
*/
readonly volumeMode?: PersistentVolumeMode;
/**
* The PersistentVolume backing this claim.
*
* The control plane still checks that storage class, access modes,
* and requested storage size on the volume are valid.
*
* Note that in order to guarantee a proper binding, the volume should
* also define a `claimRef` referring to this claim. Otherwise, the volume may be
* claimed be other pvc's before it gets a chance to bind to this one.
*
* If the volume is managed (i.e not imported), you can use `pv.claim()` to easily
* create a bi-directional bounded claim.
*
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding.
* @default - No specific volume binding.
*/
readonly volume?: pv.IPersistentVolume;
}
/**
* A PersistentVolumeClaim (PVC) is a request for storage by a user.
* It is similar to a Pod. Pods consume node resources and PVCs consume PV resources.
* Pods can request specific levels of resources (CPU and Memory).
* Claims can request specific size and access modes
*/
export declare class PersistentVolumeClaim extends base.Resource implements IPersistentVolumeClaim {
/**
* Imports a pvc from the cluster as a reference.
*/
static fromClaimName(scope: Construct, id: string, claimName: string): IPersistentVolumeClaim;
/**
* @see base.Resource.apiObject
*/
protected readonly apiObject: ApiObject;
readonly resourceType = "persistentvolumeclaims";
/**
* Storage requirement of this claim.
*/
readonly storage?: Size;
/**
* Volume mode requirement of this claim.
*/
readonly volumeMode: PersistentVolumeMode;
/**
* Storage class requirment of this claim.
*/
readonly storageClassName?: string;
private readonly _accessModes?;
private _volume?;
constructor(scope: Construct, id: string, props?: PersistentVolumeClaimProps);
/**
* Access modes requirement of this claim.
*/
get accessModes(): PersistentVolumeAccessMode[] | undefined;
/**
* PV this claim is bound to. Undefined means the claim is not bound
* to any specific volume.
*/
get volume(): pv.IPersistentVolume | undefined;
/**
* Bind a claim to a specific volume.
* Note that you must also bind the volume to the claim.
*
* @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding
*
* @param vol The PV to bind to.
*/
bind(vol: pv.IPersistentVolume): void;
/**
* @internal
*/
_toKube(): k8s.PersistentVolumeClaimSpec;
}
/**
* Access Modes.
*/
export declare enum PersistentVolumeAccessMode {
/**
* The volume can be mounted as read-write by a single node.
* ReadWriteOnce access mode still can allow multiple pods to access
* the volume when the pods are running on the same node.
*/
READ_WRITE_ONCE = "ReadWriteOnce",
/**
* The volume can be mounted as read-only by many nodes.
*/
READ_ONLY_MANY = "ReadOnlyMany",
/**
* The volume can be mounted as read-write by many nodes.
*/
READ_WRITE_MANY = "ReadWriteMany",
/**
* The volume can be mounted as read-write by a single Pod.
* Use ReadWriteOncePod access mode if you want to ensure that
* only one pod across whole cluster can read that PVC or write to it.
* This is only supported for CSI volumes and Kubernetes version 1.22+.
*/
READ_WRITE_ONCE_POD = "ReadWriteOncePod"
}
/**
* Volume Modes.
*/
export declare enum PersistentVolumeMode {
/**
* Volume is ounted into Pods into a directory.
* If the volume is backed by a block device and the device is empty,
* Kubernetes creates a filesystem on the device before mounting it
* for the first time.
*/
FILE_SYSTEM = "Filesystem",
/**
* Use a volume as a raw block device. Such volume is presented into a Pod as a block device,
* without any filesystem on it. This mode is useful to provide a Pod the fastest possible way
* to access a volume, without any filesystem layer between the Pod
* and the volume. On the other hand, the application running in
* the Pod must know how to handle a raw block device
*/
BLOCK = "Block"
}