mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #128644 from huww98/multi-volume-part-1
kubelet: don't check for mounted before update dsw PV size
This commit is contained in:
		@@ -180,17 +180,6 @@ func (dswp *desiredStateOfWorldPopulator) populatorLoop(ctx context.Context) {
 | 
			
		||||
// Iterate through all pods and add to desired state of world if they don't
 | 
			
		||||
// exist but should
 | 
			
		||||
func (dswp *desiredStateOfWorldPopulator) findAndAddNewPods(ctx context.Context) {
 | 
			
		||||
	// Map unique pod name to outer volume name to MountedVolume.
 | 
			
		||||
	mountedVolumesForPod := make(map[volumetypes.UniquePodName]map[string]cache.MountedVolume)
 | 
			
		||||
	for _, mountedVolume := range dswp.actualStateOfWorld.GetMountedVolumes() {
 | 
			
		||||
		mountedVolumes, exist := mountedVolumesForPod[mountedVolume.PodName]
 | 
			
		||||
		if !exist {
 | 
			
		||||
			mountedVolumes = make(map[string]cache.MountedVolume)
 | 
			
		||||
			mountedVolumesForPod[mountedVolume.PodName] = mountedVolumes
 | 
			
		||||
		}
 | 
			
		||||
		mountedVolumes[mountedVolume.OuterVolumeSpecName] = mountedVolume
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, pod := range dswp.podManager.GetPods() {
 | 
			
		||||
		// Keep consistency of adding pod during reconstruction
 | 
			
		||||
		if dswp.hasAddedPods && dswp.podStateProvider.ShouldPodContainersBeTerminating(pod.UID) {
 | 
			
		||||
@@ -204,7 +193,7 @@ func (dswp *desiredStateOfWorldPopulator) findAndAddNewPods(ctx context.Context)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		dswp.processPodVolumes(ctx, pod, mountedVolumesForPod)
 | 
			
		||||
		dswp.processPodVolumes(ctx, pod)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -286,10 +275,7 @@ func (dswp *desiredStateOfWorldPopulator) findAndRemoveDeletedPods() {
 | 
			
		||||
 | 
			
		||||
// processPodVolumes processes the volumes in the given pod and adds them to the
 | 
			
		||||
// desired state of the world.
 | 
			
		||||
func (dswp *desiredStateOfWorldPopulator) processPodVolumes(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	pod *v1.Pod,
 | 
			
		||||
	mountedVolumesForPod map[volumetypes.UniquePodName]map[string]cache.MountedVolume) {
 | 
			
		||||
func (dswp *desiredStateOfWorldPopulator) processPodVolumes(ctx context.Context, pod *v1.Pod) {
 | 
			
		||||
	if pod == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
@@ -322,17 +308,17 @@ func (dswp *desiredStateOfWorldPopulator) processPodVolumes(
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Add volume to desired state of world
 | 
			
		||||
		_, err = dswp.desiredStateOfWorld.AddPodToVolume(
 | 
			
		||||
		uniqueVolumeName, err := dswp.desiredStateOfWorld.AddPodToVolume(
 | 
			
		||||
			uniquePodName, pod, volumeSpec, podVolume.Name, volumeGIDValue, seLinuxContainerContexts[podVolume.Name])
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logger.Error(err, "Failed to add volume to desiredStateOfWorld", "pod", klog.KObj(pod), "volumeName", podVolume.Name, "volumeSpecName", volumeSpec.Name())
 | 
			
		||||
			dswp.desiredStateOfWorld.AddErrorToPod(uniquePodName, err.Error())
 | 
			
		||||
			allVolumesAdded = false
 | 
			
		||||
		} else {
 | 
			
		||||
			logger.V(4).Info("Added volume to desired state", "pod", klog.KObj(pod), "volumeName", podVolume.Name, "volumeSpecName", volumeSpec.Name())
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		dswp.checkVolumeFSResize(pod, podVolume, pvc, volumeSpec, uniquePodName, mountedVolumesForPod)
 | 
			
		||||
		logger.V(4).Info("Added volume to desired state", "pod", klog.KObj(pod), "volumeName", podVolume.Name, "volumeSpecName", volumeSpec.Name())
 | 
			
		||||
		dswp.checkVolumeFSResize(pod, podVolume, pvc, volumeSpec, uniqueVolumeName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// some of the volume additions may have failed, should not mark this pod as fully processed
 | 
			
		||||
@@ -361,8 +347,7 @@ func (dswp *desiredStateOfWorldPopulator) checkVolumeFSResize(
 | 
			
		||||
	podVolume v1.Volume,
 | 
			
		||||
	pvc *v1.PersistentVolumeClaim,
 | 
			
		||||
	volumeSpec *volume.Spec,
 | 
			
		||||
	uniquePodName volumetypes.UniquePodName,
 | 
			
		||||
	mountedVolumesForPod map[volumetypes.UniquePodName]map[string]cache.MountedVolume) {
 | 
			
		||||
	uniqueVolumeName v1.UniqueVolumeName) {
 | 
			
		||||
 | 
			
		||||
	// if a volumeSpec does not have PV or has InlineVolumeSpecForCSIMigration set or pvc is nil
 | 
			
		||||
	// we can't resize the volume and hence resizing should be skipped.
 | 
			
		||||
@@ -371,13 +356,6 @@ func (dswp *desiredStateOfWorldPopulator) checkVolumeFSResize(
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uniqueVolumeName, exist := getUniqueVolumeName(uniquePodName, podVolume.Name, mountedVolumesForPod)
 | 
			
		||||
	if !exist {
 | 
			
		||||
		// Volume not exist in ASW, we assume it hasn't been mounted yet. If it needs resize,
 | 
			
		||||
		// it will be handled as offline resize(if it indeed hasn't been mounted yet),
 | 
			
		||||
		// or online resize in subsequent loop(after we confirm it has been mounted).
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// volumeSpec.ReadOnly is the value that determines if volume could be formatted when being mounted.
 | 
			
		||||
	// This is the same flag that determines filesystem resizing behaviour for offline resizing and hence
 | 
			
		||||
	// we should use it here. This value comes from Pod.spec.volumes.persistentVolumeClaim.readOnly.
 | 
			
		||||
@@ -395,21 +373,6 @@ func (dswp *desiredStateOfWorldPopulator) checkVolumeFSResize(
 | 
			
		||||
	dswp.actualStateOfWorld.InitializeClaimSize(klog.TODO(), uniqueVolumeName, pvcStatusCap)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getUniqueVolumeName(
 | 
			
		||||
	podName volumetypes.UniquePodName,
 | 
			
		||||
	outerVolumeSpecName string,
 | 
			
		||||
	mountedVolumesForPod map[volumetypes.UniquePodName]map[string]cache.MountedVolume) (v1.UniqueVolumeName, bool) {
 | 
			
		||||
	mountedVolumes, exist := mountedVolumesForPod[podName]
 | 
			
		||||
	if !exist {
 | 
			
		||||
		return "", false
 | 
			
		||||
	}
 | 
			
		||||
	mountedVolume, exist := mountedVolumes[outerVolumeSpecName]
 | 
			
		||||
	if !exist {
 | 
			
		||||
		return "", false
 | 
			
		||||
	}
 | 
			
		||||
	return mountedVolume.VolumeName, true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// podPreviouslyProcessed returns true if the volumes for this pod have already
 | 
			
		||||
// been processed/reprocessed by the populator. Otherwise, the volumes for this pod need to
 | 
			
		||||
// be reprocessed.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user