这篇文章Sentinel云原生K8S部署实战记录了以下过程
- sentinel源码打包
- 编译生成docker镜像
- 通过k8s部署以及网关服务对接sentinel的过程
在这个过程中遇到了几个问题以及是如何解决的?
问题简介
- 日志目录问题
- 如何图形界面化管理云原生资源 -- kuboard
日志目录问题定位以及解决过程
使用场景
生成稳定版本tar包的过程
问题现象
pod始终启不来 查看pod的日志
/??/logs/csp/ 无权限访问异常
分析问题
由报错信息可以初步得到结论:生成日志文件的时候 没有权限写入
so 将注意力放在sentinel日志文件这里
首先查看Dockerfile 确认docker容器中的启动用户在什么目录下是有权限的
发现docker容器内启动的话 在/app目录下是有权限访问的 那么如果日志文件在/app目录下生成 则不会报没有权限写入日志的问题 则初步判断 日志文件在非/app目录下生成了
查看sentinel源码的日志文件配置
发现在配置文件中的日志路径配置 logging.file=${user.home}/logs/csp/sentinel-dashboard.log 在当前用户目录下生成日志文件 我本地环境是mac系统mengfanxiao用户 所以在/Users/mengfanxiao/目录下生成该日志文件 那么我将 logging.file=${user.home}/logs/csp/sentinel-dashboard.log 修改成 logging.file=/app/logs/csp/sentinel-dashboard.log目录 启动jar包 发现在/Users/mengfanxiao/目录下还会生成另外两个日志文件 command-center.log sentinel-record.log 既然这两个日志文件生成路径没有在配置文件中生成 那么则是在代码中写死的 全局搜索sentinel源码这2个日志
截止目前生成的日志文件都写到了/app目录下
解决问题
将日志输出目录写到/app目录下 然后重新打包、编译镜像、生成tar包、上传行内镜像库、通过openshift部署 启动pod查看sentinel启动日志成功了
问题原理分析简介
k8s启动docker容器 容器内默认是通过root用户启动的
openshift启动docker不支持用root用户启动 但在没有创建用户的情况下 就不能确定当前用户是谁
如果生成的日志文件目录在当前用户所在的目录下 所以就会出现问题