Azure / azure-storage-fuse

A virtual file system adapter for Azure Blob storage
Other
650 stars 205 forks source link

Can not mount blob to AKS cluster via Python image using blobfuse2. #1079

Closed kumaaaah closed 1 year ago

kumaaaah commented 1 year ago

Which version of blobfuse was used?

blobfuse2 version 2.0.2

Which OS distribution and version are you using?

AKS kernel version 1.23.12 Docker: FROM python:3.10.4

root@mydocker:/home# cat /proc/version Linux version 5.4.0-1091-azure (buildd@lcy02-amd64-023) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #96~18.04.1-Ubuntu SMP Tue Aug 30 19:15:32 UTC 2022

root@mydocker:/home# cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"

If relevant, please share your mount command.

install blobfuse2

wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb apt-get update apt-get install libfuse3-dev fuse3 -y apt-get install blobfuse2

mount command

blobfuse2 mount /home/blobfmount --config-file=/home/blobfuse2/config.yaml --container-name=mycontainer --log-level=log_debug --log-file-path=./bobfuse2b.log

here is config.yaml below:

Refer ./setup/baseConfig.yaml for full set of config parameters

allow-other: true

logging: type: syslog level: log_debug

components:

libfuse: attribute-expiration-sec: 120 entry-expiration-sec: 120 negative-entry-expiration-sec: 240

file_cache: path: /home/blobfuse/tempcache timeout-sec: 120 max-size-mb: 4096

attr_cache: timeout-sec: 7200

azstorage: type: block account-name: account-key: endpoint: container:

What was the issue encountered?

After I ran the blobfuse2 mount command, I cannot check the files in the destination blob or create test file and check in blob.

Have you found a mitigation/solution?

Not yet.

Please share logs if available.

root@mydocker:/home/blobfmount# cat bobfuse2b.log Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_CRIT [mount.go (384)]: Starting Blobfuse2 Mount : 2.0.2 on [Debian GNU/Linux 11 (bullseye)] Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_CRIT [mount.go (385)]: Logging level set to : LOG_DEBUG Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [libfuse.go (220)]: Libfuse::Configure : libfuse Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [libfuse.go (260)]: Libfuse::Configure : read-only false, allow-other true, default-perm 511, entry-timeout 120, attr-time 120, negative-timeout 240, ignore-open-flags: true, nonempty false Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [file_cache.go (197)]: FileCache::Configure : file_cache Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [file_cache.go (272)]: FileCache::Configure : Using default eviction policy Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [file_cache.go (291)]: FileCache::Configure : create-empty false, cache-timeout 120, tmp-path /home/blobfuse/tempcache, max-size-mb 4096, high-mark 80, low-mark 60 Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [attr_cache.go (121)]: AttrCache::Configure : attr_cache Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [attr_cache.go (145)]: AttrCache::Configure : cache-timeout 7200, symlink false, cache-on-list true Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [azstorage.go (83)]: AzStorage::Configure : azstorage Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [config.go (270)]: ParseAndValidateConfig : Parsing config Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [config.go (372)]: ParseAndValidateConfig : using the following proxy address from the config file: Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [config.go (376)]: ParseAndValidateConfig : sdk logging from the config file: false Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [config.go (479)]: ParseAndReadDynamicConfig : Reparsing config Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_DEBUG [config.go (383)]: ParseAndValidateConfig : Getting auth type Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [config.go (467)]: ParseAndValidateConfig : Account: mystorageaccount, Container: mycontainer, AccountType: BLOCK, Auth: KEY, Prefix: , Endpoint: https://mystorageaccount.blob.core.chinacloudapi.cn/, ListBlock: 0, MD5 : false false, Virtual Directory: true Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [config.go (471)]: ParseAndValidateConfig : Retry Config: Retry count 5, Max Timeout 900, BackOff Time 4, Max Delay 60 Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [block_blob.go (173)]: BlockBlob::SetupPipeline : Setting up Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [block_blob.go (135)]: BlockBlob::getCredential : Getting credential Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_DEBUG [azauth.go (79)]: azAuth::getAzAuth : Account: mystorageaccount, AccountType: BLOCK, Protocol: https, Endpoint: https://mystorageaccount.blob.core.chinacloudapi.cn/ Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [block_blob.go (260)]: BlockBlob::SetPrefixPath : path Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_TRACE [block_blob.go (209)]: BlockBlob::TestPipeline : Validating Wed Mar 8 06:31:11 UTC 2023 : blobfuse2[607] : LOG_INFO [mount.go (392)]: mount: Mounting blobfuse2 on /home/blobfmount root@mydocker:/home/blobfmount# cd ..

I tried to do an unmount command and returned this:

root@mydocker:/home# blobfuse2 unmount all Error: failed to list mount points [open /etc/mtab: no such file or directory] root@mydocker:/home# blobfuse2 mount /home/blobfmount --config-file=/home/blobfuse2/config.yaml --container-name=mycontainer --log-level=log_debug --log-file-path=./bobfuse2b.log Error: mount directory is not empty root@mydocker:/home# rm -f ./blobfuse2/* rm: cannot remove './blobfuse2/config.yaml': Device or resource busy root@mydocker:/home#

vibhansa-msft commented 1 year ago

As you have set "allow-other: true" ensure this feature is enable in /etc/fuse.conf file. If this is FNS (non-HNS) account, ensure you have added "--virtual-directory=true" to cli options. On this system it appears you do not have /etc/fstab, which is used by blobfuse to list and unmount. In such case you can always use "fusermount3 -u ' command to unmount the container.

kumaaaah commented 1 year ago

As you have set "allow-other: true" ensure this feature is enable in /etc/fuse.conf file. If this is FNS (non-HNS) account, ensure you have added "--virtual-directory=true" to cli options. On this system it appears you do not have /etc/fstab, which is used by blobfuse to list and unmount. In such case you can always use "fusermount3 -u ' command to unmount the container.

Thank you. Before I try re-deploy blobfuse2, I want to confirm this situation: to install blobfuse2, I get information referred to https://docs.azure.cn/en-us/storage/blobs/blobfuse2-how-to-deploy#configure-the-microsoft-package-repository

In my case, I deployed on a Debian 11 distribution:

to Configure the Microsoft package repository.

wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get update sudo apt-get install libfuse3-dev fuse3

Then I installed blobfuse2.

But in the ./docker/dockerfile the installation is as below:

Install fuse library

RUN \ apt update && \ apt-get install -y ca-certificates vim rsyslog RUN if [ "$FUSE2" = "TRUE" ] ; then apt-get install -y fuse ; else apt-get install -y fuse3 ; fi

The different is I didn't install ca-certificates vim rsyslog and fuse but fuse3 Will this be impact?

vibhansa-msft commented 1 year ago

If you are running blobfuse on a container you can follow this. And better to be consitent with fuse3 on container and host. To run container use

    docker run -it --rm \
        --cap-add=SYS_ADMIN \
        --device=/dev/fuse \
        --security-opt apparmor:unconfined \
        -e AZURE_STORAGE_ACCOUNT \
        -e AZURE_STORAGE_ACCESS_KEY \
        -e AZURE_STORAGE_ACCOUNT_CONTAINER \
        <image>
pa-mc commented 1 year ago

I think the AKS version is somewhat related. One of my cluster is using AKS 1.24.9, I think it cannot even use blobfuse csi driver 2+

For instance, I got an error like the following. Even though I did az aks update --enable-blob-driver -n clusterName -g rg, I suspect AKS 1.25.0 below does not have blobfuse 2.0 enabled. This is a guess, I still haven't found the relavent documentation just yet

  MountVolume.MountDevice failed for volume "pv-stpabackupsprod-blob-container"
  : rpc error: code = Internal desc = Mount failed with error: rpc error: code =
  Unknown desc = exit status 1 fuse: unknown option `--virtual-directory=true'

  no config filedone reading env vars, output: 

Also on a related issue: https://github.com/Azure/azure-storage-fuse/issues/1078 (I think) Even after adding --virtual-directory=true to the AKS 1.25.5 storageclass, I have a following weird behaviour.

After restarting the pod the second time that has the blob-fuse mount, the mount disappeared... > I think the problem is this `GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/c7406bcd-1579-499b-a562-5a28ac533388/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount": remove /var/lib/kubelet/pods/c7406bcd-1579-499b-a562-5a28ac533388/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount: device or resource busy` ```shell # After a fresh kubectl apply I0308 20:43:54.932883 6583 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0308 20:43:54.932896 6583 utils.go:76] GRPC request: {"secrets":"***stripped***","staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","resourceGroup":"rg-backups-prod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:43:54.933243 6583 blob.go:414] volumeID(rg-backups-prod#stpabackupsprod#backups-prod) authEnv: [] I0308 20:43:54.933290 6583 nodeserver.go:349] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount protocol volumeId rg-backups-prod#stpabackupsprod#backups-prod context map[containerName:backups-prod resourceGroup:rg-backups-prod] mountflags [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true] mountOptions [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --cancel-list-on-mount-seconds=10 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod --pre-mount-validate=true --use-https=true] args /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount -o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --cancel-list-on-mount-seconds=10 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod --pre-mount-validate=true --use-https=true serverAddress stpabackupsprod.blob.core.windows.net I0308 20:43:54.933314 6583 nodeserver.go:144] mouting using blobfuse proxy I0308 20:43:54.933699 6583 nodeserver.go:158] calling BlobfuseProxy: MountAzureBlob function I0308 20:43:55.136247 6583 nodeserver.go:397] volume(rg-backups-prod#stpabackupsprod#backups-prod) mount on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" succeeded I0308 20:43:55.136276 6583 utils.go:82] GRPC response: {} I0308 20:43:55.138681 6583 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0308 20:43:55.138693 6583 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-ltccl","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"30befd9c-d850-464f-9cb9-9ddb789ab67f","csi.storage.k8s.io/serviceAccount.name":"default","resourceGroup":"rg-backups-prod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:43:55.139102 6583 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0308 20:43:55.139124 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:43:55.140316 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:43:55.141314 6583 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0308 20:43:55.141325 6583 utils.go:82] GRPC response: {} # After the first deletion of the pod, notice there is a `GRPC error: rpc error: code` due to `device or resource busy` I0308 20:44:25.288113 6583 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0308 20:44:25.288123 6583 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-shw75","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"07a6dec5-faba-451e-a9c3-f95dd627ad8a","csi.storage.k8s.io/serviceAccount.name":"default","resourceGroup":"rg-backups-prod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:44:25.288521 6583 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0308 20:44:25.288538 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:44:25.289794 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:44:25.290840 6583 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0308 20:44:25.290856 6583 utils.go:82] GRPC response: {} I0308 20:44:26.495366 6583 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0308 20:44:26.495384 6583 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:44:26.495443 6583 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:44:26.495461 6583 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0308 20:44:26.495474 6583 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:44:26.496899 6583 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" E0308 20:44:26.497033 6583 utils.go:80] GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount": remove /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount: device or resource busy I0308 20:44:26.998468 6583 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0308 20:44:26.998492 6583 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:44:26.998561 6583 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:44:26.998583 6583 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0308 20:44:26.998598 6583 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:44:27.000033 6583 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0308 20:44:27.000108 6583 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/30befd9c-d850-464f-9cb9-9ddb789ab67f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0308 20:44:27.000119 6583 utils.go:82] GRPC response: {} # After second deletion of the pod I0308 20:45:33.367209 6583 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0308 20:45:33.367220 6583 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/0051302b-af83-404f-b041-556a95df86c5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-tvgr5","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"0051302b-af83-404f-b041-556a95df86c5","csi.storage.k8s.io/serviceAccount.name":"default","resourceGroup":"rg-backups-prod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:45:33.367598 6583 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/0051302b-af83-404f-b041-556a95df86c5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0308 20:45:33.367615 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/0051302b-af83-404f-b041-556a95df86c5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:45:33.368790 6583 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/0051302b-af83-404f-b041-556a95df86c5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0308 20:45:33.369743 6583 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/0051302b-af83-404f-b041-556a95df86c5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0308 20:45:33.369764 6583 utils.go:82] GRPC response: {} I0308 20:45:34.573365 6583 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0308 20:45:34.573379 6583 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0308 20:45:34.573418 6583 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:45:34.573440 6583 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0308 20:45:34.573464 6583 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0308 20:45:34.575595 6583 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0308 20:45:34.575655 6583 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/07a6dec5-faba-451e-a9c3-f95dd627ad8a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0308 20:45:34.575666 6583 utils.go:82] GRPC response: {} ```

btw, this is my PV mount options

apiVersion: v1
kind: PersistentVolume
metadata:
  name: yourPV
spec:
  capacity:
    storage: 500Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: yourPVC
    namespace: pa-data-services
  # Retain allows the feature that even deleting the PVC & PV the external Azure Blob Container or Azure File Shares WILL NOT get deleted. 
  # That is quite important, because that means even somehow the ENTIRE Kubernetes cluster is gone. We still have our data.
  persistentVolumeReclaimPolicy: Retain
  storageClassName: azureblob-fuse-premium
  csi:
    # This driver, however, does not come pre-installed when creating an AKS. Also, it seems to be in preview. 
    # So there is an elaborated steps to enable and install it. 
    # See the README.md section of: ## About blob-csi-driver
    driver: blob.csi.azure.com
    readOnly: false
    # make sure this volumeid is unique in the cluster
    # `#` is not allowed in self defined volumeHandle
    volumeHandle: rg-backups-prod#stpabackupsprod#backups-prod
    volumeAttributes:
      resourceGroup: rG
      containerName: containerName
    nodeStageSecretRef:
      name: stpabackupsprod
      namespace: pa-data-services
  mountOptions:
    - '-o allow_other'
    - '--file-cache-timeout-in-seconds=120'
    - '--use-attr-cache=true'
    - '-o attr_timeout=120'
    - '-o entry_timeout=120'
    - '-o negative_timeout=120'
    - '--log-level=LOG_DEBUG'
    - '--cache-size-mb=1000'
    - '--virtual-directory=true'

@vibhansa-msft

Wait a minute... I just re-read the whole Use Azure Blob storage Container Storage Interface (CSI) driver documentation by Azure. Specifically, the following paragraph & callout box, does that mean AKS 1.25.5 NO LONGER support blobfuse but only NFS v3, i.e., you can only use azureblob-nfs-premium storageclass. In other words, your Azure Storage Account MUST have HNS & NFS v3 enabled?

Screenshot 2023-03-08 at 20 58 50

This is what the azureblob-nfs-premium storageclass looks like.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azureblob-nfs-premium
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
    kubernetes.io/cluster-service: 'true'
provisioner: blob.csi.azure.com
parameters:
  protocol: nfs
  skuName: Premium_LRS
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate
vibhansa-msft commented 1 year ago

Blobfuse has no restriciton related to HNS, you can use it for both FNS and HNS. For you query on "device busy" causing unmount to fail, this generally hits when you have a console which has set its path to the mount point or someone is using the mount path and in parallel you try to unmount. If you exit all your shell and unmount it will work fine. Also, there are linux commands to force unmount as well. For the AKS related query @andyzhangx can answer.

pa-mc commented 1 year ago

Blobfuse has no restriciton related to HNS, you can use it for both FNS and HNS. For you query on "device busy" causing unmount to fail, this generally hits when you have a console which has set its path to the mount point or someone is using the mount path and in parallel you try to unmount. If you exit all your shell and unmount it will work fine. Also, there are linux commands to force unmount as well. For the AKS related query @andyzhangx can answer.

CC: @andyzhangx

Hm... but when I tried to mount an Azure Storage Account that does not have HNS & does not have NFS v3 enabled using storageClassName: azureblob-nfs-premium, I got the following error.

E0309 03:21:35.312356    5969 utils.go:80] GRPC error: rpc error: code = Internal desc = volume(rg-backups-prod#stpabackupsprod#backups-prod) mount "stpabackupsprod.blob.core.windows.net:/stpabackupsprod/backups-prod" on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" failed with mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs -o sec=sys,vers=3,nolock stpabackupsprod.blob.core.windows.net:/stpabackupsprod/backups-prod /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount
Output: mount.nfs: mounting stpabackupsprod.blob.core.windows.net:/stpabackupsprod/backups-prod failed, reason given by server: No such file or directory

But if I were to use the same storageClassName: azureblob-nfs-premium to mount an Azure Storage Account that has both HNS & NFS v3 enabled, it can mount it correctly. Also, the problem of killing the pod randomly then the mount disappeard also went away.

Just a reminder, all these are under a specific version AKS, that is AKS 1.25.5. I do not see any of these behaviours in AKS 1.24.9, which is why I suspected that AKS 1.25.5 only supports NFS v3 now. Especially it seems the Azure AKS documentation specifically called it out?

image

andyzhangx commented 1 year ago

@pa-mc first error is expected since NFSv3 is not enabled in your account in the beginning. BTW, we will update the AKS doc soon by remove that notion, currently AKS 1.25+ already supports blobfuse and NFSv3

andyzhangx commented 1 year ago

btw, for HNS support, you need to set --use-adls=true in mount options if you bring your own account.

https://github.com/kubernetes-sigs/blob-csi-driver/blob/master/docs/driver-parameters.md

pa-mc commented 1 year ago

@pa-mc first error is expected since NFSv3 is not enabled in your account in the beginning. BTW, we will update the AKS doc soon by remove that notion, currently AKS 1.25+ already supports blobfuse and NFSv3

@andyzhangx thanks for the clarification! In my case, I am using static provisioning instead of dynamic provisioning.

A related question: How do I determine which version of blobfuse AKS is using? Or how do I force AKS to use a specific version of blobfuse?

Because when I tried to use - '--virtual-directory=true' mount option on AKS 1.24.9, I got option not supported error. But after hopping into a csi-blob-node-pod like the following. Both blobfuse binaries are there. When I'm using AKS 1.25.5 there is no problem using the - '--virtual-directory=true' mount option.

❯ kubectl exec -it csi-blob-node-lfkx9 -c blob -n kube-system -- /bin/sh
# blobfuse -v
blobfuse 1.4.5
# blobfuse2 -v
blobfuse2 version 2.0.2
andyzhangx commented 1 year ago

@pa-mc AKS 1.25 is on Ubuntu 22.04 and it only supports blobfuse v2, and before 1.25, AKS is on Ubuntu 18.04, both blobfuse v1 & v2 are supported. I would suggest using protocol: fuse2 in sc or pv config even before AKS 1.25, then your application won't break if you upgrade to 1.25 or later verson since you are always using blobfusev2 on any aks versions.

pa-mc commented 1 year ago

@andyzhangx @vibhansa-msft Sorry for the long reply below, but I think this will illustrate my specific edge case that causes blobfuse2 to break, please hear me out :)

