ETCD配置问题处理与验证

  • 报错信息:

    容器创建的时候,报错:Error etcdserver mvcc database space exceeded

  • 问题原因:

    k8s创建pod的时候,会向etcd中写数据,etcd官方默认的空间配额是2G,最大支持8G,以下是官方下载包内的说明,

    The default storage size limit is 2GB, configurable with `--quota-backend-bytes` flag. 8GB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.
    

    所有的运维管理都在操作ETCD的存储空间;存储空间的配额用于控制ETCD数据空间的大小,如果ETCD节点磁盘空间不足了,配额会触发告警,然后ETCD系统将进入操作受限的维护模式。

解决方案

  • 压缩
#使用API3
$ export ETCDCTL_API=3 
# 获取当前版本
$ rev=$(etcdctl --endpoints=http://127.0.0.1:2379 endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
# 压缩掉所有旧版本
etcdctl --endpoints=http://127.0.0.1:2379 compact $rev
# 整理多余的空间
etcdctl --endpoints=http://127.0.0.1:2379 defrag
# 取消告警信息
etcdctl --endpoints=http://127.0.0.1:2379 alarm disarm
  • 修改启动文件
...
--auto-compaction-retention=1       ## 表示每隔一小时自动压缩一次
--quota-backend-bytes=8388608000    ## 磁盘空间调整为8G,官方建议最大8G

修改完成后,取消告警信息

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

然后重启etcd即可

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