本文介绍使用云盘存储卷的常见问题和解决方法。
问题导航
| 类型 | 问题 | 
| 创建 | |
| 挂载 | |
| 使用 | |
| 扩容 | |
| 卸载 | |
| 其他 | 
云盘创建
动态创建PV失败且提示InvalidDataDiskCatagory.NotSupported
问题现象
创建PV失败,PVC Event提示InvalidDataDiskCategory.NotSupported。
问题原因
当前可用区不支持创建StorageClass中指定类型的云盘,或者当前可用区内指定类型的云盘库存不足。
解决方案
- 升级CSI组件,使用名称为alicloud-disk-topology-alltype的StorageClass。或者参考使用云盘动态存储卷,创建并使用自定义StorageClass,在StorageClass中声明多种类型的云盘。 
- 为集群添加多个可用区。更多信息,请参见云盘存储卷的高可用配置建议。 
动态创建PV失败且提示The specified AZone inventory is insufficient
问题现象
创建PV失败,PVC Event提示The specified AZone inventory is insufficient。
问题原因
指定的可用区内云盘库存不足,导致创建云盘失败。
解决方案
- 升级CSI组件,使用名称为alicloud-disk-topology-alltype的StorageClass。或者参考使用云盘动态存储卷,创建并使用自定义StorageClass,在StorageClass中声明多种类型的云盘。 
- 为集群添加多个可用区。更多信息,请参见云盘存储卷的高可用配置建议。 
动态创建PV失败且提示disk size is not supported
问题现象
动态创建PV失败,PVC Event提示disk size is not supported。
问题原因
在PVC中指定的云盘容量大小不符合要求,不同类型云盘有最小容量的限制。关于云盘的容量要求,请参见云盘类型。
解决方案
调整PVC中声明的容量大小,使其满足要求。
动态创建PV失败且提示waiting for first consumer to be created before binding
问题现象
使用WaitForFirstConsumer的StorageClass创建PV失败,PVC Event提示persistentvolume-controller waiting for first consumer to be created before binding。
问题原因
PVC未检测到Pod所调度到的节点。
- 应用的YAML中显示指定了 - nodeName,此类Pod不会经过调度器逻辑,导致PVC无法感知。因此通过指定- nodeName调度的Pod,无法使用WaitForFirstConsumer的StorageClass。
- 不存在引用当前PVC的Pod。 
解决方案
- 删除应用YAML中的 - nodeName相关字段,使用其他调度方式。
- 创建使用当前PVC的Pod。 
动态创建PV失败且提示no topology key found on CSINode node-XXXX
问题现象
创建PV失败,PVC Event提示no topology key found on CSINode node-XXXX。
问题原因
- 原因1:node-XXXX对应节点的csi-plugin启动失败。 
- 原因2:挂载使用了系统不支持的Driver,系统默认支持Disk、NAS、OSS。 
解决方案
- 查看Pod状态是否正常。 - kubectl get pods -n kube-system -o wide | grep node-XXXX- 状态异常:通过命令 - kubectl logs csi-plugin-xxxx -nkube-system -c csi-plugin查看异常日志。多数情况是因为节点端口被占用,您可参考以下步骤处理。- 关闭占用端口的进程。 
- 在csi-plugin上增加 - SERVICE_PORT的环境变量,指定新的端口。- kubectl set env -n kube-system daemonset/csi-plugin --containers="csi-plugin" SERVICE_PORT="XXX"
 
- 状态正常:跳转下一步。 
 
