报错文本:chown: changing ownership of '/var/lib/rabbitmq': Operation not permitted
报错原因:
官方回复:是您容器当前的属主 不是这个/var/lib/rabbitmq'文件的属主和属组, 您容器是哪个user 启动的,把这个/var/lib/rabbitmq' 路径改成您自己的或者参考官方文档为 Pod 或容器配置安全上下文 | Kubernetes 配置安全上下文。
简单来说:因为ACK创建管理目录的账号名称是rabbitmq,而我们默认的是admin的账号,其他的有状态服务也是一样,具体是因为k8s安全上下文的限制,所以只要把我们进入容器时的账号给修改了就可以了。
解决流程:先挂载本地卷成功启动容器,然后进入容器,进入要挂载的目录输入ls -l 查看文件的属主,然后查看属主id,配置安全上线问即可。
示例:进入要挂载的目录输入ls -l
然后 id rabbitmq 看属主id和属组id
可以看到都是999,这个时候,只需要把服务的yaml,路径:spec.template.spec. securityContext.runAsGroup/runAsUser修改成999即可
spec:
template:
spec:
securityContext:
runAsGroup: 999
runAsUser: 999
如果还没解决,可以让pod睡眠
然后进入容器,执行:cat /etc/passwd | grep rebbitmq
如果还是报文件读写问题,加上这三个:
fsGroup: 999
runAsGroup: 999
runAsUser: 999