本文为您介绍NAS存储卷常见问题的处理方法。
使用NAS存储卷时,提示chown: Operation not permitted
问题现象
使用NAS时,提示chown: Operation not permitted。
问题原因
您启动容器时使用的宿主机角色,没有修改NAS的权限。
解决方案
容器启动用户无root权限,您需要通过root登录NAS文件系统,改变权限属性后再挂载,保持容器用户和挂载点文件系统的权限一致。
使用NAS动态存储卷时,Controller的任务队列已满且无法创建新的PV
问题现象
使用NAS动态存储卷时,若创建子目录写入速度快于Controller删除子目录速度,将可能导致Controller的任务队列阻塞且无法创建新的PV。
问题原因
当集群使用动态NAS存储卷时,配置的StorageClass回收策略reclaimPolicy为Delete且archiveOnDelete为false。
解决方案
将archiveOnDelete配置为true,当删除PV时只是修改NAS文件系统中子目录的名称,而不是真正删除文件。
具体的文件删除操作需要您自行处理,例如:在某个节点过载根目录启动定时删除机制,或启动多个Pod并发删除某种格式的子目录。
NAS存储卷挂载时间延长
问题现象
NAS存储卷挂载时间延长。
问题原因
同时满足以下配置时,挂载的PV及PVC将执行chmod或chown,导致挂载时间延长。
- 在PV及PVC模板中配置的参数AccessModes值为ReadWriteOnce。
- 在应用模板中配置了securityContext.fsgroup参数。
解决方案
- 若应用模板中配置了securityContext.fsgroup参数,请删除securityContext下的fsgroup参数。
- 若需要将挂载目录内文件变成期望的UID和mode,可以手动将目标目录挂载到一台ECS。再通过命令行执行
chown
和chmod
,完成后通过CSI使用NAS存储卷。关于如何通过CSI使用NAS存储卷,请参见使用NAS静态存储卷或使用NAS动态存储卷。 - 对于1.20及之后版本的Kubernetes集群,除了上述两种解决方法外,也可通过将fsGroupChangePolicy配置为OnRootMismatch,这时只有在首次启动时才会执行
chmod
或chown
操作,导致存在挂载时间延长的问题,后续挂载OSS存储卷时挂载时间将恢复正常。关于fsGroupChangePolicy参数的更多信息,请参见为Pod或容器配置安全性上下文。
使用NAS存储卷时,无法修改已创建的目录
问题现象
使用NAS存储卷时,无法修改已创建的目录。
问题原因
非root用户无权写入PV,不允许修改已创建的目录权限。
解决方案
您可以通过以下两种方式,使用命令chmod
或chown
挂载目录权限后进行修改。
- 使用root权限启动Init Container挂载PV,使用命令
chmod
或chown
挂载目录权限,进行修改。 - 通过将fsGroupChangePolicy配置为OnRootMismatch,在首次启动时会执行
chmod
或chown
挂载目录权限,进行修改。
当工作负载挂载NAS存储卷时,提示unknown filesystem type "xxx"
问题现象
当工作负载挂载NAS存储卷时,提示unknown filesystem type "xxx"。
问题原因
当前工作负载调度的节点未安装对应存储的依赖资源。
解决方案
检查存储卷相关配置是否正确。
- 关于NAS存储卷配置,请参见使用CNFS管理NAS共享存储卷(推荐)。
- 关于CPFS相关配置,请参见CPFS2.0静态卷。
- 关于OSS相关配置,请参见使用OSS静态存储卷。
读写文件时,提示NFS Stale File Handle
问题现象
客户端读写文件时,提示NFS Stale File Handle。
问题原因
容器挂载使用NAS存储卷时,NAS不会保证数据一致性。两个客户端挂载同一个NAS,客户端1打开文件获取文件的fd,若客户端2删除了当前文件,客户端1在读写文件时,会提示NFS Stale File Handle。
解决方案
NAS不会保证数据一致性,您需要根据业务场景自行解决数据一致性问题。
当Pod使用两个PVC挂载NAS存储卷时,Pod一直处于ContainerCreating状态
问题现象
当Pod使用两个PVC挂载NAS存储卷时,Pod无法正常启动,一直处于ContainerCreating状态。但使用其中任意一个PVC挂载时,可挂载成功。
问题原因
两个PVC关联的PV声明了同样的spec.csi.volumeHandle
,导致Kubelet在处理PV挂载逻辑时,始终将两个PV当成同一个对待。
解决方案
您需要修改spec.csi.volumeHandle
字段的值,使其和对应的PV Name保持一致。