- 挂载使用系统默认的Driver,即Disk、NAS、OSS等。详情请参见存储目录下的操作文档。 
动态创建PV失败且提示selfLink was empty, can't make reference
问题现象
创建PV失败,PVC Event提示selfLink was empty, can't make reference。
问题原因
- 集群版本和CSI组件版本不匹配。 
- 集群使用Flexvolume存储插件。 
解决方案
- 升级CSI组件版本。一般组件版本需要和集群版本保持一致。例如,Kubernetes版本为1.20的集群需要匹配安装的CSI版本为1.20及以上版本。 
- 如您的集群使用Flexvolume存储插件,请迁移Flexvolume至CSI。 
PVC的容量申请低于20 GiB时,动态创建PV失败
根据云盘类型的差异,各类型云盘支持的容量范围不同。如果使用ACK提供的默认StorageClass(如alicloud-disk-topology-alltype、alicloud-disk-essd等),默认情况下,自动创建的云盘(如ESSD PL1云盘)的容量限制为最低20 GiB。如果您的存储需求低于20 GiB,建议手动创建StorageClass并指定云盘类型,确保动态创建的云盘为支持低于20 GiB容量的云盘(如ESSD AutoPL云盘、ESSD PL0云盘等)。
云盘挂载
启动挂载了云盘的Pod时提示had volume node affinity conflict
问题现象
启动挂载了云盘的Pod,Pod无法启动,Pod Event提示had volume node affinity conflict。
问题原因
所有的PV中都存在nodeaffinity属性,当PV中nodeaffinity属性和Pod的nodeaffinity属性不一致时会出现上述报错,调度器因属性冲突无法调度。
解决方案
修改PV或者Pod的nodeaffinity属性,使二者的nodeaffinity属性保持一致。
启动挂载了云盘的Pod时提示can't find disk
问题现象
启动挂载了云盘的Pod,Pod无法启动,Pod Event提示can't find disk。
问题原因
- 配置PV时,输入了错误的云盘ID,或者其他Region的云盘ID。 
- 您的账号无权限操作该云盘,可能不是当前账号的云盘。 
解决方案
- 如果是静态挂载的云盘,请检查使用的云盘是否满足要求。 - 云盘所在的Region与集群所在的Region一致。 
- 云盘ID信息复制无误。 
- 云盘与当前集群处于同一个账号下。 
 
- 如果是动态挂载的云盘,请检查CSI组件的权限。 - 确认当前集群是否存在Addon Token。 - 如果存在,检查集群中的CSI组件版本,将其直接升级到最新版后再重试。 
- 如果不存在,默认使用的是节点的Worker Role用户自定义的AccessKey,需要检查对应的Policy权限。 
 