The Scenario

We have a database (OrientDB) backup daily on an Azure blob store that does not support NFS v3 protocol, so all I can work with is Blobfuse v1 or v2.

azure blob store property Screenshot 2023-03-09 at 09 41 41

I have two cluster one is AKS 1.25.5, one is AKS 1.24.9. Both have the exact same k8s Deployment to be run. That is a statically provisioned PV volume map to the Azure Blob Store mentioned above, and it has been claimed through PVC and mounted into a k8s Deployment type with node selector and tolerations so it only attaches to a very large node_pool, so it can do daily OrientDB restore and kicking off the subsequent Data pipeline for ETL purposes.

Now here is the specific scenario, due to the limitation with OrientDB (long story... I'll spare you the details here...), for each data ETL run, we have to kill the k8s deployment type to clear out the cache. (we are not deleting the whole Deployment type, we only delete the undelrying Pods, so AKS will recover the Pods itself).

The following set of comments + csi driver logs will illustrate why I think perhaps there is a little bug in blobfuse2. Again, I could be totally wrong, but here is how I came to that logical conclusion.

Starting with AKS 1.25.5 + protocol: fuse2

Here is my PV manifest specifically using fuse2 ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-stpabackupsprod-blob-container spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany claimRef: apiVersion: v2 kind: PersistentVolumeClaim name: pvc-stpabackupsprod-blob-container namespace: pa-data-services persistentVolumeReclaimPolicy: Retain storageClassName: azureblob-fuse-premium csi: driver: blob.csi.azure.com readOnly: false volumeHandle: rg-backups-prod#stpabackupsprod#backups-prod volumeAttributes: resourceGroup: rg-backups-prod storageAccount: stpabackupsprod containerName: backups-prod protocol: fuse2 nodeStageSecretRef: name: stpabackupsprod namespace: pa-data-services mountOptions: - '-o allow_other' - '--file-cache-timeout-in-seconds=120' - '--use-attr-cache=true' - '-o attr_timeout=120' - '-o entry_timeout=120' - '-o negative_timeout=120' - '--log-level=LOG_DEBUG' - '--cache-size-mb=1000' - '--virtual-directory=true' ```
Here is the CSI driver log as soon as I did a `kubectl apply -f`, which is a k8s Deployment with PVC that claims a statically provisioned PV that mapping to the Azure Blob Store through Fuse2. As you can see, it properly mounted the Blob, and I can see all my files in the Pod after exec into the pod ```shell I0309 14:15:29.733412 5808 nodeserver.go:144] mouting using blobfuse proxy I0309 14:15:29.733831 5808 nodeserver.go:158] calling BlobfuseProxy: MountAzureBlob function I0309 14:15:31.455256 5808 nodeserver.go:397] volume(rg-backups-prod#stpabackupsprod#backups-prod) mount on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" succeeded I0309 14:15:31.455281 5808 utils.go:82] GRPC response: {} I0309 14:15:31.458183 5808 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 14:15:31.458194 5808 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-zgdlf","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"7114a722-9c85-4028-b2ba-18084f4f937f","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:15:31.458562 5808 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 14:15:31.458627 5808 mount_linux.go:244] Detected OS without systemd I0309 14:15:31.458634 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:15:31.459798 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:15:31.460708 5808 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 14:15:31.460721 5808 utils.go:82] GRPC response: {} ```
Now the first time I intentionally deleted the Pod, and AKS will automically bring up another Pod as expected. However, as you can see in the CSI driver log, there is a "device or resource busy" error during unmounting. All I did was kill the pod and AKS restarted it, there is nothing else running against that mount. Make things even more weird, again notice at the bottom of this log, it actually did sucessfully umounted the volume. However, when I hop into the restarted pod, I can still see my files from Azure blob store mounted into the Pod. (It gets better :lol:) ```shell I0309 14:17:33.091647 5808 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 14:17:33.091659 5808 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-89s4g","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"9e42cec4-b769-4b52-bf30-31b92944be95","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:17:33.092132 5808 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 14:17:33.092151 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:17:33.093272 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:17:33.094265 5808 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 14:17:33.094276 5808 utils.go:82] GRPC response: {} I0309 14:17:34.197473 5808 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 14:17:34.197490 5808 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:17:34.197556 5808 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:17:34.197573 5808 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 14:17:34.197588 5808 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:17:34.199377 5808 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" E0309 14:17:34.199413 5808 utils.go:80] GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount": remove /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount: device or resource busy I0309 14:17:34.700859 5808 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 14:17:34.700876 5808 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:17:34.700954 5808 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:17:34.700972 5808 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 14:17:34.701023 5808 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:17:34.702487 5808 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 14:17:34.702569 5808 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/7114a722-9c85-4028-b2ba-18084f4f937f/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 14:17:34.702620 5808 utils.go:82] GRPC response: {} ```
Now I delete the pod again, you know just to mess with you, JK, I just want to see what would happen if I delete it again. The end result is after hop into the restarted Pod, I no longer can see any files except a top level two directory /mnt/stpabackupsprod/ and that is it nothing else shows up. As you can see from the log, it's because it actually tried to mount the volume through NodePublishVolume, and actually succeeded. However, then immediately called a /csi.v1.Node/NodeUnpublishVolume on its own. That does explains why I couldn't see any files, because it unmounted itself. However, I have no idea why it would unmount itself? ```shell I0309 14:18:18.144772 5808 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 14:18:18.144782 5808 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/8c5d1d6b-117e-49ad-a2db-2b0767c9684d/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-4vzfs","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"8c5d1d6b-117e-49ad-a2db-2b0767c9684d","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:18:18.145151 5808 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/8c5d1d6b-117e-49ad-a2db-2b0767c9684d/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 14:18:18.145166 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/8c5d1d6b-117e-49ad-a2db-2b0767c9684d/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:18:18.146333 5808 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/8c5d1d6b-117e-49ad-a2db-2b0767c9684d/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 14:18:18.147256 5808 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/8c5d1d6b-117e-49ad-a2db-2b0767c9684d/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 14:18:18.147267 5808 utils.go:82] GRPC response: {} I0309 14:18:19.456927 5808 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 14:18:19.456948 5808 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 14:18:19.457044 5808 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:18:19.457136 5808 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 14:18:19.457276 5808 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 14:18:19.462202 5808 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 14:18:19.462282 5808 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/9e42cec4-b769-4b52-bf30-31b92944be95/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 14:18:19.462296 5808 utils.go:82] GRPC response: {} ```

Now let's look at the AKS 1.24.9 + protocol: fuse2

Here is my PV manifest specifically using fuse2, it's the exact same manifest when I was testing with AKS 1.25.5 + protocol: fuse2 ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-stpabackupsprod-blob-container spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany claimRef: apiVersion: v2 kind: PersistentVolumeClaim name: pvc-stpabackupsprod-blob-container namespace: pa-data-services persistentVolumeReclaimPolicy: Retain storageClassName: azureblob-fuse-premium csi: driver: blob.csi.azure.com readOnly: false volumeHandle: rg-backups-prod#stpabackupsprod#backups-prod volumeAttributes: resourceGroup: rg-backups-prod storageAccount: stpabackupsprod containerName: backups-prod protocol: fuse2 nodeStageSecretRef: name: stpabackupsprod namespace: pa-data-services mountOptions: - '-o allow_other' - '--file-cache-timeout-in-seconds=120' - '--use-attr-cache=true' - '-o attr_timeout=120' - '-o entry_timeout=120' - '-o negative_timeout=120' - '--log-level=LOG_DEBUG' - '--cache-size-mb=1000' - '--virtual-directory=true' ```
Then I ran the exact same experiments. kubectl apply for the first, then delete once, twice, and I even deleted a third time. The result is after the second deletion, all the mounted files disappeared. You can see the super long CSI driver log in the expansion. ```shell ❯ kubectl logs csi-blob-node-c6bcj -c blob -n kube-system -f I0309 15:20:06.037854 7519 main.go:117] set up prometheus server on [::]:29635 I0309 15:20:06.038040 7519 blob.go:235] DRIVER INFORMATION: ------------------- Build Date: "2023-02-24T09:16:45Z" Compiler: gc Driver Name: blob.csi.azure.com Driver Version: v1.19.1 Git Commit: 0aa1d0bc7ebcedf76297fd65b35c56f68b31b27a Go Version: go1.19.1 Platform: linux/amd64 Streaming logs below: I0309 15:20:06.038054 7519 blob.go:238] driver userAgent: blob.csi.azure.com/v1.19.1 AKS I0309 15:20:06.038137 7519 azure.go:73] set QPS(25.000000) and QPS Burst(50) for driver kubeClient I0309 15:20:06.038380 7519 azure.go:87] reading cloud config from secret kube-system/azure-cloud-provider I0309 15:20:06.065386 7519 azure.go:94] InitializeCloudFromSecret: failed to get cloud config from secret kube-system/azure-cloud-provider: failed to get secret kube-system/azure-cloud-provider: secrets "azure-cloud-provider" not found I0309 15:20:06.065405 7519 azure.go:99] could not read cloud config from secret kube-system/azure-cloud-provider I0309 15:20:06.065411 7519 azure.go:102] AZURE_CREDENTIAL_FILE env var set as /etc/kubernetes/azure.json I0309 15:20:06.065435 7519 azure.go:113] read cloud config from file: /etc/kubernetes/azure.json successfully I0309 15:20:06.065944 7519 azure_auth.go:245] Using AzurePublicCloud environment I0309 15:20:06.065963 7519 azure_auth.go:96] azure: using managed identity extension to retrieve access token I0309 15:20:06.065969 7519 azure_auth.go:102] azure: using User Assigned MSI ID to retrieve access token I0309 15:20:06.066004 7519 azure_auth.go:113] azure: User Assigned MSI ID is client ID I0309 15:20:06.066051 7519 azure.go:775] Azure cloudprovider using try backoff: retries=6, exponent=1.500000, duration=5, jitter=1.000000 I0309 15:20:06.066086 7519 azure_interfaceclient.go:74] Azure InterfacesClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066098 7519 azure_interfaceclient.go:77] Azure InterfacesClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066112 7519 azure_vmsizeclient.go:68] Azure VirtualMachineSizesClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066124 7519 azure_vmsizeclient.go:71] Azure VirtualMachineSizesClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066136 7519 azure_snapshotclient.go:70] Azure SnapshotClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066143 7519 azure_snapshotclient.go:73] Azure SnapshotClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066153 7519 azure_storageaccountclient.go:70] Azure StorageAccountClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066157 7519 azure_storageaccountclient.go:73] Azure StorageAccountClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066165 7519 azure_diskclient.go:68] Azure DisksClient using API version: 2022-03-02 I0309 15:20:06.066173 7519 azure_diskclient.go:73] Azure DisksClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066181 7519 azure_diskclient.go:76] Azure DisksClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066191 7519 azure_vmclient.go:70] Azure VirtualMachine client (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066206 7519 azure_vmclient.go:73] Azure VirtualMachine client (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066215 7519 azure_vmssclient.go:70] Azure VirtualMachineScaleSetClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066220 7519 azure_vmssclient.go:73] Azure VirtualMachineScaleSetClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066228 7519 azure_vmssvmclient.go:75] Azure vmssVM client (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066233 7519 azure_vmssvmclient.go:78] Azure vmssVM client (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066245 7519 azure_routeclient.go:69] Azure RoutesClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066256 7519 azure_routeclient.go:72] Azure RoutesClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066264 7519 azure_subnetclient.go:70] Azure SubnetsClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066268 7519 azure_subnetclient.go:73] Azure SubnetsClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066277 7519 azure_routetableclient.go:69] Azure RouteTablesClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066289 7519 azure_routetableclient.go:72] Azure RouteTablesClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066298 7519 azure_loadbalancerclient.go:70] Azure LoadBalancersClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066306 7519 azure_loadbalancerclient.go:73] Azure LoadBalancersClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066314 7519 azure_securitygroupclient.go:70] Azure SecurityGroupsClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066318 7519 azure_securitygroupclient.go:73] Azure SecurityGroupsClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066331 7519 azure_publicipclient.go:74] Azure PublicIPAddressesClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066335 7519 azure_publicipclient.go:77] Azure PublicIPAddressesClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066356 7519 azure_blobclient.go:67] Azure BlobClient using API version: 2021-09-01 I0309 15:20:06.066370 7519 azure_vmasclient.go:70] Azure AvailabilitySetsClient (read ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066375 7519 azure_vmasclient.go:73] Azure AvailabilitySetsClient (write ops) using rate limit config: QPS=10, bucket=100 I0309 15:20:06.066426 7519 azure.go:1006] attach/detach disk operation rate limit QPS: 6.000000, Bucket: 10 I0309 15:20:06.066440 7519 azure.go:149] starting node server on node(aks-dbcluster-41138153-vmss00001e) I0309 15:20:06.066451 7519 blob.go:243] cloud: AzurePublicCloud, location: canadacentral, rg: pa-data-prod-node-rg, VnetName: aks-vnet-30598412, VnetResourceGroup: , SubnetName: aks-subnet I0309 15:20:06.068152 7519 mount_linux.go:283] Detected umount with safe 'not mounted' behavior I0309 15:20:06.068194 7519 driver.go:80] Enabling controller service capability: CREATE_DELETE_VOLUME I0309 15:20:06.068202 7519 driver.go:80] Enabling controller service capability: EXPAND_VOLUME I0309 15:20:06.068204 7519 driver.go:80] Enabling controller service capability: SINGLE_NODE_MULTI_WRITER I0309 15:20:06.068208 7519 driver.go:99] Enabling volume access mode: SINGLE_NODE_WRITER I0309 15:20:06.068214 7519 driver.go:99] Enabling volume access mode: SINGLE_NODE_READER_ONLY I0309 15:20:06.068216 7519 driver.go:99] Enabling volume access mode: SINGLE_NODE_SINGLE_WRITER I0309 15:20:06.068219 7519 driver.go:99] Enabling volume access mode: SINGLE_NODE_MULTI_WRITER I0309 15:20:06.068221 7519 driver.go:99] Enabling volume access mode: MULTI_NODE_READER_ONLY I0309 15:20:06.068227 7519 driver.go:99] Enabling volume access mode: MULTI_NODE_SINGLE_WRITER I0309 15:20:06.068229 7519 driver.go:99] Enabling volume access mode: MULTI_NODE_MULTI_WRITER I0309 15:20:06.068231 7519 driver.go:90] Enabling node service capability: STAGE_UNSTAGE_VOLUME I0309 15:20:06.068234 7519 driver.go:90] Enabling node service capability: SINGLE_NODE_MULTI_WRITER I0309 15:20:06.068359 7519 server.go:114] Listening for connections on address: &net.UnixAddr{Name:"//csi/csi.sock", Net:"unix"} I0309 15:20:06.748790 7519 utils.go:75] GRPC call: /csi.v1.Identity/GetPluginInfo I0309 15:20:06.748806 7519 utils.go:76] GRPC request: {} I0309 15:20:06.750264 7519 utils.go:82] GRPC response: {"name":"blob.csi.azure.com","vendor_version":"v1.19.1"} I0309 15:20:06.885857 7519 utils.go:75] GRPC call: /csi.v1.Identity/GetPluginInfo I0309 15:20:06.885869 7519 utils.go:76] GRPC request: {} I0309 15:20:06.885912 7519 utils.go:82] GRPC response: {"name":"blob.csi.azure.com","vendor_version":"v1.19.1"} I0309 15:20:07.561743 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeGetInfo I0309 15:20:07.561758 7519 utils.go:76] GRPC request: {} I0309 15:20:07.561803 7519 utils.go:82] GRPC response: {"node_id":"aks-dbcluster-41138153-vmss00001e"} I0309 15:20:44.094573 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0309 15:20:44.094588 7519 utils.go:76] GRPC request: {"secrets":"***stripped***","staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:20:44.095063 7519 blob.go:414] volumeID(rg-backups-prod#stpabackupsprod#backups-prod) authEnv: [] I0309 15:20:44.095103 7519 nodeserver.go:349] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount protocol fuse2 volumeId rg-backups-prod#stpabackupsprod#backups-prod context map[containerName:backups-prod protocol:fuse2 resourceGroup:rg-backups-prod storageAccount:stpabackupsprod] mountflags [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true] mountOptions [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --pre-mount-validate=true --use-https=true --cancel-list-on-mount-seconds=10 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod] args /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount -o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --pre-mount-validate=true --use-https=true --cancel-list-on-mount-seconds=10 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod serverAddress stpabackupsprod.blob.core.windows.net I0309 15:20:44.095140 7519 nodeserver.go:144] mouting using blobfuse proxy I0309 15:20:44.095679 7519 nodeserver.go:158] calling BlobfuseProxy: MountAzureBlob function I0309 15:20:44.918031 7519 nodeserver.go:397] volume(rg-backups-prod#stpabackupsprod#backups-prod) mount on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" succeeded I0309 15:20:44.918063 7519 utils.go:82] GRPC response: {} I0309 15:20:44.921339 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:20:44.921351 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-s59wf","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"f851a9d1-52bc-4537-bbe7-5eb5c8a72623","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:20:44.921778 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:20:44.921840 7519 mount_linux.go:244] Detected OS without systemd I0309 15:20:44.921848 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:20:44.923250 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:20:44.924352 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:20:44.924364 7519 utils.go:82] GRPC response: {} # first delete I0309 15:22:52.890790 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:22:52.890801 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-7x9c8","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"148f2d31-08ed-4af0-85b9-880ecf31d661","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:22:52.891219 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:22:52.891247 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:22:52.892519 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:22:52.895995 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:22:52.896008 7519 utils.go:82] GRPC response: {} I0309 15:22:53.995108 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:22:53.995126 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:22:53.995189 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:22:53.995206 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:22:53.995229 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:22:53.996893 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" E0309 15:22:53.997016 7519 utils.go:80] GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount": remove /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount: device or resource busy I0309 15:22:54.499087 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:22:54.499102 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:22:54.499157 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:22:54.499180 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:22:54.499190 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:22:54.500513 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:22:54.500584 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/f851a9d1-52bc-4537-bbe7-5eb5c8a72623/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:22:54.500592 7519 utils.go:82] GRPC response: {} # second delete I0309 15:27:44.061632 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:27:44.061653 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-bmggl","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"42c84958-666e-467c-b86e-a7fcd70e3a26","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:27:44.062199 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:27:44.062282 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:27:44.063724 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:27:44.065165 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:27:44.065183 7519 utils.go:82] GRPC response: {} I0309 15:27:45.268586 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:27:45.268602 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:27:45.268656 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:27:45.268782 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:27:45.268792 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:27:45.271301 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:27:45.271358 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:27:45.271367 7519 utils.go:82] GRPC response: {} # third delete I0309 15:30:31.007299 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:30:31.007317 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-bvk7v","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"a6cd402d-c114-4e54-8146-f22f901891f4","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:30:31.007809 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:30:31.007833 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:30:31.008967 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:30:31.009903 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:30:31.009925 7519 utils.go:82] GRPC response: {} I0309 15:30:32.113707 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:30:32.113727 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:30:32.113772 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:30:32.113794 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:30:32.113810 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:30:32.115457 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:30:32.115507 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:30:32.115515 7519 utils.go:82] GRPC response: {} ```
Notice this CSI driver log below. Because when switching to the next experiment of using `AKS 1.24.9` + `protocol: fuse1` w/o `--virtual-directory` I need to delete the exsiting deployments as well as PV. CSI driver logs showed the following error. ```shell I0309 15:33:31.318875 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:33:31.318895 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:33:31.318943 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:33:31.318962 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:33:31.318980 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:33:31.320580 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:33:31.320623 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/a6cd402d-c114-4e54-8146-f22f901891f4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:33:31.320632 7519 utils.go:82] GRPC response: {} I0309 15:33:31.421623 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnstageVolume I0309 15:33:31.421637 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:33:31.421692 7519 nodeserver.go:418] NodeUnstageVolume: volume rg-backups-prod#stpabackupsprod#backups-prod unmounting on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount I0309 15:33:31.421709 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:33:31.421715 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount I0309 15:33:31.422944 7519 mount_linux.go:374] ignoring 'not mounted' error for /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount I0309 15:33:31.422958 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" I0309 15:33:31.423015 7519 nodeserver.go:423] NodeUnstageVolume: volume rg-backups-prod#stpabackupsprod#backups-prod unmount on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount successfully I0309 15:33:31.423031 7519 utils.go:82] GRPC response: {} ```

Finally, let's look at the AKS 1.24.9 + protocol: fuse1 w/o --virtual-directory mounting option.

TL;DR: First of all, why w/o --virtual-directory because fuse1 does not support that mounting option, so I have to use fuse1. But this combination of AKS 1.24.9 + protocol: fuse1 w/o --virtual-directory does not have the issue of repeatedly deleting pods and restarting pods automatically by AKS. After numerous times, I can still see all my mounted Azure Blob files.

Here is my PV manifest specifically using fuse1 w/o --virtual-directory mounting option ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-stpabackupsprod-blob-container spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany claimRef: apiVersion: v2 kind: PersistentVolumeClaim name: pvc-stpabackupsprod-blob-container namespace: pa-data-services persistentVolumeReclaimPolicy: Retain storageClassName: azureblob-fuse-premium csi: driver: blob.csi.azure.com readOnly: false volumeHandle: rg-backups-prod#stpabackupsprod#backups-prod volumeAttributes: resourceGroup: rg-backups-prod storageAccount: stpabackupsprod containerName: backups-prod protocol: fuse1 nodeStageSecretRef: name: stpabackupsprod namespace: pa-data-services mountOptions: - '-o allow_other' - '--file-cache-timeout-in-seconds=120' - '--use-attr-cache=true' - '-o attr_timeout=120' - '-o entry_timeout=120' - '-o negative_timeout=120' - '--log-level=LOG_DEBUG' - '--cache-size-mb=1000' ```
As you can see from the following super long CSI driver log. With the combination of `AKS 1.24.9` + `protocol: fuse1` w/o `--virtual-directory`, no matter how many times I restarted the pod, there are no GRPC error regarding device or resource busy, and I can still see all my mounted Azure Blob files after each time I hop into the restarted pod. Even though, it does work in my favour with this combination. However, I'm still baffled of how could it be. Because each restart of the pod, you can see in the log, it did /csi.v1.Node/NodePublishVolume and immediately /csi.v1.Node/NodeUnpublishVolume, yet somehow all the mounted files are still there... ```shell # `AKS 1.24.9` + `protocol: fuse1` w/o `--virtual-directory`, first kubectl apply to deploy everything I0309 15:43:25.409785 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0309 15:43:25.409811 7519 utils.go:76] GRPC request: {"secrets":"***stripped***","staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:43:25.410196 7519 blob.go:414] volumeID(rg-backups-prod#stpabackupsprod#backups-prod) authEnv: [] I0309 15:43:25.410248 7519 nodeserver.go:349] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount protocol fuse1 volumeId rg-backups-prod#stpabackupsprod#backups-prod context map[containerName:backups-prod protocol:fuse1 resourceGroup:rg-backups-prod storageAccount:stpabackupsprod] mountflags [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000] mountOptions [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod --pre-mount-validate=true --use-https=true --cancel-list-on-mount-seconds=10] args /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount -o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod --pre-mount-validate=true --use-https=true --cancel-list-on-mount-seconds=10 serverAddress stpabackupsprod.blob.core.windows.net I0309 15:43:25.410276 7519 nodeserver.go:144] mouting using blobfuse proxy I0309 15:43:25.410704 7519 nodeserver.go:158] calling BlobfuseProxy: MountAzureBlob function I0309 15:43:25.560621 7519 nodeserver.go:397] volume(rg-backups-prod#stpabackupsprod#backups-prod) mount on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" succeeded I0309 15:43:25.560664 7519 utils.go:82] GRPC response: {} I0309 15:43:25.562860 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:43:25.562871 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-p6bsj","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"ed8ddd8d-cfef-4f9a-b792-6437d87a6906","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:43:25.563275 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:43:25.563293 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:43:25.564445 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:43:25.565278 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:43:25.565293 7519 utils.go:82] GRPC response: {} # first delete the pod I0309 15:44:57.047764 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:44:57.047777 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-sc6tf","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"ebbae26d-92d8-4302-a9aa-ba76bdd89d97","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:44:57.048103 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:44:57.048119 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:44:57.049299 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:44:57.050255 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:44:57.050268 7519 utils.go:82] GRPC response: {} I0309 15:44:58.154258 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:44:58.154331 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:44:58.154420 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:44:58.154437 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:44:58.154515 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:44:58.160779 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:44:58.160844 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ed8ddd8d-cfef-4f9a-b792-6437d87a6906/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:44:58.160859 7519 utils.go:82] GRPC response: {} # second delete the pod I0309 15:46:10.933244 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:46:10.933259 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-fzsdj","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"c8449d93-a063-40ee-be86-cf852b85a757","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:46:10.933773 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:46:10.933796 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:46:10.935319 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:46:10.938543 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:46:10.938567 7519 utils.go:82] GRPC response: {} I0309 15:46:11.937312 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:46:11.937356 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:46:11.937413 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:46:11.937430 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:46:11.937537 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:46:11.939411 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:46:11.939494 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ebbae26d-92d8-4302-a9aa-ba76bdd89d97/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:46:11.939513 7519 utils.go:82] GRPC response: {} # third delete the pod I0309 15:46:52.563104 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:46:52.563221 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-fc7tv","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"321b6ad1-d572-4bce-bfbb-1d944cbffe0a","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:46:52.563624 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:46:52.563646 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:46:52.564890 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:46:52.565967 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:46:52.565979 7519 utils.go:82] GRPC response: {} I0309 15:46:54.072091 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:46:54.072111 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:46:54.072183 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:46:54.072206 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:46:54.072218 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:46:54.073995 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:46:54.074041 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/c8449d93-a063-40ee-be86-cf852b85a757/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:46:54.074049 7519 utils.go:82] GRPC response: {} # fourth delete the pod I0309 15:47:53.507079 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:47:53.507093 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/716e45d3-e7d6-44d8-930e-6ec629be3692/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-m4fnv","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"716e45d3-e7d6-44d8-930e-6ec629be3692","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse1","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:47:53.507587 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/716e45d3-e7d6-44d8-930e-6ec629be3692/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:47:53.507605 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/716e45d3-e7d6-44d8-930e-6ec629be3692/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:47:53.508790 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/716e45d3-e7d6-44d8-930e-6ec629be3692/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:47:53.509754 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/716e45d3-e7d6-44d8-930e-6ec629be3692/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:47:53.509771 7519 utils.go:82] GRPC response: {} I0309 15:47:54.813768 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:47:54.813789 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:47:54.813871 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:47:54.813900 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:47:54.813921 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:47:54.821260 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:47:54.821328 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/321b6ad1-d572-4bce-bfbb-1d944cbffe0a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:47:54.821348 7519 utils.go:82] GRPC response: {} ```

I'm sorry about this super long posts, but this is the best way I could think of to asynchronously communicate this issue to you guys. :)

P.S.1: According to this repo, it seems that blobfuse2 (2.0.2) is not in the compatibility table just yet?

❯ kubectl exec -it csi-blob-node-t8dt8 -c blob -n kube-system -- /bin/sh
# blobfuse2 -v
blobfuse2 version 2.0.2
# blobfuse -v
blobfuse 1.4.5

P.S.2: Here is how I'm coping with my edge case right now, which is to use a combination of AKS 1.25.5 + NFSv3, assuming your Azure blob store has HNS & NFSv3 enabled.

This is my NFSv3 SC manifest ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-stpabackupsprod-blob-container spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: pvc-stpabackupsprod-blob-container namespace: pa-data-services persistentVolumeReclaimPolicy: Retain storageClassName: azureblob-nfs-premium csi: driver: blob.csi.azure.com readOnly: false volumeHandle: devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod volumeAttributes: resourceGroup: devtest-datalake storageAccount: nfssyncstpabackupsprod containerName: sync-backups-prod protocol: nfs ```
As you can see from the CSI logs below, after using NFSv3, I can restart pods as I wish w/o getting any resource busy error, and I can still find all the mounted files from Azure blob in the restarted Pods ```shell # AKS 1.25.5 with NFSv3, first refresh kubectl apply I0309 20:00:01.253555 6234 utils.go:82] GRPC response: {} I0309 20:03:19.527811 6234 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0309 20:03:19.527822 6234 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:03:19.528099 6234 blob.go:414] volumeID(devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod) authEnv: [] I0309 20:03:19.528112 6234 nodeserver.go:307] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount protocol nfs volumeId devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod context map[containerName:sync-backups-prod protocol:nfs resourceGroup:devtest-datalake storageAccount:nfssyncstpabackupsprod] mountflags [] serverAddress nfssyncstpabackupsprod.blob.core.windows.net I0309 20:03:19.528136 6234 mount_linux.go:219] Mounting cmd (mount) with arguments (-t nfs -o sec=sys,vers=3,nolock nfssyncstpabackupsprod.blob.core.windows.net:/nfssyncstpabackupsprod/sync-backups-prod /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount) I0309 20:03:22.730449 6234 blob.go:849] chmod targetPath(/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount, mode:020000000750) with permissions(0777) I0309 20:03:22.789215 6234 nodeserver.go:326] volume(devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod) mount nfssyncstpabackupsprod.blob.core.windows.net:/nfssyncstpabackupsprod/sync-backups-prod on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount succeeded I0309 20:03:22.789238 6234 utils.go:82] GRPC response: {} I0309 20:03:22.791480 6234 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 20:03:22.791489 6234 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","target_path":"/var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-6x6kw","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"34b1a864-7082-481e-8758-1544849cf9b4","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:03:22.791825 6234 nodeserver.go:122] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 20:03:22.791848 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:03:22.792865 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:03:22.793722 6234 nodeserver.go:138] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:03:22.793731 6234 utils.go:82] GRPC response: {} # first deletion of the pod I0309 20:04:26.595322 6234 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 20:04:26.595333 6234 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","target_path":"/var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-z4gpk","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"843ec654-26ad-47d2-a725-9bb64c30740b","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:04:26.595691 6234 nodeserver.go:122] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 20:04:26.595714 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:04:26.608875 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:04:26.609904 6234 nodeserver.go:138] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:04:26.609916 6234 utils.go:82] GRPC response: {} I0309 20:04:27.701941 6234 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 20:04:27.701958 6234 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:04:27.702007 6234 nodeserver.go:199] NodeUnpublishVolume: unmounting volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:04:27.702035 6234 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 20:04:27.702050 6234 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:04:27.717291 6234 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 20:04:27.717348 6234 nodeserver.go:204] NodeUnpublishVolume: unmount volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/34b1a864-7082-481e-8758-1544849cf9b4/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:04:27.717358 6234 utils.go:82] GRPC response: {} # second deletion of the pod I0309 20:05:02.200296 6234 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 20:05:02.200309 6234 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","target_path":"/var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-s78ww","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:05:02.200686 6234 nodeserver.go:122] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 20:05:02.200711 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:05:02.201964 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:05:02.202888 6234 nodeserver.go:138] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:05:02.202905 6234 utils.go:82] GRPC response: {} I0309 20:05:03.306234 6234 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 20:05:03.306250 6234 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:05:03.306307 6234 nodeserver.go:199] NodeUnpublishVolume: unmounting volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:05:03.306327 6234 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 20:05:03.306339 6234 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:05:03.323273 6234 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 20:05:03.323332 6234 nodeserver.go:204] NodeUnpublishVolume: unmount volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/843ec654-26ad-47d2-a725-9bb64c30740b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:05:03.323342 6234 utils.go:82] GRPC response: {} # third deletion of the pod I0309 20:05:27.934797 6234 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 20:05:27.934807 6234 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","target_path":"/var/lib/kubelet/pods/4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-qq59x","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:05:27.935171 6234 nodeserver.go:122] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 20:05:27.935189 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:05:27.944136 6234 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 20:05:27.945233 6234 nodeserver.go:138] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/4cf7d47d-d81e-4505-9e4c-ee0d57fc9e0b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:05:27.945246 6234 utils.go:82] GRPC response: {} I0309 20:05:29.143864 6234 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 20:05:29.143878 6234 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0309 20:05:29.143956 6234 nodeserver.go:199] NodeUnpublishVolume: unmounting volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:05:29.143992 6234 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 20:05:29.144018 6234 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 20:05:29.153331 6234 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 20:05:29.153387 6234 nodeserver.go:204] NodeUnpublishVolume: unmount volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/b9683a0c-afbd-44c4-b3b8-2c58bbd9e22a/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 20:05:29.153400 6234 utils.go:82] GRPC response: {} ```
andyzhangx commented 1 year ago

@pa-mc thanks for the sharing. So with blobfuse2 on AKS 1.24 or 1.25, there is device or resource busy during first unmount attempt, and does it break your scenario in the end? from the logs, I could see unmount always succeeded in the second unmount.

vibhansa-msft commented 1 year ago

If some operation is going on or there is a shell connected to that path, unmount is expected to fail. Before you kill the pod you shall do a graceful unmount otherwise there are chances of data loss as well. If blobfuse was in between a transfer and you just killed the pod or container then transfer will be terminated, and next mount will lose the locally cached data as well.

andyzhangx commented 1 year ago

If some operation is going on or there is a shell connected to that path, unmount is expected to fail. Before you kill the pod you shall do a graceful unmount otherwise there are chances of data loss as well. If blobfuse was in between a transfer and you just killed the pod or container then transfer will be terminated, and next mount will lose the locally cached data as well.

@vibhansa-msft one point is that with v1, it does not have such device or resource busy error during first unmount, while with v2, there is such error. Do you know whether there is any unmount process difference between v1 and v2?

vibhansa-msft commented 1 year ago

There is no difference in unmount process as such, also unmount is triggered from kernel and we just get a call from the system to shutdown the binary. Ideally I would expect both to fail in case some operations are going on. Quite possible that v1 was not reporting the problem while v2 does.

pa-mc commented 1 year ago

@pa-mc thanks for the sharing. So with blobfuse2 on AKS 1.24 or 1.25, there is device or resource busy during first unmount attempt, and does it break your scenario in the end? from the logs, I could see unmount always succeeded in the second unmount.

Yes, for the following two combinations, the first pod deletion you will see the device or resource busy error. The subsequent deletion of the pod, you won't see that error message anymore. However, none of the blob files show up either.

Also I don't quite understand why would restart of a pod, why would CSI do a GRPC call: /csi.v1.Node/NodeUnpublishVolume right after a GRPC call: /csi.v1.Node/NodePublishVolume? I get when the pod restarted successfully, it should do a GRPC call: /csi.v1.Node/NodePublishVolume, but why would it automatically do a GRPC call: /csi.v1.Node/NodeUnpublishVolume even though the pod is healthy?

for instance ```shell # second delete I0309 15:27:44.061632 7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0309 15:27:44.061653 7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-57b7898756-bmggl","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"42c84958-666e-467c-b86e-a7fcd70e3a26","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:27:44.062199 7519 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0309 15:27:44.062282 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:27:44.063724 7519 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0309 15:27:44.065165 7519 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:27:44.065183 7519 utils.go:82] GRPC response: {} I0309 15:27:45.268586 7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0309 15:27:45.268602 7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0309 15:27:45.268656 7519 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:27:45.268782 7519 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0309 15:27:45.268792 7519 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0309 15:27:45.271301 7519 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0309 15:27:45.271358 7519 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0309 15:27:45.271367 7519 utils.go:82] GRPC response: {} ```
pa-mc commented 1 year ago

If some operation is going on or there is a shell connected to that path, unmount is expected to fail. Before you kill the pod you shall do a graceful unmount otherwise there are chances of data loss as well. If blobfuse was in between a transfer and you just killed the pod or container then transfer will be terminated, and next mount will lose the locally cached data as well.

I'm pretty sure there is nothing connected to that path while I did the experiments except the pod that has the path mounted to it.

In this case, I did deliberately restarted the Pod, but in practice I have no control over when or if the Pod would restart or not. The graceful unmount should be handled by the CSI driver or k8s Pod API right?

pa-mc commented 1 year ago

I'm not sure if this is asking too much, but it would be great if we get on a zoom / team call so that I can screenshare with you guys, much better than reading my super long experiments :P

andyzhangx commented 1 year ago

If some operation is going on or there is a shell connected to that path, unmount is expected to fail. Before you kill the pod you shall do a graceful unmount otherwise there are chances of data loss as well. If blobfuse was in between a transfer and you just killed the pod or container then transfer will be terminated, and next mount will lose the locally cached data as well.

I'm pretty sure there is nothing connected to that path while I did the experiments except the pod that has the path mounted to it.

In this case, I did deliberately restarted the Pod, but in practice I have no control over when or if the Pod would restart or not. The graceful unmount should be handled by the CSI driver or k8s Pod API right?

@pa-mc there are two pods in the second delete

  1. pod with id 42c84958-666e-467c-b86e-a7fcd70e3a26 is created, so you get

    I0309 15:27:44.061632    7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume
    I0309 15:27:44.061653    7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o 
  2. pod with id 148f2d31-08ed-4af0-85b9-880ecf31d661 is being deleted, so you get:

    I0309 15:27:45.268586    7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume
    I0309 15:27:45.268602    7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"}

that's expected.

pa-mc commented 1 year ago

If some operation is going on or there is a shell connected to that path, unmount is expected to fail. Before you kill the pod you shall do a graceful unmount otherwise there are chances of data loss as well. If blobfuse was in between a transfer and you just killed the pod or container then transfer will be terminated, and next mount will lose the locally cached data as well.

I'm pretty sure there is nothing connected to that path while I did the experiments except the pod that has the path mounted to it. In this case, I did deliberately restarted the Pod, but in practice I have no control over when or if the Pod would restart or not. The graceful unmount should be handled by the CSI driver or k8s Pod API right?

@pa-mc there are two pods in the second delete

  1. pod with id 42c84958-666e-467c-b86e-a7fcd70e3a26 is created, so you get
I0309 15:27:44.061632    7519 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume
I0309 15:27:44.061653    7519 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/42c84958-666e-467c-b86e-a7fcd70e3a26/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","-o attr_timeout=120","-o entry_timeout=120","-o 
  1. pod with id 148f2d31-08ed-4af0-85b9-880ecf31d661 is being deleted, so you get:
I0309 15:27:45.268586    7519 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume
I0309 15:27:45.268602    7519 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/148f2d31-08ed-4af0-85b9-880ecf31d661/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"}

that's expected.

Right, make sense. Because the killing of a Pod will remove the old Pod and create a new Pod under the same Deployment. I guess I just thought the /NodeUnpublishVolume would come first. Since the deletion of a Pod happend first. However, that's just a side note, the key mystry for me is why this behaviour wouldn't happen for AKS 1.24.9 + protocol: fuse1 + w/o --virtual-directory? Because with that combination, no whatever how many time I restart the pod regardless of whether it's intentionally or in practice it could be restarted due to OOM or other reasons that Pod just crashed, there is no resource busy error, and the mounted files still appears in the Pod.

andyzhangx commented 1 year ago

Hi @pa-mc, what's the business impact for this behavior change? My assumption is that on AKS 1.25, it would create a new replica first, and then delete old replica, that's the reason why NodePublishVolume comes first and then NodeUnpublishVolume comes next. It could be related to RollingUpdateStrategy in k8s deployment.

pa-mc commented 1 year ago

Hi @pa-mc, what's the business impact for this behavior change? My assumption is that on AKS 1.25, it would create a new replica first, and then delete old replica, that's the reason why NodePublishVolume comes first and then NodeUnpublishVolume comes next. It could be related to RollingUpdateStrategy in k8s deployment.

Hi @andyzhangx, yeah right now it's not a huge deal just yet. Because our production AKS cluster is still in 1.24.9 and it's still using blobfuse v1 w/o --virtual-directory mounting options. For the time being, our development AKS cluster 1.25.5, I've done a azcopy sync nightly to sync our database backups that sitting in a non-NFS enabled Azure Blob Store an NFSv3-enabled Azure Blob Store and start using protocol: nfsv3 storage class. At the moment, I don't see any mounting issues even after deliberately deleting pods numerous times.

However, this is quite kludgy obviously, and I'd love to get to the bottom of this issue regardless things are "working" or not ;)

I've created an Azure Support ticket Support request ID | 2303070040008245 in the meantime and actually pasted this github issue in there as a reference. It's probably not fair to ask you guys to spend a lot of time on this one, but if you guys want to hop on that support call once scheduled, let me know :)


