Kuboard无法正常访问,提示Failed connected database

  • 问题:Kuboard无法正常访问

  • 现象:访问kuboard的10080端口时,直接提示无法连接数据库

  • 排查:

  1. kuboard采用的是docker run的方式进行部署
docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 10080:80/tcp \
  -p 10081:10081/udp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://10.64.160.132:10080" \
  -e KUBOARD_AGENT_SERVER_UDP_PORT="10081" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /root/kuboard-data:/data \
  eipwork/kuboard:v3
  1. 进行查看kuboard的容器日志,是否存在异常报错信息
$ docker logs -f kuboard
......
{"level":"warn","ts":"2022-11-23T11:10:51.655+0800","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-836ca006-9522-4ed1-be2d-196f4c09332f/127.0.0.1:2379","attempt":0,"error":"rpc error: code = ResourceExhausted desc = etcdserver: mvcc: database space exceeded"}
[LOG] 2022/11/23 - 11:10:51.655   | /initializekuboard.processEtcdObject                         142 | error | 更新对象失败: etcdserver: mvcc: database space exceeded
[LOG] 2022/11/23 - 11:10:51.657   | main.main                                                     85 |  info | 使用 http, 端口: 80
......

日志中存在: etcdserver: mvcc: database space exceeded的报错,查看etcd的官方指导,etcd默认的空间配额限制为2G,超出空间配额限制就会影响服务,所以需要定期清理。查看数据映射的空间大小:

[root@Jenkins ~]# cd kuboard-data/etcd-data/member/snap/
[root@Jenkins snap]# ll -h
总用量 1.9G
-rw-r--r-- 1 root root 9.4K 10月 11 17:00 0000000000000009-0000000000557338.snap
-rw-r--r-- 1 root root 9.4K 10月 20 10:44 0000000000000009-000000000056f9d9.snap
-rw-r--r-- 1 root root 9.4K 10月 29 04:29 0000000000000009-000000000058807a.snap
-rw-r--r-- 1 root root 9.4K 11月  6 22:21 0000000000000009-00000000005a071b.snap
-rw-r--r-- 1 root root 9.4K 11月 15 16:07 0000000000000009-00000000005b8dbc.snap
-rw------- 1 root root 2G 11月 23 11:39 db

db的大小为2G已经满了!!!!!

  1. 进入到容器内部进行查看etcd的状态信息
[root@Jenkins etcd-data]# docker exec -it kuboard /bin/sh

通过下面命令可以查看ETCD存储使用情况:
/ # ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
|       ENDPOINT        |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |             ERRORS             |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
| http://127.0.0.1:2379 | 59a9c584ea2c3f35 |  3.4.14 |  2.1 GB |      true |      false |        11 |    6086544 |            6086544 |   memberID:6460912315094810421 |
|                       |                  |         |         |           |            |           |            |                    |                 alarm:NOSPACE  |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+

这里的ERRORS已经是提示空间不足的问题了!!!!
  1. 临时解决etcd存储空间不足的问题
    PS: 压缩前做好快照备份,命令 etcdctl snapshot save backup.db

通过 ETCD 数据压缩来临时解决问题,具体如下操作:

#查看ETCD集群报警情况

/ # ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" alarm list
memberID:6460912315094810421 alarm:NOSPACE 

# 获取当前版本
$ rev=$(ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
 
# 压缩所有旧版本
$ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 compact $rev
 
# 整理多余的空间
$ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 defrag
 
# 取消告警信息,不取消告警,ectd一样不可用
$ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm
memberID:6460912315094810421 alarm:NOSPACE 

# 测试是否能成功写入
$ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 put testkey 123
 
OK
 
# 再次查看ETCD存储使用情况
$ ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status
  1. 最终解决方案
    在 ETCD 启动命令中添加下面两个参数:
# 表示每隔一个小时自动压缩一次
--auto-compaction-retention=1
# 磁盘空间调整为 8G,官方建议最大 8G(单位是字节)
--quota-backend-bytes=8388608000

Kuboard(Kubernetes 多集群管理界面,官网地址:https://kuboard.cn),如果有使用过的同学可能会遇到ETCD存储不足的问题,因为官网提供的docker镜像中,ETCD启动参数并没有添加 --auto-compaction-retention 和 --quota-backend-bytes 参数。

修改官网 Kuboard docker镜像 /entrypoint.sh 启动脚本

Don't forget the beginner's mind

你可能想看:
标签: rootdocker
分享给朋友: