如何在AKS中删除PV时自动删除带快照租赁的Azure文件共享?
AKS删除带备份的Azure文件共享PV时,如何自动处理快照租赁?
解决办法
1. 配置StorageClass自动处理(推荐)
修改你的StorageClass,添加deleteOptions参数,让CSI驱动删除文件共享时自动包含快照并强制处理租赁:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azurefile provisioner: file.csi.azure.com parameters: skuName: Standard_LRS deleteOptions: "include-snapshots,include-leased-snapshots" # 核心参数 reclaimPolicy: Delete # 必须设为Delete才会自动删除PV和关联文件共享 volumeBindingMode: Immediate
设置后,删除PVC时,CSI驱动会自动调用带include-leased-snapshots参数的删除接口,直接清理带系统租赁的备份快照,无需手动干预。
2. 手动清理已卡住的PV和文件共享
如果已经出现PV卡在Released状态的情况,用Azure CLI强制删除文件共享,再清理Kubernetes中的PV:
# 强制删除带快照和活动租赁的文件共享 az storage share delete --name <你的文件共享名> --account-name <存储账户名> --delete-snapshots include --force-delete-snapshots-with-active-leases # 手动删除Kubernetes中的PV kubectl delete pv <你的PV名称>
3. 用PreDelete钩子联动备份停止
如果需要保留备份功能,又想自动触发清理流程,可以给PVC添加PreDelete钩子,在删除前先停止备份并删除备份数据:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc annotations: pre-hook.command: "az backup protection stop --vault-name <备份Vault名称> --container-name <存储账户对应的备份容器名> --item-name <文件共享名> --delete-backup-data"
注意:需要确保AKS节点上已安装Azure CLI,且节点身份拥有备份操作的权限。
问题根源
Azure文件共享启用备份后,备份服务会给生成的快照添加系统级活动租赁,这类租赁无法手动释放。默认情况下,AKS的Azure CSI驱动删除文件共享时不会处理带租赁的快照,因此会返回DeleteShareWhenSnapshotLeased错误,导致PV卡在Released状态,文件共享无法删除。
而deleteOptions是Azure CSI驱动适配K8s 1.21+版本后支持的参数,专门用于处理这类带快照和租赁的文件共享删除场景。
内容的提问来源于stack exchange,提问作者Den4MD
相关产品推荐
相关产品推荐