P.S.: Someone from Azure support reached out, and we will do a Team screenshare to show them exactly how I produced that error. I asked them to record it if they can (i don't mind). If they did record it, I will share it with you guys.

andyzhangx commented 1 year ago

@pa-mc per our testing pipeline results, as long as you are using blobfuse v2 (no matter it's AKS 1.24 or 1.25), it would have such mount: device or resource busy unmount failure, and second time unmount always succeeds after around 0.6s

So my assumption is that there could be implementation difference between v1 and v2, and it looks like there is no side effect since second time unmount always succeeds after around 0.6s

pa-mc commented 1 year ago

Hi @andyzhangx sorry for the late reply, wife & son gotta pretty sick and the last man standing :P Thank you so much for running those tests, and I will find some time this week and dig into it. I think my experimentation also showed the unmount will be successfull after the second restart of a Pod. However, it's the mounting had some problem. Because after second restart of a Pod, even thoug it said /NodePublishVolume successful, but the mount was actually not working since there are no files in the mounted directory.

Regardless, I will keep you updated with my findings and perhaps do a screenrecording it and share it here.

andyzhangx commented 1 year ago

Hi @andyzhangx sorry for the late reply, wife & son gotta pretty sick and the last man standing :P Thank you so much for running those tests, and I will find some time this week and dig into it. I think my experimentation also showed the unmount will be successfull after the second restart of a Pod. However, it's the mounting had some problem. Because after second restart of a Pod, even thoug it said /NodePublishVolume successful, but the mount was actually not working since there are no files in the mounted directory.

Regardless, I will keep you updated with my findings and perhaps do a screenrecording it and share it here.

@pa-mc if second restart would make pod broken, can you ssh to the pod, and run df -h command to check whether there is blobfuse mount inside that pod. e.g.

kubectl exec -it nginx-blob -- df -h
Filesystem      Size  Used Avail Use% Mounted on
...
blobfuse         14G   41M   13G   1% /mnt/blob
...
pa-mc commented 1 year ago

Hi @andyzhangx sorry for the late reply, wife & son gotta pretty sick and the last man standing :P Thank you so much for running those tests, and I will find some time this week and dig into it. I think my experimentation also showed the unmount will be successfull after the second restart of a Pod. However, it's the mounting had some problem. Because after second restart of a Pod, even thoug it said /NodePublishVolume successful, but the mount was actually not working since there are no files in the mounted directory. Regardless, I will keep you updated with my findings and perhaps do a screenrecording it and share it here.

@pa-mc if second restart would make pod broken, can you ssh to the pod, and run df -h command to check whether there is blobfuse mount inside that pod. e.g.

kubectl exec -it nginx-blob -- df -h

Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...

Hi @andyzhangx I tried, yup, as you anticipated, after the second restart, there is no blobfuse FS anymore.

Here are the full comments & outputs > First apply of everything (you can find the YAML manifest files I used in another expansion at the bottom of this comment ```shell ❯ kubectl exec -it -n pa-data-services deployments/orientdbservice -- /bin/bash Defaulted container "orientdbservice" out of: orientdbservice, orientdbservicehandler root@orientdbservice-58c79ffb79-bz7j9:/orientdb# df -h Filesystem Size Used Avail Use% Mounted on overlay 248G 27G 222G 11% / tmpfs 64M 0 64M 0% /dev /dev/root 248G 27G 222G 11% /etc/hosts blobfuse2 1000M 0 1000M 0% /mnt/stpabackupsprod shm 64M 0 64M 0% /dev/shm tmpfs 28G 12K 28G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 16G 0 16G 0% /proc/acpi tmpfs 16G 0 16G 0% /proc/scsi tmpfs 16G 0 16G 0% /sys/firmware ``` > First restart of the pod ```shell ❯ kubectl exec -it -n pa-data-services deployments/orientdbservice -- /bin/bash Defaulted container "orientdbservice" out of: orientdbservice, orientdbservicehandler root@orientdbservice-58c79ffb79-j9rk5:/orientdb# df -h Filesystem Size Used Avail Use% Mounted on overlay 248G 27G 222G 11% / tmpfs 64M 0 64M 0% /dev /dev/root 248G 27G 222G 11% /etc/hosts blobfuse2 1000M 0 1000M 0% /mnt/stpabackupsprod shm 64M 0 64M 0% /dev/shm tmpfs 28G 12K 28G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 16G 0 16G 0% /proc/acpi tmpfs 16G 0 16G 0% /proc/scsi tmpfs 16G 0 16G 0% /sys/firmware ``` > While the CSI driver logs shows device busy error during the first restart of the pod ```shell I0314 14:31:14.985754 5729 utils.go:82] GRPC response: {} I0314 14:31:16.089754 5729 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0314 14:31:16.089810 5729 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0314 14:31:16.089871 5729 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0314 14:31:16.089886 5729 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0314 14:31:16.089897 5729 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0314 14:31:16.091324 5729 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" E0314 14:31:16.091364 5729 utils.go:80] GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount": remove /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount: device or resource busy I0314 14:31:16.592842 5729 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0314 14:31:16.592857 5729 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0314 14:31:16.592912 5729 nodeserver.go:199] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0314 14:31:16.592933 5729 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0314 14:31:16.592947 5729 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0314 14:31:16.594108 5729 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0314 14:31:16.594186 5729 nodeserver.go:204] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/dca3dffa-7785-47c8-a73f-02b144cea174/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0314 14:31:16.594200 5729 utils.go:82] GRPC response: {} ``` > Now the second restart of the pod, as you probably expected, the blobfuse fs is gone. ```shell ❯ kubectl exec -it -n pa-data-services deployments/orientdbservice -- /bin/bash Defaulted container "orientdbservice" out of: orientdbservice, orientdbservicehandler root@orientdbservice-58c79ffb79-phddp:/orientdb# df -h Filesystem Size Used Avail Use% Mounted on overlay 248G 27G 222G 11% / tmpfs 64M 0 64M 0% /dev /dev/root 248G 27G 222G 11% /etc/hosts shm 64M 0 64M 0% /dev/shm tmpfs 28G 12K 28G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 16G 0 16G 0% /proc/acpi tmpfs 16G 0 16G 0% /proc/scsi tmpfs 16G 0 16G 0% /sys/firmware ```
all the manifest files I used > Here is the PV and I apply this one first ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-stpabackupsprod-blob-container spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: pvc-stpabackupsprod-blob-container namespace: pa-data-services persistentVolumeReclaimPolicy: Retain storageClassName: azureblob-fuse-premium csi: driver: blob.csi.azure.com readOnly: false volumeHandle: rg-backups-prod#stpabackupsprod#backups-prod volumeAttributes: resourceGroup: rg-backups-prod storageAccount: stpabackupsprod containerName: backups-prod protocol: fuse2 nodeStageSecretRef: name: stpabackupsprod namespace: pa-data-services mountOptions: - '-o allow_other' - '--file-cache-timeout-in-seconds=120' - '--use-attr-cache=true' - '--cancel-list-on-mount-seconds=5' - '-o attr_timeout=120' - '-o entry_timeout=120' - '-o negative_timeout=120' - '--log-level=LOG_DEBUG' - '--cache-size-mb=1000' - '--virtual-directory=true' ``` > Here is the Deployment and I apply this after the PV. Notice it's a sidecar pattern, but I don't think that matters, since this is the exact same YAMLs I use in `AKS 1.24.9`, except it uses `protocol: fuse1` w/o `--virtual-directory` mounting options, and it works fine (meaning blobfuse still works after numerous pod restarts) ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-stpabackupsprod-blob-container namespace: pa-data-services labels: service: orientdb type: pv-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi volumeName: pv-stpabackupsprod-blob-container storageClassName: azureblob-nfs-premium --- kind: Deployment apiVersion: apps/v1 metadata: name: orientdbservice namespace: pa-data-services labels: service: orientdb spec: replicas: 1 selector: matchLabels: service: orientdb template: metadata: name: orientdbservice labels: service: orientdb type: container-deployment spec: containers: - name: orientdbservice image: datacontainers.azurecr.io/pa-orientdb-enterprise:main resources: requests: cpu: 2000m memory: 12Gi imagePullPolicy: Always env: - name: ORIENTDB_ROOT_PASSWORD valueFrom: secretKeyRef: name: pa-data-secrets key: ORIENTDB_ROOT_PASSWORD - name: ORIENTDB_OPTS_MEMORY value: "-Xms2g -Xmx12g -Dstorage.diskCache.bufferSize=36000 -Dstorage.useWAL=true -server -XX:+PerfDisableSharedMem" ports: - containerPort: 2424 name: port-binary - containerPort: 2480 name: port-http volumeMounts: - mountPath: /orientdb/databases name: orientdb-data subPath: databases - mountPath: /orientdb/backup name: orientdb-data subPath: backup - mountPath: /mnt/stpabackupsprod name: orientdb-stpabackupsprod - name: orientdbservicehandler image: datacontainers.azurecr.io/odb-handler:main resources: {} imagePullPolicy: Always env: - name: APP_HOST value: "0.0.0.0" - name: AZURE_STORAGE_CONNECTION_STRING valueFrom: secretKeyRef: name: stpabackupsprod key: AZURE_STORAGE_CONNECTION_STRING - name: AZURE_STORAGE_AUTH_MODE valueFrom: configMapKeyRef: name: odb-handler-configs key: AZURE_STORAGE_AUTH_MODE - name: AZURE_STORAGE_CONTAINER_NAME valueFrom: configMapKeyRef: name: odb-handler-configs key: AZURE_STORAGE_CONTAINER_NAME - name: COMMAND_ENVIRONMENT valueFrom: configMapKeyRef: name: odb-handler-configs key: COMMAND_ENVIRONMENT - name: KUBERNETES_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: KUBERNETES_POD valueFrom: fieldRef: fieldPath: metadata.name - name: KUBERNETES_IN_CLUSTER valueFrom: configMapKeyRef: name: odb-handler-configs key: KUBERNETES_IN_CLUSTER - name: BACKUP_CLIENTMAP valueFrom: configMapKeyRef: name: odb-handler-configs key: BACKUP_CLIENTMAP - name: BACKUP_PARSE_FORMAT valueFrom: configMapKeyRef: name: odb-handler-configs key: BACKUP_PARSE_FORMAT - name: BACKUP_KWARG_DEFAULTS valueFrom: configMapKeyRef: name: odb-handler-configs key: BACKUP_KWARG_DEFAULTS - name: BACKUP_JINJA_FORMAT valueFrom: configMapKeyRef: name: odb-handler-configs key: BACKUP_JINJA_FORMAT ports: - containerPort: 8000 name: odbhandlerport imagePullSecrets: - name: pa-datacontainers-acr volumes: - name: orientdb-data emptyDir: {} - name: orientdb-stpabackupsprod persistentVolumeClaim: claimName: pvc-stpabackupsprod-blob-container tolerations: - key: "dbcluster" operator: "Equal" value: "true" effect: "NoSchedule" nodeSelector: agentpool: dbcluster --- kind: Service apiVersion: v1 metadata: name: orientdbservice namespace: pa-data-services labels: service: orientdb type: nodeport-service spec: type: NodePort selector: service: orientdb type: container-deployment ports: - protocol: TCP port: 2480 name: http --- kind: Service apiVersion: v1 metadata: name: orientdbservice-private namespace: pa-data-services labels: service: orientdb type: private-orientdbservice-load-balancer-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer loadBalancerIP: 10.224.0.10 ports: - protocol: TCP port: 2424 name: odb-binary - protocol: TCP port: 8000 name: odb-handler-http selector: service: orientdb type: container-deployment ```

P.S.: I think you 100% know what exactly my sceniaro is, but I will try to find some time today to do a screen recording and share it anyway. Also, I really appreciate for all the help!

andyzhangx commented 1 year ago

I have reproed the above issue, the second pod deletion would make blobfuse mount broken.

I find where the problem is, blob csi driver would mount blob storage to a globalmount dir first, and then bind mount during NodePublishVolume for every pod running on the node, that could share the globalmount. when pod is terminated, dir unmount happens on bind mount, and globalmount is still there. there is no problem in blobfuse v1, while in blobfuse v2, unmount on bind mount would also make original globalmount dir unmount happen. That's the problem. @vibhansa-msft could you help check what's the behavior difference on v2 when unmount happen on bind mount?

unmount blobfuse v2 bind mount

root@aks-agentpool-20541019-vmss000000:/# umount /var/lib/kubelet/pods/d5a00f29-4c5e-4e44-b54b-86690beaff6b/volumes/kubernetes.io~csi/pvc-32e09edb-ac53-4240-976a-6e810e270018/mount

blobfuse v2 global mount is also gone

root@aks-agentpool-20541019-vmss000000:/# mount | grep blobfuse | sort | uniq blobfuse on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/5f1241264f64ebdab71cf539cabb041e8715b1f6cd8b146fdff0ada5fc974eab/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) blobfuse on /var/lib/kubelet/pods/cfa45d56-6862-4d65-9819-52e71ba45e62/volumes/kubernetes.io~csi/pvc-461464a9-8310-4cde-a3be-f9d4ce875419/mount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

unmount blobfuse v1 bind mount

root@aks-agentpool-20541019-vmss000000:/# umount /var/lib/kubelet/pods/cfa45d56-6862-4d65-9819-52e71ba45e62/volumes/kubernetes.io~csi/pvc-461464a9-8310-4cde-a3be-f9d4ce875419/mount

blobfuse v1 global mount is still there

root@aks-agentpool-20541019-vmss000000:/# mount | grep blobfuse | sort | uniq blobfuse on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/5f1241264f64ebdab71cf539cabb041e8715b1f6cd8b146fdff0ada5fc974eab/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

pa-mc commented 1 year ago

I have reproed the above issue, the second pod deletion would make blobfuse mount broken.

I find where the problem is, blob csi driver would mount blob storage to a globalmount dir first, and then bind mount during NodePublishVolume for every pod running on the node, that could share the globalmount. when pod is terminated, dir unmount happens on bind mount, and globalmount is still there. there is no problem in blobfuse v1, while in blobfuse v2, unmount on bind mount would also make original globalmount dir unmount happen. That's the problem. @vibhansa-msft could you help check what's the behavior difference on v2 when unmount happen on bind mount?

  • on below example, there are 1 blobfuse v1 globalmount, 1 bind mount and 1 blobfuse v2 globalmount, 1 bind mount
# mount | grep blobfuse | sort | uniq
blobfuse on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/5f1241264f64ebdab71cf539cabb041e8715b1f6cd8b146fdff0ada5fc974eab/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
blobfuse on /var/lib/kubelet/pods/cfa45d56-6862-4d65-9819-52e71ba45e62/volumes/kubernetes.io~csi/pvc-461464a9-8310-4cde-a3be-f9d4ce875419/mount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
blobfuse2 on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/1f778bb6414796cfefe77ad67ee6e5f21be127ed1adf86affb766488a15ebee4/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
blobfuse2 on /var/lib/kubelet/pods/d5a00f29-4c5e-4e44-b54b-86690beaff6b/volumes/kubernetes.io~csi/pvc-32e09edb-ac53-4240-976a-6e810e270018/mount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

# unmount blobfuse v2 bind mount
root@aks-agentpool-20541019-vmss000000:/# umount /var/lib/kubelet/pods/d5a00f29-4c5e-4e44-b54b-86690beaff6b/volumes/kubernetes.io~csi/pvc-32e09edb-ac53-4240-976a-6e810e270018/mount

# blobfuse v2 global mount is also gone
root@aks-agentpool-20541019-vmss000000:/# mount | grep blobfuse | sort | uniq
blobfuse on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/5f1241264f64ebdab71cf539cabb041e8715b1f6cd8b146fdff0ada5fc974eab/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
blobfuse on /var/lib/kubelet/pods/cfa45d56-6862-4d65-9819-52e71ba45e62/volumes/kubernetes.io~csi/pvc-461464a9-8310-4cde-a3be-f9d4ce875419/mount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

# unmount blobfuse v1 bind mount
root@aks-agentpool-20541019-vmss000000:/# umount /var/lib/kubelet/pods/cfa45d56-6862-4d65-9819-52e71ba45e62/volumes/kubernetes.io~csi/pvc-461464a9-8310-4cde-a3be-f9d4ce875419/mount

# blobfuse v1 global mount is still there
root@aks-agentpool-20541019-vmss000000:/# mount | grep blobfuse | sort | uniq
blobfuse on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/5f1241264f64ebdab71cf539cabb041e8715b1f6cd8b146fdff0ada5fc974eab/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

🐐

vibhansa-msft commented 1 year ago

@andyzhangx : Sorry I did not understand it well but what I observe here is there are two types of mount. Global mount and a bind mount. I assume these two mounts are on two different directories. Unmount is generally a system level process, it just indicates the file-system driver to shutdown gracefully. From system point of view user will do a unmount with a path and notification will be sent to the file-system driver owning that path. If your global mount and bin mount are representing two different mount points then unmounting one can not wipe out another one. Can you share what command you use to unmount in case of v1 and v2?

andyzhangx commented 1 year ago

@andyzhangx : Sorry I did not understand it well but what I observe here is there are two types of mount. Global mount and a bind mount. I assume these two mounts are on two different directories. Unmount is generally a system level process, it just indicates the file-system driver to shutdown gracefully. From system point of view user will do a unmount with a path and notification will be sent to the file-system driver owning that path. If your global mount and bin mount are representing two different mount points then unmounting one can not wipe out another one. Can you share what command you use to unmount in case of v1 and v2?

@vibhansa-msft in the beginning, we have blobfuse2 globalmount and /var/lib/kubelet/pods/d793004b-9ef5-46d6-ac66-95bebc3b4fc0/.. is a bind mount to globalmount:

# mount | grep blobfuse | sort | uniq
blobfuse2 on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/1f778bb6414796cfefe77ad67ee6e5f21be127ed1adf86affb766488a15ebee4/globalmount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
blobfuse2 on /var/lib/kubelet/pods/d793004b-9ef5-46d6-ac66-95bebc3b4fc0/volumes/kubernetes.io~csi/pvc-32e09edb-ac53-4240-976a-6e810e270018/mount type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

then I run umount /var/lib/kubelet/pods/d793004b-9ef5-46d6-ac66-95bebc3b4fc0/volumes/kubernetes.io~csi/pvc-32e09edb-ac53-4240-976a-6e810e270018/mount, after a while, the two mounts of the above mounts are all gone, mount | grep blobfuse returns empty now.

This issue only happens in blobfuse v2, and it does not happen in blobfuse v1. umount one bind mount dir now also unmounts the source blobfuse v2 mount dir.

andyzhangx commented 1 year ago

@vibhansa-msft could you check whether there is implementation difference for unmount in blobfuse v2 or is this a fuse2 driver issue itself?

andyzhangx commented 1 year ago

It could be reproed on Ubuntu 18.04.6 LTS 5.4.0-1101-azure #107~18.04.1-Ubuntu, I suspect it's related to these two flags --pre-mount-validate=true --ignore-open-flags=true, if I remove these two flags, then unmount bind mount dir won't unmount source blobfuse v2 mount dir automatically.

export AZURE_STORAGE_BLOB_ENDPOINT=andygoofys.blob.core.windows.net
export AZURE_STORAGE_ACCOUNT=andygoofys
export AZURE_STORAGE_ACCESS_KEY=
mkdir /tmp/blobfusev2
blobfuse2 mount /tmp/blobfusev2 --container-name=blobfuse --tmp-path=/tmp/blobfusev2-temp/ -o allow_other --pre-mount-validate=true --ignore-open-flags=true
mkdir /tmp/blobfusev2-bind
mount --bind /tmp/blobfusev2/ /tmp/blobfusev2-bind
mount | grep blobfuse2
umount /tmp/blobfusev2-bind
vibhansa-msft commented 1 year ago

There is no unmount implementation as such, unmount is a standard linux command which user fires with a path and blobfuse binary just gets a signal to shut down. Unmount is not something that blobfuse can trigger. Not sure why we are having a difference here in v1 vs v2 but ideally unmount is something that user controls. "--pre-mount-validate=true" : works only in v1, v2 just ignores that option as there is no such need here. "--ignore-open-flags=true" : is a v2 specific option for fuse3 and it just controls when user opens a file, whether to override the mode given by user or not (it has some perf impact) and both of these are not related to unmount in any way.

vibhansa-msft commented 1 year ago

"mount --bind /tmp/blobfusev2/ /tmp/blobfusev2-bind" : this is something new that we generally do not try in our use-case, I need to investigate on this as to how it's expected to work.

andyzhangx commented 1 year ago

@vibhansa-msft one strange thing is that after I run umount /tmp/blobfusev2-bind, I got following result:

mount | grep blobfuse
/dev/sda1 on /tmp/blobfusev2-bind type ext4 (rw,relatime,discard)

so after /tmp/blobfusev2-bind unmounted, it's bound to /dev/sda1 later.

vibhansa-msft commented 1 year ago
$ ./blobfuse2 mount /usr/blob_mnt -o allow_other --pre-mount-validate=true --ignore-open-flags=true --config-file=./config.yaml

$ sudo mount --bind /usr/blob_mnt /usr/tmp_mnt/

$ mount | grep blobfuse
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/blob_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/tmp_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)

$ sudo umount  /usr/tmp_mnt

$ mount | grep blobfuse
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/blob_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)

I am not observing this issue in my Ubn-18 running with blobfuse2.

vibhansa-msft commented 1 year ago

Even if I unmount /usr/blob_mnt itself, my binding is still available, and I can access my storage account through the alias. Have tried without --pre-mount-validate and allow_other options as well, still holds good for me.

pa-mc commented 1 year ago
$ ./blobfuse2 mount /usr/blob_mnt -o allow_other --pre-mount-validate=true --ignore-open-flags=true --config-file=./config.yaml

$ sudo mount --bind /usr/blob_mnt /usr/tmp_mnt/

$ mount | grep blobfuse
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/blob_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/tmp_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)

