DeepDive: CustomCSI PVC UnMount Failed With Can Not Find The vol_data.json File

Here is the whole story
volume success mount at Jun 2 20:31:15

Jun 2 20:31:15 k8s-node-1 kubelet[11702]: I0602 20:31:15.512970 11702 operation_generator.go:763] “MountVolume.SetUp succeeded for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ storageclass csi-performance-ha (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“jupyter-zimguo\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) “ pod=”prod-ns/jupyter-zimguo”

2025-06-03 01:58:43 begin os patching:

“{\“status\“:{\“conditions\“:[{\“lastTransitionTime\“:\“2025-05-27T05:59:40Z\“,\“status\“:\“True\“,\“type\“:\“Initialized\“},{\“lastProbeTime\“:\“2025-06-03T08:58:43Z\“,\“lastTransitionTime\“:\“2025-06-03T08:58:43Z\“,\“message\“:\“Pod was marked into notReady due to os patching[2025-06-03 01:58:43.210829363 -0700 -07

Jun 3 02:02 the time of reboot

reboot system boot 6.8.0-60-generic Tue Jun 3 02:02 still running

02:02:19 The node boot and kubelet start remount volume

Jun 3 02:02:19 k8s-node-1 kubelet[5695]: I0603 02:02:19.672785 5695 reconciler_common.go:231] “operationExecutor.MountVolume started for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ storageclass csi-performance-ha (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“jupyter-zimguo\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) “ pod=”prod-ns/jupyter-zimguo”

02:02:21 Wait register CustomCSI csi driver

Jun 3 02:02:21 k8s-node-1 kubelet[5695]: E0603 02:02:21.303864 5695 nestedpendingoperations.go:348] Operation for “{volumeName:kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc podName: nodeName:}” failed. No retries permitted until 2025-06-03 02:02:23.303853029 -0700 -07 m=+5.472100283 (durationBeforeRetry 2s). Error: MountVolume.MountDevice failed for volume “pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc” storageclass csi-performance-ha (UniqueName: “kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc”) pod “jupyter-zimguo” (UID: “183d9a26-22fc-4d5e-bff2-b41d7b5b7e10”) : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name com.example.sds.custom-csi not found in the list of registered CSI drivers

Continually to 02:02:51

Jun 3 02:02:51 k8s-node-1 kubelet[5695]: E0603 02:02:51.565995 5695 nestedpendingoperations.go:348] Operation for “{volumeName:kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc podName: nodeName:}” failed. No retries permitted until 2025-06-03 02:03:23.565986862 -0700 -07 m=+65.734234116 (durationBeforeRetry 32s). Error: MountVolume.MountDevice failed for volume “pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc” storageclass csi-performance-ha (UniqueName: “kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc”) pod “jupyter-zimguo” (UID: “183d9a26-22fc-4d5e-bff2-b41d7b5b7e10”) : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name com.example.sds.custom-csi not found in the list of registered CSI drivers

Jun 3 02:02:51 k8s-node-1 kubelet[5695]: I0603 02:02:51.680442 5695 plugin_watcher.go:194] “Adding socket path or updating timestamp to desired state cache” path=”/var/mnt/kubelet/plugins_registry/com.example.sds.custom-csi-reg.sock”

02:02:46 start delete pod

2025-06-03T09:02:46.328940Z system:serviceaccount:prod-ns:hub delete ResponseComplete 200

Jun 3 02:02:48 k8s-node-1 kubelet[5695]: I0603 02:02:48.993413 5695 kubelet.go:2466] “SyncLoop REMOVE” source=”api” pods=[“prod-ns/jupyter-zimguo”]

Jun 3 02:02:46 k8s-node-1 kubelet[5695]: I0603 02:02:46.589967 5695 kubelet.go:2472] “SyncLoop DELETE” source=”api” pods=[“prod-ns/jupyter-zimguo”]

