14 - ETCD数据压缩


etcd默认不会自动进行数据压缩,etcd保存了keys的历史信息,数据频繁的改动会导致数据版本越来越多,相对应的数据库就会越来越大。etcd数据库大小默认2GB,当在etcd容器或者rancher ui出现以下日志时,说明数据库空间占满,需要进行数据压缩腾出空间。

  1. Error from server: etcdserver: mvcc: database space exceeded

释放空间

  • 登录etcd容器

在etcd主机上,执行以下命令登录etcd容器

  1. docker exec -ti etcd sh
  • 获取历史版本号:

在etcd容器执行以下命令

  1. ver=$(etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
  • 压缩旧版本
  1. etcdctl compact $ver
  • 清理碎片
  1. etcdctl defrag

以上2-4步,操作需在每个etcd容器中执行。

  • 忽略etcd告警

通过执行etcdctl alarm list可以查看etcd的告警情况,如果存在告警,即使释放了etcd空间,etcd也处于只读状态。

在确定以上的操作均执行完毕后,在任意一个etcd容器中执行以下命令忽略告警:

  1. etcdctl alarm disarm