$ sudo umount  /usr/tmp_mnt

$ mount | grep blobfuse
/home/vikas/go/src/azure-storage-fuse/blobfuse2 on /usr/blob_mnt type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)

I am not observing this issue in my Ubn-18 running with blobfuse2.

@vibhansa-msft @andyzhangx Then would you guys think there are some fundamental differences in terms of mount & unmount between ubuntu 18 vs ubuntu 22?

AKS 1.25.5 uses `Ubuntu 22.04.1 LTS

PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

AKS 1.24.9 uses 18.04.6 LTS (Bionic Beaver)

NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
andyzhangx commented 1 year ago

@pa-mc I could also repro this issue in Ubuntu 18.04 with blobfuse v2

vibhansa-msft commented 1 year ago

Steps to reproduce consistently.

blobfuse2 mount /tmp/blobfusev2 --container-name=blobfuse --tmp-path=/tmp/blobfusev2-temp/ --ignore-open-flags=true --pre-mount-validate=true -o allow_other && mount --bind /tmp/blobfusev2/ /tmp/blobfusev2-bind
sleep 1
mount | grep blobfuse2
sleep 1
umount /tmp/blobfusev2-bind
mount | grep blobfuse2

When Blobfuse2 mount command is executed, a process is started which validates the basic config and then start another daemon process (child process) which actually does the mount and serves file-system calls. When parent process starts the child process, on successful creation parents exists with success status. Child process the later scheduled and it mounts the file-system. In case of above scenario when "mount --bind" is executed immediately after the mount command it may happen that child process has not yet mounted the file-system and "mount --bind" is hit. In such condition it will bind the directory with an alias. Later child process will go and mount container to that directory and this alias will go into inconsistent state. At this stage if user tries to unmount the aliased directory actual directory also gets unmounted as the blobfuse process goes down when file-system is unmounted.

This issue was not in v1 because the way child processes are forked and handled are different in v1 and v2. V1 being a C++ code, fork() starts the child process and before parent exists child mounts immediately after fork. In GoLang daemonize process restarts the binary which again has to go through the config parsing the other steps before it can hit the libfuse library to mount.

Potential way out here are as follows:

andyzhangx commented 1 year ago

update: we are going to fix this issue in blob csi driver v1.19.2 and v1.20.1, and then rollout the fixed version on AKS, if you have any AKS cluster hitting this issue, pls email me the aks cluster api-server address (you could find my mail address in my github account), I would help mitigate this issue immediately so you don't need to wait a few days for AKS release roll out in your region.

pa-mc commented 1 year ago

@andyzhangx @vibhansa-msft Two 🐐 s 😄

So @andyzhangx It's alright, I'm not in a hurry right now, I can wait till the the AKS release to happen. I've changed my AKS 1.25.5 to use NFS mount rather than Blobfuse2 mount. Speaking of which, the AKS release, is there a channel (slack or other) for me to monitor when the fix is merged into the necessary AKS version? Also what do I need to do to make sure the change propagate through existing AKS clusters? Perhaps do a az aks update or something like that?

cvvz commented 1 year ago

I just filed a PR to solve the problem from blobfuse2 side, please take a look. https://github.com/Azure/azure-storage-fuse/pull/1088 @vibhansa-msft @pa-mc @andyzhangx

andyzhangx commented 1 year ago

@andyzhangx @vibhansa-msft Two 🐐 s 😄

So @andyzhangx It's alright, I'm not in a hurry right now, I can wait till the the AKS release to happen. I've changed my AKS 1.25.5 to use NFS mount rather than Blobfuse2 mount. Speaking of which, the AKS release, is there a channel (slack or other) for me to monitor when the fix is merged into the necessary AKS version? Also what do I need to do to make sure the change propagate through existing AKS clusters? Perhaps do a az aks update or something like that?

@pa-mc pls check on https://github.com/Azure/AKS/releases, and the fix would be in 0319 release, and https://releases.aks.azure.com/ site would show you the release rollout progress on every region. This csi driver version upgrade would happen in the backend, you don't need to do anything. And yes, NFS mount is safe now on AKS 1.25

kumaaaah commented 1 year ago

If you are running blobfuse on a container you can follow this. And better to be consitent with fuse3 on container and host. To run container use

  docker run -it --rm \
      --cap-add=SYS_ADMIN \
      --device=/dev/fuse \
      --security-opt apparmor:unconfined \
      -e AZURE_STORAGE_ACCOUNT \
      -e AZURE_STORAGE_ACCESS_KEY \
      -e AZURE_STORAGE_ACCOUNT_CONTAINER \
      <image>

Hi @vibhansa-msft I successfully mounted the blob in a docker container now. Please kindly tell me how should I do to mount the same blob to an AKS container?

Thank you very much.

vibhansa-msft commented 1 year ago

Fixed with #1088

pa-mc commented 1 year ago

Thanks for all the help @vibhansa-msft @andyzhangx @cvvz !!

Here is the BlobfuseV2 CSI driver logs after the patch. No longer GRPC errors, and mount persists after numerous restart of the Pod :) Again, thank you so much all of your help! ```shell ❯ kubectl logs csi-blob-node-44xp2 -c blob -n kube-system -f I0323 15:02:03.652753 5917 main.go:117] set up prometheus server on [::]:29635 I0323 15:02:03.653280 5917 blob.go:235] DRIVER INFORMATION: ------------------- Build Date: "2023-03-18T08:11:26Z" Compiler: gc Driver Name: blob.csi.azure.com Driver Version: v1.19.2 Git Commit: b313e4f5b30b4cc62ac5fd37041c0b85299a2cf1 Go Version: go1.19.1 Platform: linux/amd64 Streaming logs below: I0323 15:02:03.653297 5917 blob.go:238] driver userAgent: blob.csi.azure.com/v1.19.2 AKS I0323 15:02:03.653408 5917 azure.go:73] set QPS(25.000000) and QPS Burst(50) for driver kubeClient I0323 15:02:03.653628 5917 azure.go:87] reading cloud config from secret kube-system/azure-cloud-provider I0323 15:02:03.706825 5917 azure.go:94] InitializeCloudFromSecret: failed to get cloud config from secret kube-system/azure-cloud-provider: failed to get secret kube-system/azure-cloud-provider: secrets "azure-cloud-provider" not found I0323 15:02:03.706842 5917 azure.go:99] could not read cloud config from secret kube-system/azure-cloud-provider I0323 15:02:03.706847 5917 azure.go:102] AZURE_CREDENTIAL_FILE env var set as /etc/kubernetes/azure.json I0323 15:02:03.706869 5917 azure.go:113] read cloud config from file: /etc/kubernetes/azure.json successfully I0323 15:02:03.707416 5917 azure_auth.go:245] Using AzurePublicCloud environment I0323 15:02:03.707432 5917 azure_auth.go:96] azure: using managed identity extension to retrieve access token I0323 15:02:03.707436 5917 azure_auth.go:102] azure: using User Assigned MSI ID to retrieve access token I0323 15:02:03.707463 5917 azure_auth.go:113] azure: User Assigned MSI ID is client ID I0323 15:02:03.707498 5917 azure.go:775] Azure cloudprovider using try backoff: retries=6, exponent=1.500000, duration=5, jitter=1.000000 I0323 15:02:03.707528 5917 azure_interfaceclient.go:74] Azure InterfacesClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707536 5917 azure_interfaceclient.go:77] Azure InterfacesClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707546 5917 azure_vmsizeclient.go:68] Azure VirtualMachineSizesClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707549 5917 azure_vmsizeclient.go:71] Azure VirtualMachineSizesClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707558 5917 azure_snapshotclient.go:70] Azure SnapshotClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707561 5917 azure_snapshotclient.go:73] Azure SnapshotClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707569 5917 azure_storageaccountclient.go:70] Azure StorageAccountClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707575 5917 azure_storageaccountclient.go:73] Azure StorageAccountClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707582 5917 azure_diskclient.go:68] Azure DisksClient using API version: 2022-03-02 I0323 15:02:03.707588 5917 azure_diskclient.go:73] Azure DisksClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707591 5917 azure_diskclient.go:76] Azure DisksClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707597 5917 azure_vmclient.go:70] Azure VirtualMachine client (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707602 5917 azure_vmclient.go:73] Azure VirtualMachine client (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707607 5917 azure_vmssclient.go:70] Azure VirtualMachineScaleSetClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707610 5917 azure_vmssclient.go:73] Azure VirtualMachineScaleSetClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707617 5917 azure_vmssvmclient.go:75] Azure vmssVM client (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707622 5917 azure_vmssvmclient.go:78] Azure vmssVM client (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707631 5917 azure_routeclient.go:69] Azure RoutesClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707634 5917 azure_routeclient.go:72] Azure RoutesClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707641 5917 azure_subnetclient.go:70] Azure SubnetsClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707646 5917 azure_subnetclient.go:73] Azure SubnetsClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707651 5917 azure_routetableclient.go:69] Azure RouteTablesClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707654 5917 azure_routetableclient.go:72] Azure RouteTablesClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707661 5917 azure_loadbalancerclient.go:70] Azure LoadBalancersClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707666 5917 azure_loadbalancerclient.go:73] Azure LoadBalancersClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707674 5917 azure_securitygroupclient.go:70] Azure SecurityGroupsClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707687 5917 azure_securitygroupclient.go:73] Azure SecurityGroupsClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707693 5917 azure_publicipclient.go:74] Azure PublicIPAddressesClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707699 5917 azure_publicipclient.go:77] Azure PublicIPAddressesClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707710 5917 azure_blobclient.go:67] Azure BlobClient using API version: 2021-09-01 I0323 15:02:03.707723 5917 azure_vmasclient.go:70] Azure AvailabilitySetsClient (read ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707726 5917 azure_vmasclient.go:73] Azure AvailabilitySetsClient (write ops) using rate limit config: QPS=10, bucket=100 I0323 15:02:03.707773 5917 azure.go:1006] attach/detach disk operation rate limit QPS: 6.000000, Bucket: 10 I0323 15:02:03.707784 5917 azure.go:149] starting node server on node(aks-dbcluster-58864392-vmss00000w) I0323 15:02:03.707794 5917 blob.go:243] cloud: AzurePublicCloud, location: canadacentral, rg: pa-data-pa-data-aks-devtest-rg-node-rg, VnetName: aks-vnet-20107475, VnetResourceGroup: , SubnetName: aks-subnet I0323 15:02:03.709518 5917 mount_linux.go:283] Detected umount with safe 'not mounted' behavior I0323 15:02:03.709561 5917 driver.go:80] Enabling controller service capability: CREATE_DELETE_VOLUME I0323 15:02:03.709568 5917 driver.go:80] Enabling controller service capability: EXPAND_VOLUME I0323 15:02:03.709571 5917 driver.go:80] Enabling controller service capability: SINGLE_NODE_MULTI_WRITER I0323 15:02:03.709575 5917 driver.go:99] Enabling volume access mode: SINGLE_NODE_WRITER I0323 15:02:03.709579 5917 driver.go:99] Enabling volume access mode: SINGLE_NODE_READER_ONLY I0323 15:02:03.709584 5917 driver.go:99] Enabling volume access mode: SINGLE_NODE_SINGLE_WRITER I0323 15:02:03.709588 5917 driver.go:99] Enabling volume access mode: SINGLE_NODE_MULTI_WRITER I0323 15:02:03.709593 5917 driver.go:99] Enabling volume access mode: MULTI_NODE_READER_ONLY I0323 15:02:03.709596 5917 driver.go:99] Enabling volume access mode: MULTI_NODE_SINGLE_WRITER I0323 15:02:03.709603 5917 driver.go:99] Enabling volume access mode: MULTI_NODE_MULTI_WRITER I0323 15:02:03.709607 5917 driver.go:90] Enabling node service capability: STAGE_UNSTAGE_VOLUME I0323 15:02:03.709612 5917 driver.go:90] Enabling node service capability: SINGLE_NODE_MULTI_WRITER I0323 15:02:03.709722 5917 server.go:114] Listening for connections on address: &net.UnixAddr{Name:"//csi/csi.sock", Net:"unix"} I0323 15:02:03.841253 5917 utils.go:75] GRPC call: /csi.v1.Identity/GetPluginInfo I0323 15:02:03.841268 5917 utils.go:76] GRPC request: {} I0323 15:02:03.843209 5917 utils.go:82] GRPC response: {"name":"blob.csi.azure.com","vendor_version":"v1.19.2"} I0323 15:02:04.627990 5917 utils.go:75] GRPC call: /csi.v1.Identity/GetPluginInfo I0323 15:02:04.628002 5917 utils.go:76] GRPC request: {} I0323 15:02:04.628044 5917 utils.go:82] GRPC response: {"name":"blob.csi.azure.com","vendor_version":"v1.19.2"} I0323 15:02:04.784151 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeGetInfo I0323 15:02:04.784168 5917 utils.go:76] GRPC request: {} I0323 15:02:04.784233 5917 utils.go:82] GRPC response: {"node_id":"aks-dbcluster-58864392-vmss00000w"} I0323 15:02:55.096971 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0323 15:02:55.096987 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0323 15:02:55.097295 5917 blob.go:416] volumeID(devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod) authEnv: [] I0323 15:02:55.097307 5917 nodeserver.go:311] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount protocol nfs volumeId devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod context map[containerName:sync-backups-prod protocol:nfs resourceGroup:devtest-datalake storageAccount:nfssyncstpabackupsprod] mountflags [] serverAddress nfssyncstpabackupsprod.blob.core.windows.net I0323 15:02:55.097373 5917 mount_linux.go:244] Detected OS without systemd I0323 15:02:55.097380 5917 mount_linux.go:219] Mounting cmd (mount) with arguments (-t nfs -o sec=sys,vers=3,nolock nfssyncstpabackupsprod.blob.core.windows.net:/nfssyncstpabackupsprod/sync-backups-prod /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount) I0323 15:02:58.320611 5917 blob.go:856] skip chmod on targetPath(/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount) since mode is already 020000000777) I0323 15:02:58.320647 5917 nodeserver.go:330] volume(devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod) mount nfssyncstpabackupsprod.blob.core.windows.net:/nfssyncstpabackupsprod/sync-backups-prod on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount succeeded I0323 15:02:58.320660 5917 utils.go:82] GRPC response: {} I0323 15:02:58.323347 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 15:02:58.323360 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","target_path":"/var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{}},"access_mode":{"mode":3}},"volume_context":{"containerName":"sync-backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-mfx94","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"7bbb3fd3-7baa-4aa3-9887-30a3e3560092","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"nfs","resourceGroup":"devtest-datalake","storageAccount":"nfssyncstpabackupsprod"},"volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0323 15:02:58.323694 5917 nodeserver.go:122] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 15:02:58.323713 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 15:02:58.324736 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 15:02:58.325599 5917 nodeserver.go:138] NodePublishVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount at /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 15:02:58.325607 5917 utils.go:82] GRPC response: {} I0323 17:18:56.187847 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0323 17:18:56.187865 5917 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0323 17:18:56.187947 5917 nodeserver.go:203] NodeUnpublishVolume: unmounting volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:18:56.200704 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:18:56.200725 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:18:56.218001 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0323 17:18:56.218204 5917 nodeserver.go:208] NodeUnpublishVolume: unmount volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod on /var/lib/kubelet/pods/7bbb3fd3-7baa-4aa3-9887-30a3e3560092/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:18:56.218217 5917 utils.go:82] GRPC response: {} I0323 17:18:56.290082 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnstageVolume I0323 17:18:56.290095 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount","volume_id":"devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod"} I0323 17:18:56.290159 5917 nodeserver.go:422] NodeUnstageVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod unmounting on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount I0323 17:18:56.290182 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:18:56.290196 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount I0323 17:18:59.347361 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount" I0323 17:18:59.347716 5917 nodeserver.go:427] NodeUnstageVolume: volume devtest-datalake#nfssyncstpabackupsprod#sync-backups-prod unmount on /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/40d24c216b1da97a64a7ec1a32b5019a13c40b0172ad3fa7a0af09e4bb96c5a8/globalmount successfully I0323 17:18:59.347737 5917 utils.go:82] GRPC response: {} I0323 17:21:03.958644 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeStageVolume I0323 17:21:03.958656 5917 utils.go:76] GRPC request: {"secrets":"***stripped***","staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:21:03.959018 5917 blob.go:416] volumeID(rg-backups-prod#stpabackupsprod#backups-prod) authEnv: [] I0323 17:21:03.959057 5917 nodeserver.go:353] target /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount protocol fuse2 volumeId rg-backups-prod#stpabackupsprod#backups-prod context map[containerName:backups-prod protocol:fuse2 resourceGroup:rg-backups-prod storageAccount:stpabackupsprod] mountflags [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true --cancel-list-on-mount-seconds=5 -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true] mountOptions [-o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true --cancel-list-on-mount-seconds=5 -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --pre-mount-validate=true --use-https=true --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod] args /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount -o allow_other --file-cache-timeout-in-seconds=120 --use-attr-cache=true --cancel-list-on-mount-seconds=5 -o attr_timeout=120 -o entry_timeout=120 -o negative_timeout=120 --log-level=LOG_DEBUG --cache-size-mb=1000 --virtual-directory=true --pre-mount-validate=true --use-https=true --empty-dir-check=false --tmp-path=/mnt/rg-backups-prod#stpabackupsprod#backups-prod --container-name=backups-prod serverAddress stpabackupsprod.blob.core.windows.net I0323 17:21:03.959084 5917 nodeserver.go:144] mouting using blobfuse proxy I0323 17:21:03.959595 5917 nodeserver.go:158] calling BlobfuseProxy: MountAzureBlob function I0323 17:21:06.856924 5917 nodeserver.go:401] volume(rg-backups-prod#stpabackupsprod#backups-prod) mount on "/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount" succeeded I0323 17:21:06.856956 5917 utils.go:82] GRPC response: {} I0323 17:21:06.859270 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 17:21:06.859282 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-thh2f","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"e25f0f5f-1027-4dc3-bc25-bb906fdee5e5","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:21:06.859636 5917 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 17:21:06.859651 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:21:06.860741 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:21:06.861609 5917 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:21:06.861619 5917 utils.go:82] GRPC response: {} I0323 17:22:34.743930 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 17:22:34.743942 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-9r5cp","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:22:34.744362 5917 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 17:22:34.744400 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:22:34.745739 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:22:34.746746 5917 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:22:34.746763 5917 utils.go:82] GRPC response: {} I0323 17:22:36.253015 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0323 17:22:36.253073 5917 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:22:36.253134 5917 nodeserver.go:203] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:22:36.253151 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:22:36.253161 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:22:36.255379 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0323 17:22:36.255442 5917 nodeserver.go:208] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/e25f0f5f-1027-4dc3-bc25-bb906fdee5e5/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:22:36.255453 5917 utils.go:82] GRPC response: {} I0323 17:23:23.927984 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 17:23:23.928001 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-n9zqv","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"43e2afd8-7973-4fc4-9136-17855d409f9b","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:23:23.928461 5917 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 17:23:23.928486 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:23:23.929710 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:23:23.930783 5917 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:23:23.930803 5917 utils.go:82] GRPC response: {} I0323 17:23:25.134756 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0323 17:23:25.135162 5917 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:23:25.135288 5917 nodeserver.go:203] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:23:25.135316 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:23:25.135335 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:23:25.137375 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0323 17:23:25.137468 5917 nodeserver.go:208] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/ced5f698-8b9a-4f2c-ab2d-7896f9bcd4ed/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:23:25.137480 5917 utils.go:82] GRPC response: {} I0323 17:24:18.535154 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 17:24:18.535166 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-qnhzt","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"a406cc56-4df3-432c-ba71-7b95f0786597","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:24:18.535564 5917 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 17:24:18.535579 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:24:18.536922 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:24:18.537909 5917 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:24:18.537921 5917 utils.go:82] GRPC response: {} I0323 17:24:19.741693 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0323 17:24:19.741710 5917 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:24:19.741755 5917 nodeserver.go:203] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:24:19.741773 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:24:19.741783 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:24:19.774871 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0323 17:24:19.774964 5917 nodeserver.go:208] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/43e2afd8-7973-4fc4-9136-17855d409f9b/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:24:19.774975 5917 utils.go:82] GRPC response: {} I0323 17:25:41.801888 5917 utils.go:75] GRPC call: /csi.v1.Node/NodePublishVolume I0323 17:25:41.801901 5917 utils.go:76] GRPC request: {"staging_target_path":"/var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount","target_path":"/var/lib/kubelet/pods/34a079a8-9e45-40b8-a38b-47cf2cd673fb/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_capability":{"AccessType":{"Mount":{"mount_flags":["-o allow_other","--file-cache-timeout-in-seconds=120","--use-attr-cache=true","--cancel-list-on-mount-seconds=5","-o attr_timeout=120","-o entry_timeout=120","-o negative_timeout=120","--log-level=LOG_DEBUG","--cache-size-mb=1000","--virtual-directory=true"]}},"access_mode":{"mode":3}},"volume_context":{"containerName":"backups-prod","csi.storage.k8s.io/ephemeral":"false","csi.storage.k8s.io/pod.name":"orientdbservice-58c79ffb79-cbssg","csi.storage.k8s.io/pod.namespace":"pa-data-services","csi.storage.k8s.io/pod.uid":"34a079a8-9e45-40b8-a38b-47cf2cd673fb","csi.storage.k8s.io/serviceAccount.name":"default","protocol":"fuse2","resourceGroup":"rg-backups-prod","storageAccount":"stpabackupsprod"},"volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:25:41.802281 5917 nodeserver.go:122] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mounting /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/34a079a8-9e45-40b8-a38b-47cf2cd673fb/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount with mountOptions: [bind] I0323 17:25:41.802297 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/34a079a8-9e45-40b8-a38b-47cf2cd673fb/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:25:41.803521 5917 mount_linux.go:219] Mounting cmd (mount) with arguments ( -o bind,remount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount /var/lib/kubelet/pods/34a079a8-9e45-40b8-a38b-47cf2cd673fb/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount) I0323 17:25:41.804503 5917 nodeserver.go:138] NodePublishVolume: volume rg-backups-prod#stpabackupsprod#backups-prod mount /var/lib/kubelet/plugins/kubernetes.io/csi/blob.csi.azure.com/a827afe57ea9da516011d9c85fceef41165a4bda0ace1d794dbb683b93ddd556/globalmount at /var/lib/kubelet/pods/34a079a8-9e45-40b8-a38b-47cf2cd673fb/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:25:41.804515 5917 utils.go:82] GRPC response: {} I0323 17:25:43.107920 5917 utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume I0323 17:25:43.108075 5917 utils.go:76] GRPC request: {"target_path":"/var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount","volume_id":"rg-backups-prod#stpabackupsprod#backups-prod"} I0323 17:25:43.108167 5917 nodeserver.go:203] NodeUnpublishVolume: unmounting volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:25:43.108216 5917 mount_helper_common.go:93] unmounting "/var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" (corruptedMount: false, mounterCanSkipMountPointChecks: true) I0323 17:25:43.108247 5917 mount_linux.go:361] Unmounting /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount I0323 17:25:43.114662 5917 mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount" I0323 17:25:43.114755 5917 nodeserver.go:208] NodeUnpublishVolume: unmount volume rg-backups-prod#stpabackupsprod#backups-prod on /var/lib/kubelet/pods/a406cc56-4df3-432c-ba71-7b95f0786597/volumes/kubernetes.io~csi/pv-stpabackupsprod-blob-container/mount successfully I0323 17:25:43.114769 5917 utils.go:82] GRPC response: {} ```
vibhansa-msft commented 1 year ago

Great !!!

kumaaaah commented 1 year ago

Thank you for all your help. Our AKS can work with blobfuse2 now!

kvet commented 1 year ago

Hi. Our team is experiencing the same issue with blobfuse2 on AKS 1.24.10. We have enabled managed blob-csi driver and its version is v1.19.2. The following error is produced during unmount:

mount_helper_common.go:150] Warning: deleting path "/var/lib/kubelet/pods/ab292926-4f67-43cb-a848-7ed8feeaa482/volumes/kubernetes.io~csi/bundle-reports-volume/mount"
utils.go:80] GRPC error: rpc error: code = Internal desc = failed to unmount target "/var/lib/kubelet/pods/ab292926-4f67-43cb-a848-7ed8feeaa482/volumes/kubernetes.io~csi/bundle-reports-volume/mount": remove /var/lib/kubelet/pods/ab292926-4f67-43cb-a848-7ed8feeaa482/volumes/kubernetes.io~csi/bundle-reports-volume/mount: device or resource busy
utils.go:75] GRPC call: /csi.v1.Node/NodeUnpublishVolume

From the discussion above I understood that the fix landed in v1.19.2 and deployed to managed blob-csi drivers with the 0319 release (which is deployed to our location West Europe). Is it expected behaviour?