本文为您介绍OSS存储卷常见问题的处理方法。

OSS存储卷挂载时间延长

问题现象

OSS存储卷挂载时间延长。

问题原因

同时满足以下配置,kubelet在存储卷挂载过程中将执行chmodchown操作,导致挂载时间延长。

  • 在PV及PVC模板中配置的参数AccessModes值为ReadWriteOnce
  • 在应用模板中配置了securityContext.fsgroup参数。

解决方案

  • 若应用模板中配置了securityContext.fsgroup参数,请删除securityContext下的fsgroup参数。
  • 若需要将挂载目录内文件变成期望的UID和mode,可以手动将Bucket挂载到一台ECS。再通过命令行执行chownchmod,完成后通过CSI使用OSS存储卷。关于如何通过CSI使用OSS存储卷,请参见使用OSS静态存储卷
  • 对于1.20及之后版本的Kubernetes集群,除了上述两种解决方法外,也可通过将fsGroupChangePolicy配置为OnRootMismatch,这时只有在首次启动时才会执行chmodchown操作,导致存在挂载时间延长的问题,后续挂载OSS存储卷时挂载时间将恢复正常。关于fsGroupChangePolicy参数的更多信息,请参见为Pod或容器配置安全性上下文
  • OSSFS PVC不建议做写操作,默认只读。

OSS存储挂载权限问题

OSS挂载默认使用Linux的root权限进行挂载,如果需要修改挂载配置,您可以在OSS静态卷PV中增加otherOpts字段的配置,添加配置的格式例如otherOpts: "-o max_stat_cache_size=0 -o allow_other -o mp_umask=133",具体配置权限说明如下。

  • 修改挂载掩码权限
    • 若指定挂载目录的权限为644,在otherOpts字段中增加配置:-o mp_umask=133
    • 若指定挂载目录里文件的权限为644,在otherOpts字段中增加配置:-o umask=133
  • 指定挂载目录里文件的角色权限
    • GroupID权限为指定权限,在otherOpts字段中增加配置:-o gid=XXX,其中,XXX为您在/etc/password中记录的角色组ID。
    • UserID权限为指定权限,在otherOpts字段中增加配置:-o uid=XXX,其中,XXX为您在/etc/password中记录的角色ID。

OSS静态卷挂载失败

问题现象

OSS静态卷挂载失败。

问题原因

静态卷目前不支持挂载在Bucket中不存在的目录中,原挂载目录不存在导致挂载失败。

解决方案

您需要更换OSS Bucket目录后重新进行OSS静态卷挂载。

  1. 登录OSS管理控制台
  2. 创建Bucket存储空间。具体操作,请参见控制台创建存储空间
  3. 重新进行OSS静态卷挂载。具体操作,请参见使用OSS静态存储卷

OSS静态卷访问Bucket失败

问题现象

OSS静态卷访问Bucket失败。

问题原因

使用OSS静态数据卷时,没有填写AK/SK信息。

解决方案

您需要填写AK/SK作为OSS静态卷访问Bucket的凭证。具体操作,请参见使用OSS静态存储卷

OSS静态卷访问Bucket过慢

问题现象

OSS静态卷访问Bucket过慢。

问题原因

OSS对象存储本身没有文件数限制,但当文件数量大于1000时,会使OSS的FUSE访问元数据过多,导致Bucket访问过慢。

解决方案

容器内挂载OSS时,建议以只读的形式访问Bucket,针对大量平铺对象,可采用OSS SDK方式或CLI方式等非文件系统挂载方式,访问Bucket的数据。更多信息,请参见SDK示例简介

OSS控制台看到文件大小为0

问题现象

容器内挂载OSS数据卷时,在文件中写入数据,但在OSS控制台看到文件大小为0。

问题原因

容器使用OSSFS挂载OSS,即基于FUSE方式挂载OSS的Bucket,只有文件执行close或者flush时,文件内容才会上传至OSS的服务端。

解决方案

使用lsof+文件名称的方式,查看当前文件是否被其他进程占用,关闭相应进程,释放文件fd。关于lsof更多信息,请参见Isof

文件目录挂载后,显示为文件对象

问题现象

容器内挂载OSS数据卷时,文件原本是目录,挂载后,显示为文件对象。

问题原因

容器内挂载OSS数据卷,客户端从OSS服务端拉取文件元信息时,缺少元信息x-oss-meta-mode,导致目录被解析为文件。

解决方案

容器内挂载OSS数据卷时,您需要在OSS静态卷PV的otherOpts字段中增加-o complement_stat解决。