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