k8s-etcdserver-no-space

参考网址：https://www.cnblogs.com/clay-wangzhi/p/17499097.html
etcd默认的空间配额限制为2G，超出空间配额限制就会影响服务，所以需要定期清理

# 设置环境变量

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
 

查看集群状态
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" --write-out=table endpoint status

# 查看ETCD集群报警情况

ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" alarm list

# 输出为：
# meberID:XXXXXXXXXXXXXXX alarm:NOSPACE
# 此处 alarm 提示 NOSPACE，需要升级 ETCD 集群的空间（默认为2G的磁盘使用空间），或者压缩老数据，升级空间后，需要使用 etcd命令，取消此报警信息，否则集群依旧无法使用

# 解决方案一：增加etcd的容量
# 修改 etcd.yaml 文件，由2G-->8G,增加以下三个参数

- --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)

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

# 整合压缩旧版本数据

ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" compact $rev

# 执行碎片整理

ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" defrag

# 解除告警
ETCDCTL_API=3 etcdctl --cacert="${ETCD_CA_CERT}" --cert="${ETCD_CERT}" --key="${ETCD_KEY}" \
 --endpoints="${HOST_1}" alarm disarm