Jun 3 02:02:46 k8s-node-1 kubelet[5695]: I0603 02:02:46.365756 5695 kubelet.go:2472] “SyncLoop DELETE” source=”api” pods=[“prod-ns/jupyter-zimguo”]

Due to the current pod’volume not mounted and container not started, the pod deleted successfully.

02:03:23 global mount(NodeStageVolume) success, and here should have saved the vol_data.json

Jun 3 02:03:23 k8s-node-1 kubelet[5695]: I0603 02:03:23.655384 5695 operation_generator.go:706] “MountVolume.MountDevice succeeded for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ storageclass csi-performance-ha (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“jupyter-zimguo\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) device mount path \“/var/mnt/kubelet/plugins/kubernetes.io/csi/com.example.sds.custom-csi/e87e074abd78d05bd43695b22382976475eb7b7f4143f839307fe42d37b2a79c/globalmount\“” pod=”prod-ns/jupyter-zimguo”

We can see the global path is still on host
root@k8s-node-1:~# ls /var/mnt/kubelet/plugins/kubernetes.io/csi/com.example.sds.custom-csi/e87e074abd78d05bd43695b22382976475eb7b7f4143f839307fe42d37b2a79c/

globalmount vol_data.json

02:03:23 MountVolume.SetUp(NodePublishVolume) failed but saved the json file

Jun 3 02:03:23 k8s-node-1 kubelet[5695]: E0603 02:03:23.675438 5695 nestedpendingoperations.go:348] Operation for “{volumeName:kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc podName: nodeName:}” failed. No retries permitted until 2025-06-03 02:04:27.675413083 -0700 -07 m=+129.843660345 (durationBeforeRetry 1m4s). Error: MountVolume.SetUp failed for volume “pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc” storageclass csi-performance-ha (UniqueName: “kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc”) pod “jupyter-zimguo” (UID: “183d9a26-22fc-4d5e-bff2-b41d7b5b7e10”) : rpc error: code = Internal desc = 8a084a8b93056b5201944038687227ec - 10.200.15.12 - Failed while trying to attach iscsi partition

Then kubelet try to clean the mount after failed
err = csi.NodePublishVolume(
ctx,
volumeHandle,
readOnly,
deviceMountPath,
dir,
accessMode,
publishContext,
volAttribs,
nodePublishSecrets,
fsType,
mountOptions,
nodePublishFSGroupArg,
)

if err \!= nil {  
    // If operation finished with error then we can remove the mount directory.  
    if volumetypes.IsOperationFinishedError(err) {  
        if removeMountDirErr := removeMountDir(c.plugin, dir); removeMountDirErr \!= nil {  
            klog.Error(log("mounter.SetupAt failed to remove mount dir after a NodePublish() error \[%s\]: %v", dir, removeMountDirErr))  
        }  
    }  
    return err  
}

// removeMountDir cleans the mount dir when dir is not mounted and removed the volume data file in dir
func removeMountDir(plug *csiPlugin, mountPath string) error {
klog.V(4).Info(log(“removing mount path [%s]“, mountPath))

mnt, err := isDirMounted(plug, mountPath)  
if err \!= nil {  
    return err  
}  
if \!mnt {  
    klog.V(4).Info(log("dir not mounted, deleting it \[%s\]", mountPath))  
    if err := os.Remove(mountPath); err \!= nil && \!os.IsNotExist(err) {  
        return errors.New(log("failed to remove dir \[%s\]: %v", mountPath, err))  
    }  
    // remove volume data file as well  
    volPath := filepath.Dir(mountPath)  
    dataFile := filepath.Join(volPath, volDataFileName)  
    klog.V(4).Info(log("also deleting volume info data file \[%s\]", dataFile))  
    if err := os.Remove(dataFile); err \!= nil && \!os.IsNotExist(err) {  
        return errors.New(log("failed to delete volume data file \[%s\]: %v", dataFile, err))  
    }  
    // remove volume path  
    klog.V(4).Info(log("deleting volume path \[%s\]", volPath))  
    if err := os.Remove(volPath); err \!= nil && \!os.IsNotExist(err) {  
        return errors.New(log("failed to delete volume path \[%s\]: %v", volPath, err))  
    }  
}  
return nil

}

