事情的经过是这样的,楼主在某一天使用k8s创建pvc的时候发现创建pvc无法自动创建pv和存储卷(楼主的架构是 heketi + glusterfs),随即查看了pvc的创建事件
上图提示是磁盘空间不足了
通过heketi-cli topology info 命令查看节点磁盘剩余空间是充足的(3台节点采用复制卷模式,磁盘大小都是500G,所以剩余空间都是一样的)
既然不是磁盘空间的问题,楼主进行下一步排错,分别去三台glusterfs节点上执行 gluster peer status 查看,发现其中一台节点上出现超时情况,其余两个节点正常
随后查看glusterfs 的日志希望的到一些信息(glusterfs 日志目录在 /var/log/glusterfs/glusterd.log)
发现有一个linux的错误,最终导致无法启动glusterfs服务,楼主开始翻阅资料查看相关错误的信息,发现这个问题在3.*版本就被glusterfs官方修复了,而官方给出的解决方式如下图所示
官方需要我们删除 /var/lib/glusterd 目录下除了glusterd.info 以外的所有文件
随后我根据官方指示删除了 /var/lib/glusterd 目录下的文件(删除之前我做了备份),重启glusterfs服务,发现日志没有报错,并从其他节点开始同步数据,但是再次执行 gluster peer status 时,发现故障节点找不到其余两个节点,但是两个正常的节点又可以找到故障节点,重试创建pvc依然不行,这下楼主难受了
后来楼主想到之前做的备份文件,用备份文件进行了恢复操作,然后查看备份文件目录中的内容
其中有一个叫peer的目录吸引了我的目光,进入peer目录发现,里边存储的是glusterfs生成的收信任节点的名称
然后我尝试删除除了glusterd.info和peers目录以外的数据(只保留下图红框标记的文件)
再次进行重启,执行 gluster peer status 发现故障解决
再次创建pvc操作,发现没有问题,顺利修复