启动挂载了云盘的Pod时提示Previous attach action is still in process
问题现象
启动挂载了云盘的Pod时提示Previous attach action is still in process,数秒后Pod启动成功。
问题原因
当前ECS不支持多块云盘同时挂载到一台虚拟机上。因此,当有多个挂载了云盘的Pod被调度到同一台宿主机时,云盘挂载会串行操作。出现如上提示信息,说明此刻当前节点正在被其他云盘挂载。
解决方案
无需处理,会自动重试,直至成功。
启动挂载了云盘的Pod时提示InvalidInstanceType.NotSupportDiskCategory
问题现象
启动挂载了云盘的Pod时提示InvalidInstanceType.NotSupportDiskCategory。
问题原因
云盘类型与ECS实例规格不匹配,即Pod调度到的ECS节点不支持该类型的云盘,因此挂载失败。
解决方案
您可以尝试以下方法解决问题:
- 查看ECS节点的实例规格,确保存在支持该类型云盘的ECS节点,同时确保已配置调度将Pod调度到该节点。 
- 如果当前ECS节点的实例规格均不支持该类型的云盘,请使用其他类型的云盘。 
关于云盘类型和ECS实例规格的匹配关系,请参见实例规格族。
启动挂载了云盘的Pod时提示diskplugin.csi.alibabacloud.com not found in the list of registered CSI drivers
问题现象
启动Pod的时候,出现以下警告。
Warning  FailedMount       98s (x9 over 3m45s)  kubelet, cn-zhangjiakou.172.20.XX.XX  MountVolume.MountDevice failed for volume "d-xxxxxxx" : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name diskplugin.csi.alibabacloud.com not found in the list of registered CSI drivers问题原因
- 一般出现在新增的节点。由于CSI的Pod是和业务Pod一起启动,且CSI注册需要一定时间,所以业务Pod开始挂载的时候,CSI还没有注册完成,导致出现警告。 
- 当前节点的CSI组件注册失败,可能是因为某些原因导致CSI组件没有正常启动。 
解决方案
- 如果是新增节点的告警,无需处理,等待系统重试即可。 
- 如果CSI组件注册失败,请检查CSI组件状态和CSI组件日志。如果CSI组件正常,请加入钉钉用户群(钉钉群号:35532895)处理。 
启动挂载了云盘的Pod时提示Multi-Attach error for volume
问题现象
启动了挂载云盘的Pod,Pod Event提示warning failedAttachVolume xxx xxx Multi-Attach error for volume "xxx",通过kubectl describe pvc <pvc-name>观察到有多个Pod引用同一个PVC。
问题原因
- 原因1:未开启多重挂载的云盘只能同时被一个Pod挂载,不能同时被多个Pod挂载使用。 
- 原因2:之前使用PVC的Pod已经删除,但是PVC对应的云盘未能正常卸载。 - 通过ECS管理控制台查看该PVC对应云盘当前被挂载的节点,并查看该节点上csi-plugin的Pod日志,存在 - Path is mounted, no remove: /var/lib/kubelet/plugins/kubernetes.io/csi/diskplugin.csi.alibabacloud.com/xxx/globalmount信息。同时,通过以下命令,确认csi-plugin是否直接挂载了- /var/runHostPath:- kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'- 若输出不为空,则存在直接挂载,并确认存在该问题。 
解决方案
- 原因1解决方案: - 确保多Pod不能引用同一个PVC,解决Pod引用PVC的问题。 
- 原因2解决方案: - 请通过以下命令手动修复csi-plugin的YAML文件,修复之后问题即可解决。 - kubectl patch -n kube-system daemonset csi-plugin -p ' spec: template: spec: containers: - name: csi-plugin volumeMounts: - mountPath: /host/var/run/efc name: efc-metrics-dir - mountPath: /host/var/run/ossfs name: ossfs-metrics-dir - mountPath: /host/var/run/ $patch: delete volumes: - name: ossfs-metrics-dir hostPath: path: /var/run/ossfs type: DirectoryOrCreate - name: efc-metrics-dir hostPath: path: /var/run/efc type: DirectoryOrCreate - name: fuse-metrics-dir $patch: delete'
启动挂载了云盘的Pod时提示Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: timed out waiting for the condition
问题现象
启动了挂载存储的Pod,Pod Event提示Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: timed out waiting for the condition。
问题原因
该Event是kubelet报出的错误信息,kubelet会循环检查所有节点的Pod所使用的存储卷是否Ready,如果存储卷没有Ready,会出现上述报错信息。
该Event报错并没有实际意义,仅说明在当前时间点挂载还未完成,可能原因如下。
- 原因1:挂载报错,由于报错时间过长,有效Event已过期被覆盖,残留的只有上面Kubelet报错的Event。 
- 原因2:Kubelet获取 - configmap/serviceaccount defaulttoken超时导致报错,属于节点网络问题,只能更换节点重试。
- 原因3:在Pod模板中配置了 - securityContext.fsGroup参数时,云盘存储卷挂载时将自动调整卷内文件的所有者。根据文件数量,这可能导致较长的准备时间。
- 原因4:如为静态挂载的存储卷,需确认存储卷中的 - driver字段是否正确,例如是否存在拼写问题。如果该字段错误,可能导致kubelet无法找到并调用正确的- driver,从而阻塞存储卷Ready。
解决方案
- 原因1解决方案:删除Pod,使其重启。找到真正报错的Event,根据真正报错的Event定位具体问题。 
- 原因2解决方案:将Pod重新调度到其他节点。具体操作,请参见调度应用至指定节点。 
- 原因3解决方案:对于1.20及以上版本的Kubernetes集群,可将 - fsGroupChangePolicy配置为- OnRootMismatch,这样只有在首次启动时才会自动调整文件的所有者。后续Pod升级重建等场景下,挂载存储卷的时间将恢复正常。关于- fsGroupChangePolicy参数的更多信息,请参见为Pod或容器配置安全性上下文。若仍不能满足需求,建议利用- initContainer自行实现调整权限相关操作。
- 原因4解决方案:检查并填写正确的driver name,例如: - diskplugin.csi.alibabacloud.com 
- nasplugin.csi.alibabacloud.com 
- ossplugin.csi.alibabacloud.com 
 
