问题描述

Rancher官方提供的docker单体rancher 2.x在经过一段时间的调戏后,出现无法访问,查看日志错误Error: etcdserver: mvcc: database space exceeded,经过检查rancher使用的是etcd的默认配置,未对快照进行管理,需要对数据进行清理和压缩。

虽然很多时候应该部署HA的Rancher,但是难免有人不按套路出牌。

思路

提取rancher最新版本容器,在其之上搞事情,添加如下环境变量到容器中,是构建个新容器还是搞事情酌情即可。注意只是思路,还没有完成验证,这个需要时间。。。。

ETCD_AUTO_COMPACTION_RETENTION=1
ETCD_MAX_REQUEST_BYTES=10485760
ETCD_QUOTA_BACKEND_BYTES=8589934592

现有环境下的修复办法

# 利用docker cp将3.2+版本的etcdctl可执行文件移至容器内,放置路径`/var/lib/rancher/management-state/etcd`中。

# 使用 etcd api version 3,V2版本的API功能不多。。。
ETCDCTL_API=3 etcdctl endpoints status

# 这里会得到当期数据的版本
ETCDCTL_API=3 etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*'
xxxxxxxxx

# 压缩数据
ETCDCTL_API=3 etcdctl compact xxxxxxxxx

# 碎片整理(基本上到这里就已经解决问题了)
ETCDCTL_API=3 etcdctl defrag

# 解除告警
ETCDCTL_API=3 etcdctl alarm disarm

# 备份
ETCDCTL_API=3 etcdctl snapshot save backup.db
ETCDCTL_API=3 etcdctl snapshot status backup.db

本文引用文章1
本文引用文章2

原创文章采用 CC BY-NC-SA 4.0协议 进行许可,转载请著名转自: 单体rancher内置etcd空间满的一种解决思路