In this function you can see if the error returned from NodePublish is not from UncertainProgressError and TransientOperationFailure
// operation is finished with a FINAL error.
func IsOperationFinishedError(err error) bool {
if _, ok := err.(*UncertainProgressError); ok {
return false
}
if _, ok := err.(*TransientOperationFailure); ok {
return false
}
return true

}

and the pod target directory is not mounted, then remove the data json file

volDataFileName \= "vol\_data.json"

02:03:37 Finally the next time kubelet try to umount the volume, it report this error:

Jun 3 02:03:37 k8s-node-1 kubelet[5695]: E0603 02:03:37.772848 5695 reconciler_common.go:169] “operationExecutor.UnmountVolume failed (controllerAttachDetachEnabled true) for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) : UnmountVolume.NewUnmounter failed for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) : kubernetes.io/csi: unmounter failed to load volume data file [/var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/mount]: kubernetes.io/csi: failed to open volume data file [/var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/vol_data.json]: open /var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/vol_data.json: no such file or directory” err=”UnmountVolume.NewUnmounter failed for volume \“pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“ (UniqueName: \“kubernetes.io/csi/com.example.sds.custom-csi^pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc\“) pod \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“ (UID: \“183d9a26-22fc-4d5e-bff2-b41d7b5b7e10\“) : kubernetes.io/csi: unmounter failed to load volume data file [/var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/mount]: kubernetes.io/csi: failed to open volume data file [/var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/vol_data.json]: open /var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/vol_data.json: no such file or directory”

Then the kubelet not try to mount volume but only try to umount volume, then it report the error all the time.
The error function at here:
func (p *csiPlugin) NewUnmounter(specName string, podUID types.UID) (volume.Unmounter, error) {
klog.V(4).Info(log(“setting up unmounter for [name=%v, podUID=%v]“, specName, podUID))

kvh, ok := p.host.(volume.KubeletVolumeHost)  
if \!ok {  
    return nil, errors.New(log("cast from VolumeHost to KubeletVolumeHost failed"))  
}

unmounter := \&csiMountMgr{  
    plugin:       p,  
    podUID:       podUID,  
    specVolumeID: specName,  
    kubeVolHost:  kvh,  
}

// load volume info from file  
dir := unmounter.GetPath()  
dataDir := filepath.Dir(dir) // dropoff /mount at end  
data, err := loadVolumeData(dataDir, volDataFileName)  
if err \!= nil {  
    return nil, errors.New(log("unmounter failed to load volume data file \[%s\]: %v", dir, err))  
}  
unmounter.driverName \= csiDriverName(data\[volDataKey.driverName\])  
unmounter.volumeID \= data\[volDataKey.volHandle\]  
unmounter.csiClientGetter.driverName \= unmounter.driverName

return unmounter, nil

}

So according to this story, we can find some points to resolve the issue:

  1. Check why CustomCSI driver NodePublish failed after node patching(see timeline 02:03:23).
  2. Change the NodePublish return error type to match the UncertainProgressError or TransientOperationFailure to skip the json file removal(see the function IsOperationFinishedError).
  3. Stop patching before the Storage team fix this issue.
  4. Reproduction for this issue is to reboot the node then delete the pod before mount success.

Currently we can restart the kubelet with the original node which deleted’s pod attached to recover these PVCs.

Reference:

  1. Audit log:

[internal audit log URL]

  1. Kubelet log:

[internal monitoring log URL]

Other CustomCSI PVC Issues:

