Kuboard无法正常访问,提示Failed connected database
-
问题:Kuboard无法正常访问
-
现象:访问kuboard的10080端口时,直接提示无法连接数据库
-
排查:
- 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
- 进行查看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已经满了!!!!!
- 进入到容器内部进行查看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已经是提示空间不足的问题了!!!!
- 临时解决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
- 最终解决方案
在 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
你可能想看: