Change:
This issue is very similar to , they have the same symptom: remote volumes of the pods are becoming local mount point after rebooting the Node. And this issue is triggered by The difference is that in , kubelet didn't call , so the global mount point is local, but it will still call for the pod to bind mount the pod volume to the global mount point. Whereas in this issue, kubelet neither call globally nor call for the pod. This is more harmful: After writing some data to the pod volume, pod can't be deleted because kubelet encounter error while unmounting the pod volume: ! Reproduce steps: a cluster with one Node a deployment with two replicas(say and ) using Non-attachable volume (for example Azurefile) the Node with option (Use force deletion to simulate the situation that mount point was left over before rebooting the Node.) back the Node is always in Running state, however, after rebooting, it won't call and the volume it uses is local volume. should call . As mentioned above. No response <details</details<detailsN/A </details<details</details<details</details<details</details<details</details
Clusters with enabled is not impacted.
/sig node storage (for triage)
/remove-sig node sig-storage please triage this first. Thanks
/triage accepted

Discussion:
filepath.Join("pod2uid", "volumes", "fake-plugin", "volume-name"), }, createMountPoint: true, <del> podInfos:         []podInfo{defaultPodInfo}, </del> <ins> podInfos: []podInfo{ { podName:         "pod2", podUID:          "pod2uid", outerVolumeName: "volume-name", innerVolumeName: "volume-name", }, }, </ins> verifyFunc: func(rcInstance *reconciler, fakePlugin *volumetesting.FakeVolumePlugin) error { // for pod that is deleted, volume is considered as mounted mountedPods := rcInstance.actualStateOfWorld.GetMountedVolumes() if len(mountedPods) != 1 { return fmt.Errorf("expected 1 pods to in asw got %d", len(mountedPods)) } <del> if types.UniquePodName("pod2uid") != mountedPods[0].PodName { return fmt.Errorf("expected mounted pod to be %s got %s", "pod2uid", mountedPods[0].PodName) </del> <ins> if types.UniquePodName("pod1uid") != mountedPods[0].PodName { return fmt.Errorf("expected mounted pod to be %s got %s", "pod1uid", mountedPods[0].PodName) } // for pod that is in dsw, volume is in skippedDuringReconstruction skippedVolumes := rcInstance.skippedDuringReconstruction if len(skippedVolumes) != 1 { return fmt.Errorf("expected 1 pods to in skippedDuringReconstruction got %d", len(skippedVolumes)) } if skippedVolumes["fake-plugin/volume-name"] == nil { return fmt.Errorf("expected %s is in skippedDuringReconstruction, got %+v", "fake-plugin/volume-name", skippedVolumes) </ins> } return nil },

blockVolumeMapper: reconstructedVolume.blockVolumeMapper, mounter:           reconstructedVolume.mounter, } <del> if cachedInfo, ok := volumesNeedUpdate[reconstructedVolume.volumeName]; ok { gvl = cachedInfo } gvl.addPodVolume(reconstructedVolume) </del> if volumeInDSW { // Some pod needs the volume. And it exists on disk. Some previous // kubelet must have created the directory, therefore it must have

// this new kubelet so reconcile() calls SetUp and re-mounts the // volume if it's necessary. volumeNeedReport = append(volumeNeedReport, reconstructedVolume.volumeName) <ins> if cachedInfo, ok := rc.skippedDuringReconstruction[reconstructedVolume.volumeName]; ok { gvl = cachedInfo } gvl.addPodVolume(reconstructedVolume) </ins> rc.skippedDuringReconstruction[reconstructedVolume.volumeName] = gvl klog.V(4).InfoS("Volume exists in desired state, marking as InUse", "podName", volume.podName, "volumeSpecName", volume.volumeSpecName) continue

klog.InfoS("Volume is in pending operation, skip cleaning up mounts") } klog.V(2).InfoS("Reconciler sync states: could not find pod information in desired state, update it in actual state", "reconstructedVolume", reconstructedVolume) <ins> if cachedInfo, ok := volumesNeedUpdate[reconstructedVolume.volumeName]; ok { gvl = cachedInfo } gvl.addPodVolume(reconstructedVolume) </ins> volumesNeedUpdate[reconstructedVolume.volumeName] = gvl }