概述
因为最近工作需要在新环境K8S部署Grafana数据,将NFS目录作为容器的存储目录,但是在部署过程发现一个问题,个人觉得值得记录,故而写了这篇博文。
Grafana报错
Grafana的K8S配置,之前在某个环境下部署成功(同样利用NFS作为存储),后面环境变更后再次部署,Grafana启动的时候,报failed to check table existence: Disk I/O Error,然后就退出了。
问题根源
经过一番网上搜索,发现是因为NFS存储实现不一致导致SQLite数据库出现的问题,下面大佬的解释
SQLite uses reader/writer locks to control access to the database...But use
caution: this locking mechanism might not work correctly if the database file
is kept on an NFS filesystem. This is because fcntl() file locking is broken on
many NFS implementations...
翻译过来就是 SQLite使用读写锁进行访问控制,但是fcntl文件锁定操作在NFS储存实现上面并不能保证一致。这就解答了为啥之前的环境部署没问题,因为之前环境针对fcntl文件锁的实现符合本地文件规范,所以之前环境部署没有暴露这个问题,但是现在这个环境,实现存在差异,故而导致Grafana起不来