kubernetes集群etcd空间配额2G的坑优化

作者: root007 分类: 未分类 发布时间: 2019-09-05 16:22

如果按照网上自动化部署kubernetes 没有对etcd优化的,可能当你集群到达一定规模时候etcd的空间配额就满了。

mvcc: database space exceeded

查看etcd状态

TCDCTL_API=3 etcdctl –endpoints=https://192.168.111:2379,https://192.168.111:2379,https://192.11.181:2379 \
–cacert=/etc/kubernetes/ssl/kube-ca.pem \
–cert=/etc/kubernetes/ssl/kube-etcd-192-168-2-44.pem \
–key=/etc/kubernetes/ssl/kube-etcd-192-168-2-44-key.pem \
endpoint statu \
–write-out table

+----------------------------+------------------+---------+---------+-----------+-----------+------------+
|          ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
+----------------------------+------------------+---------+---------+-----------+-----------+------------+
|  https://192.168.2.44:2379 |  775a857c06ad7d7 |  3.2.24 |  236 MB |      true |        25 |   36769138 |
| https://192.168.2.230:2379 | ab7e6d08ecffd5eb |  3.2.24 |  237 MB |     false |        25 |   36769138 |
| https://192.168.2.187:2379 | 77620e37b3288cba |  3.2.24 |  237 MB |     false |        25 |   36769138 |
+----------------------------+------------------+---------+---------+-----------+-----------+------------+

修改空间配额大小默认是2G –quota-backend-bytes=6442450944


磁盘碎片整理

auto-compaction-retention=240 #(单位小时)

通过auto-compaction-retention对历史数据压缩后,后端数据库可能会出现内部碎片。内部碎片是指空闲状态的,能被后端使用但是仍然消耗存储空间,碎片整理过程将此存储空间释放回文件系统。

要对etcd进行碎片整理,需手动在etcd容器中执行以下命令:

etcdctl defrag

Finished defragmenting etcd member[127.0.0.1:2379]

数据压缩

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

Error from server: etcdserver: mvcc: database space exceeded

释放空间

登录etcd容器

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

docker exec -ti etcd sh
 etcdctl endpoint status --write-out table 
+----------------+-----------------+---------+---------+-----------+-----------+------------+
|    ENDPOINT    |       ID        | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
+----------------+-----------------+---------+---------+-----------+-----------+------------+
| 127.0.0.1:2379 | 775a857c06ad7d7 |  3.2.24 |  236 MB |      true |        25 |   36773068 |
+----------------+-----------------+---------+---------+-----------+-----------+------------+

获取历史版本号:

在etcd容器执行以下命令

ver=$(etcdctl endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')

压缩旧版本

etcdctl compact $ver

etcd进行碎片整理

 etcdctl defrag 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注