diff --git a/pkg/kubelet/volumemanager/cache/actual_state_of_world.go b/pkg/kubelet/volumemanager/cache/actual_state_of_world.go index 4ccd922569d..bc8495dd93b 100644 --- a/pkg/kubelet/volumemanager/cache/actual_state_of_world.go +++ b/pkg/kubelet/volumemanager/cache/actual_state_of_world.go @@ -25,6 +25,7 @@ import ( "sync" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/volume" @@ -284,6 +285,9 @@ type attachedVolume struct { // volumeInUseErrorForExpansion indicates volume driver has previously returned volume-in-use error // for this volume and volume expansion on this node should not be retried volumeInUseErrorForExpansion bool + + // persistentVolumeSize records size of the volume when pod was started. + persistentVolumeSize resource.Quantity } // The mountedPod object represents a pod for which the kubelet volume manager diff --git a/pkg/kubelet/volumemanager/cache/desired_state_of_world.go b/pkg/kubelet/volumemanager/cache/desired_state_of_world.go index c96b804a377..a52f7d28ea0 100644 --- a/pkg/kubelet/volumemanager/cache/desired_state_of_world.go +++ b/pkg/kubelet/volumemanager/cache/desired_state_of_world.go @@ -186,6 +186,9 @@ type volumeToMount struct { // desiredSizeLimit indicates the desired upper bound on the size of the volume // (if so implemented) desiredSizeLimit *resource.Quantity + + // persistentVolumeSize records desired size of a persistent volume. + persistentVolumeSize resource.Quantity } // The pod object represents a pod that references the underlying volume and @@ -274,7 +277,7 @@ func (dsw *desiredStateOfWorld) AddPodToVolume( } } } - dsw.volumesToMount[volumeName] = volumeToMount{ + vmt := volumeToMount{ volumeName: volumeName, podsToMount: make(map[types.UniquePodName]podToMount), pluginIsAttachable: attachable, @@ -283,6 +286,15 @@ func (dsw *desiredStateOfWorld) AddPodToVolume( reportedInUse: false, desiredSizeLimit: sizeLimit, } + // record desired size of the volume + if volumeSpec.PersistentVolume != nil { + pvCap := volumeSpec.PersistentVolume.Spec.Capacity.Storage() + if pvCap != nil { + vmt.persistentVolumeSize = *pvCap + } + } + + dsw.volumesToMount[volumeName] = vmt } oldPodMount, ok := dsw.volumesToMount[volumeName].podsToMount[podName] mountRequestTime := time.Now()