在阿里云上,使用阿里云NAS可以作为ACK的PVC使用,总体来说,在搭配上NAS存储容量包的情况下,是十分便捷省钱的选择。但是在一些特殊应用场景下,比如容器不能使用特权模式或者root权限下,使用NAS作为PVC很容易引发一些权限问题,此时可以通过一些剑走偏锋的方式来处理。


在部署sonarqube过程中,默认容器使用sonarqube用户运行,其uid gid为1000。这就带来一个问题,在默认情况在sonarqube用户没有操作NAS挂载目录的权限。

阿里云ACK使用经验:使用阿里云NAS作为PVC遇到的权限问题_阿里云

上图中的路径/opt/sonarqube/data/es8就是通过PVC,挂在的NAS目录。

如果是非生产环境可以直接用root权限来处理,在sonarqube的yaml中可以添加权限配置,配置下securityContext 这个字段,

runAsUser: 0
    runAsGroup: 0
    fsGroup: 0
  • 1.
  • 2.
  • 3.

上述配置可以以root方式运行容器,但是在本示例中,随着sonar启动的es不允许以root方式启动,虽然可以通过修改镜像的方式来处理,但是总体上不够安全。

既然不能用root,那就改nas的权限。最近便捷的方式就是进入到容器中,直接修改nas挂载的目录的权限,将其所有者修改为sonarqube。

现在就剩下最小的小问题,因为上文的权限问题,pod是无法正常启动的,所以,可以通过修改容器的ENTRYPOINT,使其sleep 3600,就可以有时间进行相应操作。

在阿里云的控制台,可以很直观的进行修改:

阿里云ACK使用经验:使用阿里云NAS作为PVC遇到的权限问题_nas_02

修改后,就有时间通过终端进入容器内部修改nas挂载目录的权限

chown 1000.1000 /xx/xxx/xx
  • 1.

修改nas挂载目录所有者后,在阿里云控制台上编辑pod生命周期,去掉sleep 3600并更新,问题解决 。