Skip to main content

针对大型部署的 etcd 调优

扩展 keyspace 容量#

etcd 的默认的 keyspace 大小为 2GB,上限为 8GB。当您运行具有 15 个或更多集群的大型 Rancher 安装时,建议您扩大 keyspace 容量和主机大小。如果您预计在垃圾回收间隔期间容器的变化率很高,在较小的安装中也可以调整 keyspace 大小,适应变化率。

Kubernetes 每隔五分钟会自动清理一次 etcd 数据集。如果发生了部署抖动,Kubernetes 会在垃圾回收发生之前,将足够多的事件写入 etcd。五分钟后,Kubernetes 执行自动清理时,会将 etcd 数据集删除,清理所有内容,导致 keyspace 被填满。如果在 etcd 日志或 Kubernetes API 服务器日志中看到mvcc: database space exceeded错误,您可以通过在 etcd 服务器上设置quota-backend-bytes。增加 keyspace 的大小。

示例:将 keyspace 大小增加到 5GB#

## RKE cluster.yml
---
services:
etcd:
extra_args:
quota-backend-bytes: 5368709120

扩展 etcd 磁盘性能#

您可以参考etcd 文档,了解如何调整主机上的磁盘优先级。

另外,为了减少 etcd 磁盘上的 IO 争用,可以将专用设备放在 data 和 wal 目录下。另外,etcd 最佳实践中有说明 etcd 的特性:etcd 会在集群中的节点之间复制数据,所以镜像 RAID 配置是不必要的。您可以不配置 RAID 镜像,使用这部分计算资源增加可用的 IOPS,提升磁盘性能。

要在 RKE 集群中实施此解决方案,/var/lib/etcd/data/var/lib/etcd/wal目录将需要在底层主机上挂载磁盘并对其进行格式化。在etcd服务的extra_args指令中,必须包含wal_dir目录。如果不指定wal_dir,则 etcd 进程将尝试在wal权限不足的情况下操纵基础安装。

示例:调整主机上的磁盘优先级#

## RKE cluster.yml
---
services:
etcd:
extra_args:
data-dir: "/var/lib/rancher/etcd/data/"
wal-dir: "/var/lib/rancher/etcd/wal/wal_dir"
extra_binds:
- "/var/lib/etcd/data:/var/lib/rancher/etcd/data"
- "/var/lib/etcd/wal:/var/lib/rancher/etcd/wal"
Last updated on by yzeng25