要將 Kubernetes 的 Event 資源單獨存儲到一個獨立的 etcd 集羣,只需在 kube-apiserver 的啓動參數中增加 --etcd-servers-overrides 配置即可,無需遷移數據或重啓其他組件。

配置步驟

  1. 部署一套獨立的 etcd 集羣,用於專門存儲 Event 數據。假設該集羣的訪問地址為: https://etcd-event1:2379,https://etcd-event2:2379,https://etcd-event3:2379  
  2. 修改 kube-apiserver 的啓動參數,增加如下配置:--etcd-servers-overrides=/registry/events#https://etcd-event1:2379,https://etcd-event2:2379,https://etcd-event3:2379
  • /registry/events 是 Kubernetes 內部用於存儲 Event 資源的路徑。
  • # 後面是獨立 etcd 集羣的訪問地址,多個地址用英文逗號分隔。
  1. 重啓 kube-apiserver 使配置生效。

注意事項

  • 該配置僅影響 Event 資源的存儲,不會干擾其他資源(如 Pod、Service 等)繼續使用主 etcd 集羣。
  • Event 數據本身有效期較短(默認 1 小時),因此無需做數據遷移或清理舊數據。
  • 適用於大規模集羣場景,可顯著降低主 etcd 集羣的寫入壓力
# /etc/kubernetes/manifests/kube-apiserver.yaml 片段
spec:
  containers:
  - name: kube-apiserver
    command:
    - kube-apiserver
      # ========= 主 etcd 集羣(無 TLS) =========
    - --etcd-servers=http://etcd-main-1:2379,http://etcd-main-2:2379,http://etcd-main-3:2379
      # ========= events 獨立 etcd 集羣 =========
    - --etcd-servers-overrides=/registry/events#http://etcd-event-1:2379,http://etcd-event-2:2379,http://etcd-event-3:2379
      # ========= 其餘業務參數 =========
    - --service-cluster-ip-range=10.96.0.0/16
    - --secure-port=6443
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --enable-admission-plugins=NodeRestriction,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota
    - --event-ttl=2h

 

  • --event-ttl 控制 events 在 etcd 中的保留時間,默認 1h,可加大到 2h~4h。
  • --etcd-compaction-interval 建議與主 etcd 保持一致(默認 5m)。
  • --encryption-provider-config 若開啓了 etcd 加密,請確保兩個集羣使用相同的加密配置,否則讀舊數據會失敗。
  • --max-requests-inflight / --max-mutating-requests-inflight 視集羣規模調大,可顯著降低 apiserver 限流 。