启动挂载了云盘的Pod时提示validate error Device /dev/nvme1n1 has error format more than one digit locations
问题现象
启动挂载了云盘的Pod,Pod无法启动,Pod Event提示validate error Device /dev/nvme1n1 has error format more than one digit locations。
问题原因
节点使用了g7se、r7se、c7se或任意八代ECS规格,且集群版本和CSI组件版本过低,不支持NVMe类型的节点进行云盘挂载。
解决方案
请确保您的ACK集群版本不低于1.20,并将CSI组件版本升级至v1.22.9-30eb0ee5-aliyun及以上。升级组件具体操作,请参见管理组件。
Flexvolume类型组件不支持。请加入钉钉用户群(钉钉群号:35532895)咨询,将Flexvolume组件迁移至CSI组件。
启动挂载了云盘的Pod时提示ecs task is conflicted
问题现象
启动挂载了云盘的Pod,启动失败,Pod Event提示ecs task is conflicted。
问题原因
部分ECS任务需要串行,当有多个请求同时发送到ECS时,会出现ECS任务冲突报错。
解决方案
以下方案选择一种:
- 等待一段时间,CSI会自动重试。若您其他任务已经完成,CSI重试时会成功挂载云盘。 
- 参见使用云盘并行挂载处理。 
启动挂载了云盘的Pod时提示wrong fs type, bad option, bad superblock on /dev/xxxxx missing codepage or helper program, or other error
问题现象
启动挂载了云盘的Pod,出现Pod无法启动,Pod Event提示如下。
wrong fs type, bad option, bad superblock on /dev/xxxxx  missing codepage or helper program, or other error问题原因
云盘的文件系统损坏,导致云盘无法挂载。
解决方案
一般由于业务不正常的拔盘导致,请参考以下步骤处理。
- 检查应用使用云盘时是否满足以下要求。 - 不存在多个Pod挂载同一块云盘。 
- 在拔盘过程中请勿写入数据。 
 