As we know, I have met 3 different cases of the CustomCSI issue they are looks similar:

  1. At here [[internal Slack thread]) , the kubelet report error “open /var/mnt/kubelet/pods/183d9a26-22fc-4d5e-bff2-b41d7b5b7e10/volumes/kubernetes.io~csi/pvc-51e441b1-2358-4c5d-bb10-1f75d59d25fc/vol_data.json: no such file or directory”. CustomCSI driver reports an error with `Failed while trying to attach iscsi partition` . Which is triggered by node restart and pod deletion. Need CustomCSI to check the driver code.
  2. [internal Slack thread] kubelet report driver can not register and kubelet connect the driver refused: `Err: connection error: desc = “transport: Error while dialing: dial unix /var/mnt/kubelet/plugins_registry/com.example.sds.custom-csi-reg.sock: connect: connection refused”`. The other csi plugins registered success. This issue has not seen the solution and RCA yet.
  3. [[internal Slack thread]) In this case, all csi driver register failed `driver name kubernetes.io.csi.local not found in the list of registered CSI drivers`. This is k8s known issue https://github.com/kubernetes/kubernetes/issues/127948, after reboot, kubelet failed to create the container. We have a pr to fix this issue https://github.com/kubernetes/kubernetes/issues/127948 (upstream fix PR). Wait core sig review and merge.

VM volume attacher enhancement

Volume attach failed

  1. Duplicated error
2021-09-28T16:00:03.816682107-07:00 stderr F I0928 23:00:03.816558 1 cephvolume.go:73] attach disk &{XMLName:{Space: Local:} Device:disk RawIO: SGIO: Snapshot: Model: Driver:0xc00073b420 Auth:0xc000f49e40 Source:0xc000159860 BackingStore:<nil> Geometry:<nil> BlockIO:<nil> Mirror:<nil> Target:0xc000a58b40 IOTune:0xc00019b970 ReadOnly:<nil> Shareable:<nil> Transient:<nil> Serial:pvc-33003998-6624-4ac9-a923-d94f9401abdf WWN: Vendor: Product: Encryption:<nil> Boot:<nil> Alias:<nil> Address:0xc001420b40} error: virError(Code=27, Domain=20, Message=’XML error: target ‘vdf’ duplicated for disk sources ‘volume-0aab375c-1858-4f09-b276-ea297cd29a3d’ and ‘volume-63ef92c4-a027-476c-a2de-9fcf501dd4de’’) <disk type=’network’ device=’disk’> <driver name=’qemu’ type=’raw’ cache=’none’ io=’native’/> <auth username=’cinder’> <secret type=’ceph’ uuid=’1bcf1a49-b42f-4bc2-6e70-9ea7a4006740’/> </auth> <source protocol=’rbd’ name=’volumes/volume-0aab375c-1858-4f09-b276-ea297cd29a3d’ > <host name=’10.166.77.141’ port=’6789’/> <host name=’10.78.225.48’ port=’6789’/> <host name=’10.33.212.26’ port=’6789’/> <host name=’10.212.255.52’ port=’6789’/> <host name=’10.164.134.166’ port=’6789’/> </source> <target dev=’vdf’ bus=’virtio’/> <iotune> <total_bytes_sec>157286400</total_bytes_sec> <total_iops_sec>300</total_iops_sec> </iotune> <serial>pvc-22650282-34fe-412c-a5a3-1df0bdb3cadd</serial> <alias name=’virtio-disk5’/> <address type=’pci’ domain=’0x0000’ bus=’0x00’ slot=’0x09’ function=’0x0’/> </disk> ➜ ~ k. 130 tSwitched to context “130”. ➜ ~ tk get pv pvc-22650282-34fe-412c-a5a3-1df0bdb3cadd Error from server (NotFound): persistentvolumes “pvc-22650282-34fe-412c-a5a3-1df0bdb3cadd” not found

Dump exists vdf device but persistent xml not found.

  1. If backend volume not exist, report this
