当前位置: 首页 > news >正文

kuboard自带ETCD存储满了处理方案

一、前言

当运行 ETCD 日志报 Erro: mvcc database space exceeded 时,说明 ETCD 存储不足了(默认 ETCD 存储是 2G),配额会触发告警,然后 Etcd 系统将进入操作受限的维护模式。

通过下面命令可以查看 ETCD 存储使用情况:

$ ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status

[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

二、临时解决方案

❝PS: 压缩前做好快照备份,命令 etcdctl snapshot save backup.db ❞

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

# 获取当前版本
$ 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

# 取消告警信息
$ ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm

# 测试是否能成功写入
$ 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

详细过程及其输出如下:

root@a2caf8010e75:/# etcdctl snapshot save backup.db
{"level":"info","ts":1695447648.315712,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"backup.db.part"}
{"level":"info","ts":"2023-09-23T13:40:48.317+0800","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
{"level":"info","ts":1695447648.3172774,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"127.0.0.1:2379"}
{"level":"info","ts":"2023-09-23T13:41:03.646+0800","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
{"level":"info","ts":1695447663.8131642,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"127.0.0.1:2379","size":"2.1 GB","took":15.497392681}
{"level":"info","ts":1695447663.8132935,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"backup.db"}
Snapshot saved at backup.db
root@a2caf8010e75:/# 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].*')
root@a2caf8010e75:/#  ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 compact $rev
compacted revision 6077603
root@a2caf8010e75:/#  ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 defrag
Finished defragmenting etcd member[http://127.0.0.1:2379]
root@a2caf8010e75:/# ETCDCTL_API=3 etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm
memberID:6460912315094810421 alarm:NOSPACE
root@a2caf8010e75:/# 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 |  127 kB |      true |      false |         6 |    6089454 |            6089454 |        |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
root@a2caf8010e75:/#
————————————————

三、最终解决方案

在 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 启动脚本

生成 Dockerfile 文件:

# 编辑 Dockerfile
$ vim Dockerfile

FROM eipwork/kuboard:v3.5.0.3

COPY ./entrypoint.sh /entrypoint.sh

# 构建镜像
$ docker build -t eipwork/kuboard-modify:v3.5.0.3 . -f Dockerfile

启动 Kuboard,并查看进程如下:

五、参考文档

  • https://etcd.io/docs/v3.4/op-guide/maintenance/

相关文章:

  • 编程技能:格式化打印01,vsprintf 函数族简介
  • (22)大文件流式处理
  • MySql--定义表存储引擎、字符集和排序规则
  • 黑森林实验室 FLUX.1Kontext:革新图像修改的 AI 力量
  • 深度学习初探:当机器开始思考(superior哥AI系列第1期)
  • SolidWorks 文件打开时电脑卡顿问题分析与解决
  • 小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案
  • KVM 安装 Ubuntu 22
  • 【合集】Linux——31个普通信号
  • Java基础 Day25
  • 解决Acrobat印前检查功能提示无法为用户配置文件问题
  • 调试技巧总结
  • plotbunni开源程序是具有 AI 辅助的 FOSS 小说写作套件
  • @Docker Compose部署Alertmanager
  • 判断质数的基础方法
  • 动手学深度学习pytorch学习笔记 —— 第五章
  • 【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】
  • [IMX] 10.串行外围设备接口 - SPI
  • 抢占先机!品牌如何利用软文营销领跑内容营销赛道?
  • Wayland模式X11模式LinuxFB​​模式,Linux图形显示系统三大模式深度解析
  • 个人网站建设报价/百度关键词模拟点击软件
  • 视频剪辑培训班的学费是多少/百度地图优化排名方法
  • 网站栏目怎么做301定向/郑州网络推广代理顾问
  • 想做一个自己的网站 怎么做/软文广告500字
  • 滨海做网站的价格/网站维护中
  • 外贸商城网站制作公司/注册自己的网站