Kubernetes调整etcd数据库空间配额

1、简介
etcd的数据库空间配额大小默认限制为2G,当数据达到2G的时候就不允许写入。这里如果想继续写入,必须对历史数据进行压缩,或者调整etcd数据库的空间配额大小限制。

当空间配额满载时,会提示mvcc: database space exceeded

2、查看etcd的配额使用量

[root@mast01 ~]# ETCDCTL_API=3 etcdctl –endpoints=https://192.168.58.116:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key endpoint status –write-out=table
+—————————–+—————–+———+———+———–+————+———–+————+——————–+——–+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+—————————–+—————–+———+———+———–+————+———–+————+——————–+——–+
| https://192.168.58.116:2379 | cf0d84054d39398 | 3.5.6 | 3.8 MB | true | false | 5 | 9310 | 9310 | |
+—————————–+—————–+———+———+———–+————+———–+————+——————–+——–+
3、开启磁盘碎片整理

获取历史版本号

[root@mast01 ~]# ETCDCTL_API=3 etcdctl –endpoints=https://192.168.58.116:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key endpoint status –write-out=”json” | egrep -o ‘”revision”:[0-9]‘ | egrep -o ‘[0-9].
8907
压缩旧版本

[root@mast01 ~]# ETCDCTL_API=3 etcdctl –endpoints=https://192.168.58.116:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key compact 8907
compacted revision 8907
etcd进行碎片整理

如果是高可用(HA)模式,建议 逐个节点 进行 defrag 以避免服务中断

[root@mast01 ~]# ETCDCTL_API=3 etcdctl –endpoints=https://192.168.58.116:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key defrag
Finished defragmenting etcd member[https://192.168.58.116:2379]
4、修改etcd空间配额大小

查看版本

[root@mast01 ~]# ETCDCTL_API=3 etcdctl –endpoints=https://192.168.58.116:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key version
etcdctl version: 3.5.0
API version: 3.5
增大 etcd 存储限制

默认 etcd 版本 3.4 及以上支持调整 quota-backend-bytes 参数来更改存储大小限制:

进入 etcd 配置目录(通常 /etc/kubernetes/manifests/etcd.yaml)。

找到 command 部分,添加或修改 。

–quota-backend-bytes
保存文件,etcd 会自动重新启动并应用新配置。

查看pod

[root@mast01 ~]# kubectl get pod |grep etcd
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-mast01 1/1 Running 2 (11h ago) 348d
[root@mast01 ~]# vim /etc/kubernetes/manifests/etcd.yaml
spec:
containers:

  • command:
    • etcd
    • –quota-backend-bytes=8589934592 # 设置为 8GB (默认 2GB)

[root@mast01 ~]# kubectl get pod |grep etcd
Error from server (Timeout): the server was unable to return a response in the time allotted, but may still be processing the request (get pods)
[root@mast01 ~]# kubectl get pod |grep etcd
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-mast01 1/1 Running 0 22s
5、优化 Kubernetes 资源对象

如果 etcd 过大,可能是 Kubernetes 资源过多,建议:

存储了过多的历史版本。可以调整 –snapshot-count 以降低 etcd 快照存储的频率,例如:

编辑 /etc/kubernetes/manifests/etcd.yaml

  • –snapshot-count=50000 # 默认100000,减少快照频率
    减少 ConfigMap 和 Secret:每次更新都会创建新版本,占用 etcd 空间。

降低 Event 生成频率:大量 Pod 事件会导致 etcd 数据库增长。

定期清理未使用的资源:清理无用的 event,例如:

查看

[root@mast01 ~]# kubectl get events –sort-by=.metadata.creationTimestamp

编辑 /etc/kubernetes/manifests/kube-apiserver.yaml

spec:
containers:

  • command:
    • kube-apiserver
    • –event-ttl=30m # 只保留 30 分钟的 Event(默认 1h)
      这样可以有效控制 etcd 数据库大小,提升 Kubernetes 集群的稳定性。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/425766.html

联系我们
联系我们
分享本页
返回顶部