I0721 03:39:04.965504 1 cephvolume.go:73] attach disk &{XMLName:{Space: Local:} Device:disk RawIO: SGIO: Snapshot: Model: Driver:0xc0015061c0 Auth:0xc00294c880 Source:0xc0004db310 BackingStore:<nil> Geometry:<nil> BlockIO:<nil> Mirror:<nil> Target:0xc00685fd00 IOTune:0xc0014fc8f0 ReadOnly:<nil> Shareable:<nil> Transient:<nil> Serial:pvc-20e1dd78-f543-40ae-bdb0-3eb74f0ffb1c WWN: Vendor: Product: Encryption:<nil> Boot:<nil> Alias:<nil> Address:0xc001508cc0} error: virError(Code=1, Domain=10, Message=’internal error: unable to execute QEMU command ‘device_add’: Property ‘virtio-blk-device.drive’ can’t find value ‘drive-virtio-disk15’’)

Try to use rbd info to find the volume, if not found, report the error.

  1. List-Watch item lost and restart container recovered:
2023-03-28T16:46:39.34066771-07:00 stderr F I0328 23:46:39.340535 1 streamwatcher.go:103] Unexpected EOF during watch stream event decoding: unexpected EOF 2023-03-28T16:46:39.340722015-07:00 stderr F I0328 23:46:39.340600 1 reflector.go:371] tess.io/ebay/vm-volume/pkg/controller/attach/attach_controller.go:285: Watch close - *v1.VmVolumeAttachment total 2 items received 2023-03-28T16:47:39.094070215-07:00 stderr F I0328 23:47:39.093952 1 reflector.go:371] tess.io/ebay/vm-volume/pkg/controller/attach/attach_controller.go:286: Watch close - *v1.Node total 1007 items received 2023-03-28T16:49:39.350681116-07:00 stderr F I0328 23:49:39.350572 1 streamwatcher.go:103] Unexpected EOF during watch stream event decoding: unexpected EOF 2023-03-28T16:49:39.35071423-07:00 stderr F I0328 23:49:39.350619 1 reflector.go:371] tess.io/ebay/vm-volume/pkg/controller/attach/attach_controller.go:285: Watch close - *v1.VmVolumeAttachment total 0 items received 2023-03-28T16:51:29.857528981-07:00 stderr F I0328 23:51:29.857397 1 attach_controller.go:453] VmVolumeAttachment pvc-891a1e4f-fe72-447d-ac29-efea9675bc51.tess-node-7fm8k is already attached phase 2023-03-28T16:51:29.857578201-07:00 stderr F I0328 23:51:29.857451 1 attach_controller.go:252] tess140/pvc-891a1e4f-fe72-447d-ac29-efea9675bc51.tess-node-7fm8k added to queue 2023-03-28T16:51:32.341806809-07:00 stderr F I0328 23:51:32.341711 1 attach_controller.go:453] VmVolumeAttachment pvc-891a1e4f-fe72-447d-ac29-efea9675bc51.tess-node-7fm8k is already attached phase 2023-03-28T16:51:32.341832149-07:00 stderr F I0328 23:51:32.341743 1 attach_controller.go:252] tess140/pvc-891a1e4f-fe72-447d-ac29-efea9675bc51.tess-node-7fm8k added to queue 2023-03-28T16:51:32.341835164-07:00 stderr F E0328 23:51:32.341758 1 attach_controller.go:323] vmvolumeattachment “tess140/pvc-891a1e4f-fe72-447d-ac29-efea9675bc51.tess-node-7fm8k” in work queue no longer exists 2023-03-28T16:54:35.827164294-07:00 stderr F I0328 23:54:35.827044 1 streamwatcher.go:103] Unexpected EOF during watch stream event decoding: unexpected EOF 2023-03-28T16:54:35.827197159-07:00 stderr F I0328 23:54:35.827105 1 reflector.go:371] tess.io/ebay/vm-volume/pkg/controller/attach/attach_controller.go:285: Watch close - *v1.VmVolumeAttachment total 3 items received 2023-03-28T16:54:37.095045006-07:00 stderr F I0328 23:54:37.094917 1 reflector.go:371] tess.io/ebay/vm-volume/pkg/controller/attach/attach_controller.go:286: Watch close - *v1.Node total 1056 items received 2023-03-28T16:54:40.55082912-07:00 stderr F I0328 23:54:40.550708 1 attach_controller.go:453] VmVolumeAttachment pvc-d0c67ff7-aeb0-4e13-b373-507b335a67fb.tess-node-2nb47 is already attached phase