- 登录Pod所在的宿主机,通过命令 - fsck -y /dev/xxxxx修复云盘上的文件系统。- 其中 - /dev/xxxxx为Pod Event对应的报错提示。修复云盘文件系统时,会修改文件系统的元数据。如果无法修复或者修复失败,表明云盘上的文件系统已损坏,无法继续使用。
启动挂载了云盘的Pod时提示exceed max volume count
问题现象
启动挂载了云盘的Pod,Pod长期处于Pending状态,无法完成调度。但根据ECS规格,节点上还可以挂载更多的云盘。Pod Event提示如下。
0/1 nodes are available: 1 node(s) exceed max volume count.问题原因
Pod调度受到MAX_VOLUMES_PERNODE环境变量指定数量的限制。
解决方案
- v1.26.4-e3de357-aliyun及以上版本的csi-plugin组件支持自动配置云盘挂载数量。您可以执行以下命令,手动删除kube-system命名空间下csi-plugin daemonset中的 - MAX_VOLUMES_PERNODE环境变量,以自动根据ECS规格配置云盘挂载数量。- kubectl patch -n kube-system daemonset csi-plugin -p ' spec: template: spec: containers: - name: csi-plugin env: - name: MAX_VOLUMES_PERNODE $patch: delete'
- v1.26.4-e3de357-aliyun以下版本的csi-plugin组件仅支持通过环境变量配置云盘挂载数量,请根据整个集群中可挂载数据盘数量最少的节点,手动调整该环境变量。 
- 自动配置数量限制仅发生在csi-plugin Pod启动时。若您手动在节点上添加或移除了数据盘,请重建该节点上的csi-plugin Pod,以重新触发自动配置。 
- 自动配置功能暂不支持云盘静态存储卷。若存在该类型的存储卷,可调度的Pod数量会偏小。 
启动挂载了云盘的Pod时提示The amount of the disk on instance in question reach its limits
问题现象
启动挂载了云盘的Pod,Pod长期处于ContainerCreating状态,Pod Event提示如下。
MountVolume.MountDevice failed for volume "d-xxxx" : rpc error: code = Aborted desc = NodeStageVolume: Attach volume: d-xxxx with error: rpc error: code = Internal desc = SDK.ServerError
ErrorCode: InstanceDiskLimitExceeded
Message: The amount of the disk on instance in question reach its limits问题原因
MAX_VOLUMES_PERNODE环境变量设置过大。
解决方案
- v1.26.4-e3de357-aliyun及以上版本的csi-plugin组件支持自动配置云盘挂载数量。您可以执行以下命令,手动删除kube-system命名空间下csi-plugin daemonset中的 - MAX_VOLUMES_PERNODE环境变量,以自动根据ECS规格配置云盘挂载数量。- kubectl patch -n kube-system daemonset csi-plugin -p ' spec: template: spec: containers: - name: csi-plugin env: - name: MAX_VOLUMES_PERNODE $patch: delete'
- v1.26.4-e3de357-aliyun以下版本的csi-plugin组件仅支持通过环境变量配置云盘挂载数量,请根据整个集群中可挂载数据盘数量最少的节点,手动调整该环境变量。 
- 自动配置数量限制仅发生在csi-plugin Pod启动时。若您手动在节点上添加或移除了数据盘,请重建该节点上的csi-plugin Pod,以重新触发自动配置。 
- 自动配置功能暂不支持云盘静态存储卷。若存在该类型的存储卷,可调度的Pod数量会偏小。 
如何更改默认创建的云盘类StorageClass的配置
默认创建的StorageClass不支持更改。
安装csi-provisioner组件后,集群内会默认创建alicloud-disk-topology-alltype等StorageClass,请勿修改这些默认生成的存储类。如果您需要调整StorageClass的配置,例如存储卷类型、回收策略等,您可以创建新的StorageClass(StorageClass数量不受限制)。具体操作,请参见创建StorageClass。
多个容器应用是否可以使用同一个云盘存储卷
云盘为非共享存储,未开启多重挂载的云盘只能同时被一个Pod挂载。更多关于多重挂载的信息,请参见使用NVMe云盘多重挂载及Reservation。
云盘使用
应用在读写云盘挂载目录时提示input/output error
问题现象
云盘挂载正常,应用顺利启动,但是短时间后,应用突然报错提示input/output error。 
问题原因
当前应用使用的云盘缺失。
解决方案
检查当前使用云盘的状态,根据状态进行处理。
- 根据云盘挂载目录,通过Pod的 - VolumeMount定义找到对应的PVC。
- 通过 - kubectl get pvc <pvc-name>查看PVC状态,记录对应的PV。
- 根据PV Name查看PV的YAML, 在 - pv.VolumeHandle字段中获取云盘ID。
- 在ECS管理控制台的块存储页面,根据云盘ID,查看当前使用云盘的状态。 - 若云盘处于待挂载状态,表明云盘被卸载,请重启Pod,重新挂载云盘。 说明- 当前Pod处于Running状态,表明云盘曾经被成功挂载过,之后被卸载。由此推测是多个Pod引用了同一个云盘导致的问题,可通过 - kubectl describe pvc <pvc-name>查看输出中的- UsedBy,确认是否有多个Pod引用当前PVC。
- 若找不到云盘,表明云盘已经被释放,则无法恢复。 重要- 挂载ESSD类型云盘时,建议使用ESSD云盘自动极速快照功能保护云盘存储数据卷的安全。更多信息,请参见云盘非预期删除导致的数据丢失。 
 
