前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Etcd 故障排查

Etcd 故障排查

原创
作者头像
SRE运维进阶之路
发布2023-06-23 14:13:34
2820
发布2023-06-23 14:13:34
举报

Etcd 磁盘空间爆满解决方案

etcd默认的空间配额限制为2G,超出空间配额限制就会影响服务,所以需要定期清理

设置环境变量

代码语言:javascript
复制
ETCD_CA_CERT="/etc/kubernetes/pki/etcd/ca.crt"
ETCD_CERT="/etc/kubernetes/pki/etcd/server.crt"
ETCD_KEY="/etc/kubernetes/pki/etcd/server.key"
HOST_1=https://xxx.xxx.xxx.xxx:2379

查看集群状态

代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" --write-out=table endpoint status

查看ETCD集群报警情况

代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" alarm list

输出为:

代码语言:javascript
复制
meberID:XXXXXXXXXXXXXXX alarm:NOSPACE

此处 alarm 提示 NOSPACE,需要升级 ETCD 集群的空间(默认为2G的磁盘使用空间),或者压缩老数据,升级空间后,需要使用 etcd命令,取消此报警信息,否则集群依旧无法使用

解决方案一:增加etcd的容量

修改 etcd.yaml 文件,由2G-->8G,增加以下三个参数

代码语言:javascript
复制
- --auto-compaction-mode=revision
- --auto-compaction-retention=1000
- --quota-backend-bytes=8589934592

auto-compaction-mode=revision 按版本号压缩 auto-compaction-retention=1000 保留近1000个revision,每5分钟自动压缩 ”latest revision” - 1000 quota-backend-bytes 设置etcd最大容量为8G

修改后重启

解决方案二:压缩老数据清理

压缩老数据
  • 获取当前etcd数据的修订版本(revision)
代码语言:javascript
复制
rev=$(ETCDCTL_API=3 etcdctl  --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" endpoint status --write-out="json" | egrep -o '"revision":[0-9]*' | egrep -o '[0-9].*')
echo $rev
  • 整合压缩旧版本数据
代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" compact $rev
  • 执行碎片整理
代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" defrag
解除告警
代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" alarm disarm

验证可以添加新数据

代码语言:javascript
复制
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
  --endpoints="${HOST_1}" put newkeytestfornospace 123

⚠️ auto compact只会压缩key space,不会释放物理存储空间。所以需要定期的执行defrag

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Etcd 磁盘空间爆满解决方案
    • 查看集群状态
      • 解决方案一:增加etcd的容量
        • 解决方案二:压缩老数据清理
          • 验证可以添加新数据
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档