All attacher happened EOF at the same time.

  1. Double use pci address
​​I0330 00:28:55.070331 1 cephvolume.go:73] attach disk &{XMLName:{Space: Local:} Device:disk RawIO: SGIO: Snapshot: Model: Driver:0xc000024380 Auth:0xc006a51600 Source:0xc000640cd0 BackingStore:<nil> Geometry:<nil> BlockIO:<nil> Mirror:<nil> Target:0xc00342db80 IOTune:0xc005071c30 ReadOnly:<nil> Shareable:<nil> Transient:<nil> Serial:pvc-39c80157-0862-433c-a1ec-49475db818cf WWN: Vendor: Product: Encryption:<nil> Boot:<nil> Alias:<nil> Address:0xc000f5e240} error: virError(Code=27, Domain=20, Message=’XML error: Attempted double use of PCI Address 0000:00:0a.0’)

Auto recovered first time : https://tessio.slack.com/archives/C03JP804D/p1670377925841209
Dumpxml not found the 0x0a address but it is in persistent file and used by a pv. The pv detached failed because not found in dump like detach failed case 1.
The address can transfer to pci address:
<address type=’pci’ domain=’0x0000’ bus=’0x00’ slot=’0x0a’ function=’0x0’/>
So it is a slot conflict issue. Need skip the slot.

Volume detach failed

  1. Volume exist in persistent file but not in the dump
I0330 00:38:54.615254 1 cephvolume.go:227] detach disk &{XMLName:{Space: Local:disk} Device:disk RawIO: SGIO: Snapshot: Model: Driver:0xc000736540 Auth:0xc0027b68a0 Source:0xc000641040 BackingStore:<nil> Geometry:<nil> BlockIO:<nil> Mirror:<nil> Target:0xc004557640 IOTune:0xc0006e4370 ReadOnly:<nil> Shareable:<nil> Transient:<nil> Serial:pvc-febae406-15ad-4d05-9c93-b2d09c197840 WWN: Vendor: Product: Encryption:<nil> Boot:<nil> Alias:<nil> Address:0xc00709cba0} error: virError(Code=9, Domain=10, Message=’operation failed: disk vde not found’)

This case can not directly return nil because the device still exists in the VM. If returned, success might produce complex conditions. Attacher will retry to check and auto return success if actually detach.

  1. Volume exist in dump and host but vm not running
I0417 07:57:33.764883 1 iscsivolume.go:176] detach disk &{XMLName:{Space: Local:disk} Device:disk RawIO: SGIO: Snapshot: Model: Driver:0xc004d3b0a0 Auth:<nil> Source:0xc000a66b90 BackingStore:<nil> Geometry:<nil> BlockIO:<nil> Mirror:<nil> Target:0xc009aefdc0 IOTune:<nil> ReadOnly:<nil> Shareable:<nil> Transient:<nil> Serial:pvc-9ad2511a-d8d9-4b14-b285-7acb4ef33800 WWN: Vendor: Product: Encryption:<nil> Boot:<nil> Alias:<nil> Address:0xc0048ce780} error: virError(Code=55, Domain=20, Message=’Requested operation is not valid: domain is not running’) root@tess-node-bf7rf-tess93:/# virsh list --all Id Name State -——————————————————- - virtlet-19c7472c-40a1-tess-node-69wjv shut off

Cgroup V2 offers a unified hierarchy, better IO QoS — including buffer IO throttling — and cleaner semantics compared to V1. This post documents the end-to-end process of migrating a production Kubernetes cluster to cgroup v2: component version requirements, kernel boot parameters, and compatibility verification results for CPU, memory, PID, hugetlb, and IO controllers.

Read more »
0%