使用云盘存储卷时,如何设置云盘挂载目录的用户访问权限
云盘本身不支持设置用户访问权限。如果需要设置挂载目录的用户访问权限,请在创建应用时为Pod配置securityContext来修改权限。更多信息,请参见为Pod配置卷访问权限和属主变更策略。
配置了securityContext.fsgroup后,挂载云盘时会自动调整卷内文件的所有者,根据文件数量,这可能导致较长的准备时间。对于1.20及以上版本的Kubernetes集群,您可以将fsGroupChangePolicy配置为OnRootMismatch,实现仅在首次启动容器时才会调整文件的所有者,后续Pod升级或重建等场景下,挂载时长会恢复正常。若仍不能满足需求,建议利用initContainer自行实现调整权限相关操作。
云盘扩容
云盘存储卷是否会自动扩容
默认情况下,当云盘存储卷的容量耗尽时,并不会自动扩容,您需要手动更新PVC的存储容量声明实现扩容云盘存储卷。具体操作,请参见在线扩容云盘存储卷。
如果您有自动扩容的需求,可通过CRD的方式定义云盘自动扩容策略,在存储卷的使用率高于某个阈值时,实现自动扩容。具体操作,请参见配置自动扩容。
如果集群版本低于1.16,或者不满足在线扩容云盘存储卷的要求(如云盘类型是普通云盘),您可以在ECS侧直接扩容云盘本身,即手动扩容云盘容量和文件系统。在ECS侧扩容云盘后,集群内资源不受影响(即在集群侧查看PVC和PV的容量,仍是扩容前的大小)。
扩容云盘失败,提示Waiting for user to (re-)start a pod to finish file system resize of volume on node
问题现象
更新PVC的存储容量声明后,PVC的Status的StorageCapacity无变化,且PVC Event报出以下信息:
 Waiting for user to (re-)start a pod to finish file system resize of volume on node.问题原因
扩容云盘分两部分:一个是调用ResizeDisk接口扩容云盘容量;另一个是进行文件系统扩容。出现以上错误提示说明底层块设备已经扩容成功,但文件系统扩容失败,说明节点侧存在问题。
解决方案
判断当前节点的类型。
- 如果当前节点为ECI节点,请执行 - kubectl get configmap -n kube-system eci-profile -o jsonpath="{.data.enablePVCController}",确认该配置已设置为- true,详见eci-profile配置项说明。- 若仍然无法解决,请提交工单处理。 
- 如果当前节点为ECS节点,请执行 - kubectl get pods -n kube-system -l app=csi-plugin --field-selector=spec.nodeName=<node-name>命令,获取当前节点的csi-plugin状态。- 若csi-plugin状态正常,请加入钉钉用户群(钉钉群号:35532895)咨询。 
- 若csi-plugin状态异常,需重启csi-plugin的Pod,然后重试。若问题仍未解决,请加入钉钉用户群(钉钉群号:35532895)处理。 
 
