本文介绍NAS存储卷常见问题的处理方法。
NAS存储卷挂载时间延长
应用模板中配置了 securityContext.fsgroup参数时,kubelet 在每次挂载完成后会对挂载目录下的所有文件执行chmod或chown操作,文件数量越多耗时越长,导致挂载时间延长。
根据实际情况,可选择以下三种方案之一:
方案一(推荐,适用于 Kubernetes 1.20 及以上版本):将 fsGroupChangePolicy设置为 OnRootMismatch。此配置仅在首次挂载且权限不匹配时执行
chmod和chown操作,后续挂载不再触发,挂载时间恢复正常。关于 fsGroupChangePolicy参数的详细说明,请参见为Pod或容器配置安全性上下文。方案二(不需要 fsGroup 时):删除 securityContext下的 fsgroup参数。未配置 securityContext.fsgroup时,kubelet 不执行权限变更操作,挂载时间不受影响。
方案三(需要指定文件属主时):手动将目标目录挂载到一台ECS实例。通过命令行执行
chown和chmod设置目标 UID 和 mode后,再通过 FlexVolume 使用 NAS 存储卷。关于如何通过 FlexVolume 使用 NAS 存储卷,请参见使用NAS静态存储卷和使用NAS动态存储卷。
NAS存储卷挂载失败时出现timeout错误
通常是网络隔离问题:NAS 挂载点与集群不在同一VPC内,导致挂载出现timeout错误。确认挂载点与集群处于同一VPC后重试。
使用NAS存储卷时,提示chown: option not permitted
报错chown: option not permitted表示容器没有权限变更 NAS 存储卷上的文件属主。使用 root 权限启动容器即可解决。
挂载NAS存储卷失败
挂载 NAS PV 失败,并报以下错误:
Unable to mount volumes for pod "dp-earnings-pod_default(906172c6-3d68-11e8-86e0-00163e00****)": timeout expired waiting for volumes to attach/mount for pod "default"/"dp-earnings-pod". list of unattached/unmounted volumes=[vol1 vol2]
集群未安装 FlexVolume 插件。按照安装与升级Flexvolume组件中的说明安装即可。
使用NAS动态存储卷时Controller的任务队列已满且无法创建新的PV
StorageClass 中 reclaimPolicy为 Delete且 archiveOnDelete为 false时,若子目录创建速度快于 controller 删除速度,任务队列将被占满,导致无法创建新的 PV。
将 archiveOnDelete设置为 true。删除 PV 时,controller 只对 NAS 文件系统中的子目录重命名,不实际删除文件,操作几乎即时完成,任务队列不再阻塞。
archiveOnDelete 设置为 true 后,重命名的子目录不会自动清理,需自行处理文件删除。常用方式包括:在某个节点的根目录启动定时删除任务,或启动多个 Pod 并发删除指定格式的子目录。