解决Kuboard etcd 空间超过2G报:etcdserver: mvcc: database space exceeded。无法访问

解决Kuboard etcd 空间超过2G后无法访问问题

Kuboard突然无法访问,使用kubernetes运行的kuboard

参考:

https://github.com/eip-work/kuboard-press/issues/526

https://blog.csdn.net/wdy_2099/article/details/133203698

排查问题

查看日志信息

通过查看pod日志看到错误信息为:etcdserver: mvcc: database space exceeded。

查看etcd的官方指导,etcd默认的空间配额限制为2G,超出空间配额限制就会影响服务。

kuboard会自己创建一个基于eipwork/etcd-host镜像的etcd DaemonSet。

查看数据映射的空间大小

查看kuboard下的etcd映射的存储路径,默认在/usr/share/kuboard/etcd

[root@master1 snap]# cd /usr/share/kuboard/etcd/member/snap [root@master1 snap]# ls -lrth 总用量 2.1G -rw-r--r-- 1 root root 11K 9月 26 20:16 000000000000000b-0000000000a1c264.snap -rw-r--r-- 1 root root 11K 9月 27 08:11 000000000000000b-0000000000a1e975.snap -rw-r--r-- 1 root root 11K 9月 27 20:06 000000000000000b-0000000000a21086.snap -rw-r--r-- 1 root root 11K 9月 28 08:01 000000000000000b-0000000000a23797.snap -rw-r--r-- 1 root root 11K 9月 28 19:56 000000000000000b-0000000000a25ea8.snap -rw------- 1 root root 2.1G 9月 29 14:32 db

可以看到文件已经达到2.1G,基本可以确定是因为达到空间配额限制,无法正常启动。

临时解决方案

进入etcd容器,执行压缩命令,整理多余空间,取消告警信息

此时etcd容器因存活检测一直在重启,修改存活检测时长

kubectl edit daemonsets.apps -n kuboard kuboard-etcd
# 将 initialDelaySeconds 修改为3000 livenessProbe: failureThreshold: 3 httpGet: path: /health port: 2381 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1
# 在master节点通过命令进入etcd容器,pod名称替换成自己的 kubectl -n kuboard exec -it kuboard-etcd-6x8jf sh # 端口自行查看 (不建议使用 127.0.0.1 使用 master 的网卡IP地址) # 查看etcd的状态 ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" --write-out=table endpoint status # 可以看到error信息中有一条警告信息:alarm:NOSPACE # 压缩旧版本 ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" compact $(ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*') # 整理多余的空间 ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" defrag # 取消告警信息(之前有nospace的告警) ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" alarm disarm # 重新查看etcd的状态(发现ERROR字段已为空) ETCDCTL_API=3 etcdctl --endpoints="192.168.2.81:2381" --write-out=table endpoint status # ERROR信息为空,且DB SIZE 已小于2G则表示成功

手动构建镜像

找到etcd镜像的github地址,通过手动构建镜像时修改DockerFile文件中的启动命令

# 表示每隔一个小时自动压缩一次 --auto-compaction-retention=1 # 磁盘空间调整为 8G,官方建议最大 8G(单位是字节) --quota-backend-bytes=8388608000

__EOF__

本文作者yg0070
本文链接https://www.cnblogs.com/yg0070/p/18439916.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   yg0070  阅读(718)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示