扩容云盘失败,提示only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize
问题现象
更新PVC的存储容量声明后,发现如下报错信息:
only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize 问题原因
- 原因1:当前云盘存储卷的PVC和PV是通过静态方式手动创建的。PVC中的 - storageClassName的配置为空,或者集群中没有同名的StorageClass。
- 原因2:PVC引用的StorageClass中, - allowVolumeExpansion的配置为- false,不支持扩容。
解决方案
- 原因1解决方案:查看PVC的 - storageClassName配置,确保集群存在同名的StorageClass。如果没有,请根据已有云盘存储卷的属性创建对应的StorageClass并配置- allowVolumeExpansion: true。
- 原因2解决方案:StorageClass不支持修改属性,请新建一个StorageClass,将 - allowVolumeExpansion配置为- true,然后修改PVC引用新的StorageClass,再扩容PVC。
云盘卸载
删除挂载了云盘的Pod时提示The specified disk is not a portable disk
问题现象
卸载云盘时,提示The specified disk is not a portable disk。
问题原因
云盘的计费方式为包年包月。您申请了包年包月的云盘,或者在升级ECS时,将ECS关联的云盘一起升级为包年包月。
解决方案
将云盘的计费方式改为按量付费。
删除挂载了云盘的Pod时提示无法卸载云盘,kubelet日志中发现Orphaned pod(不受ACK管理的Pod)
问题现象
Pod卸载失败,并且Kubelet出现不受ACK管理的Pod日志。
问题原因
Pod异常退出,导致数据卷挂载点在卸载过程中没有清理干净,最终导致Pod无法删除。在Kubernetes v1.22之前,kubelet的GC流程对数据卷垃圾回收实现并不完善,需要手动或通过脚本自动化实现垃圾挂载点的清理工作。
解决方案
在问题节点运行以下脚本,对垃圾挂载点进行清理。
wget https://raw.githubusercontent.com/AliyunContainerService/kubernetes-issues-solution/master/kubelet/kubelet.sh
sh kubelet.sh删除挂载了云盘的Pod后,Pod无法重新启动,提示挂载失败且无法自动恢复
问题现象
Pod在删除之后无法拉起,报出以下异常提示,且无法自动恢复。
Warning FailedMount 9m53s (x23 over 40m) kubelet MountVolume.SetUp failed for volume “xxxxx” : rpc error: code = Internal desc = stat /var/lib/kubelet/plugins/kubernetes.io/csi/pv/xxxxx/globalmount: no such file or directory影响范围
- ACK集群版本为1.20.4-aliyun-1。 
- 应用的存储介质为云盘。 
- 使用StatefulSet并且设置了 - podManagementPolicy: "Parallel"属性。
问题原因
请参见Pod fails to start after restarting rapidly。
解决方案
删除挂载了云盘的Pod时提示target is busy
问题现象
在删除Pod时,Pod Event或者kubelet日志(/var/log/messages)报出以下错误提示。
unmount failed, output <mount-path> target is busy问题原因
Pod删除失败,说明有进程正在使用该设备。需要登录到Pod所在宿主机上查找正在使用该设备的进程。
解决方案
- 找到对应挂载路径下的块设备。 - mount | grep <mount-path> /dev/vdtest <mount-path>
- 找到使用块设备的进程ID。 - fuser -m /dev/vdtest
- 终止对应的进程。 - 进程终止后,云盘会被自动卸载。 
删除PVC之后,云盘依旧残留
问题现象
删除集群中的PVC之后,云盘在ECS控制台依旧残留。
问题原因
- 原因1:PV的回收策略( - reclaimPolicy)为- Retain,表示删除PVC后,会保留PV和云盘。
- 原因2:PVC、PV同时被删除或PV在PVC之前被删除。 
解决方案
- 原因1解决方案:如果 - reclaimPolicy设置为- Retain模式,删除PVC时,CSI不会删除PV和云盘,您需要手动删除。
- 原因2解决方案:PV中若存在 - deleteTimestamp annotation的情况,CSI将不会负责回收云盘资源。更多信息,请参见controller。如需删除云盘资源,仅删除PVC即可,被删除的PVC绑定的PV将会被自动清理。
删除PVC失败,删除后PVC依旧存在
问题现象
在集群中删除PVC失败,使用--force仍然无法删除。
问题原因
集群中存在Pod使用该PVC,PVC上的finalizer依旧存在,无法删除。
解决方案
- 查看当前引用此PVC的Pod。 - kubectl describe pvc <pvc-name> -n kube-system
- 确认引用该PVC的Pod不再使用后,删除该Pod,然后再次尝试删除PVC。 
其他
作为存储卷使用的云盘可以转为包年包月吗
作为存储卷的云盘必须采用按量付费方式,不能转为包年包月。
在ECS控制台的块存储页面,如何判断哪些云盘是存储卷关联的云盘
获取云盘存储卷所关联的云盘的ID(格式为d-********),然后在ECS控制台的块存储页面,通过云盘ID确认哪些云盘是存储卷关联的云盘。
- 默认情况,动态创建的云盘PV的名称即为云盘ID,您可以在集群的页面直接查看。 
- 如果云盘PV的名称不是云盘ID,您可以通过 - kubectl get pv <pv-name> -o yaml命令查看云盘PV的详情,- volumeHandle字段的值即为云盘ID。