擴展 keyspace 容量
參考:https://etcd.io/docs/v3.4.0/op-guide/maintenance/#space-quota
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 磁盤上的 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"