内容纲要
问题描述
tdc环境在更新tdc license的时候报错:etcd报错:mvcc: database space exceeded
问题分析
TCOS 2.x使用 etcd 存储 license 及申请信息,报错表明集群中 etcd 的数据量达到了默认的 2g 限额。此时 etcd 会拒绝对外提供写服务。
虽然集群中配置了会周期性的执行压缩数据的操作,但是一些碎片化的空间并不会主动回收,需要手动执行以下操作
解决方法
- 1、检查etcd空间大小
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 endpoint status - 2、检查etcd健康状态
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 endpoint health - 3、备份etcd
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000,https://zwjcfwpt-02:4000,https://zwjcfwpt-03:4000 snapshot save backup.db
(或者可以备份下/opt/kubernetes/data/transwarp-etcd/data目录) - 4、获取revision信息
rev=$(ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints=https://zwjcfwpt-01:4000 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*') - 5、压缩etcd
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 compact $rev - 6、etcd碎片整理
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 defrag - 7、验证etcd状态、空间大小
- 8、消除告警
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 alarm disarm - 9、所有etcd节点重复上述操作(4-8步,换成其他节点的主机名称)
- 10、put验证
ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/ca.pem --cert=/srv/kubernetes/transwarp-etcd.pem --key=/srv/kubernetes/transwarp-etcd-key.pem --endpoints https://zwjcfwpt-01:4000 put newkey 123 - 完成清理操作后,再次执行
endpoint status命令(即第一步的检查命令),应该可以发现使用的资源有明显的下降。之后可以正常进行 license 相关的写操作。
PS,正常运行的环境中不建议同时对所有运行的节点执行 defrag 操作,该操作比较耗时且会导致 etcd 集群无法对外提供服务。如果需要,可以依次执行。
相关wiki:
https://wiki.transwarp.io/pages/viewpage.action?pageId=63422483
https://wiki.transwarp.io/pages/viewpage.action?pageId=20251636