平台與維運 2026 年 5 月 21 日

2026-05-21 — etcd 3.7.0-beta.0 RangeStream 完全移除 v2store、K8s v1.36 Server-Side Sharded Watch

primary=https://kubernetes.io/blog/2026/05/20/etcd-370-beta/ primary=https://etcd.io/docs/v3.7/learning/api/#rangestream primary=https://kubernetes.io/blog/2026/05/06/kubernetes-v1-36-server-side-sharded-list-and-watch/ primary=https://github.com/kubernetes/enhancements/issues/5866

etcd 3.7.0-beta.0 釋出:RangeStream 串流 API 與完整移除 v2store 架構

SIG-etcd / Kubernetes Blog · 2026-05-20

etcd SIG 發布 3.7.0-beta.0,帶來兩項重大改變:期待已久的 RangeStream RPC(串流讀取 API),以及完整移除所有 v2 元件——這是 etcd 的第一個完全 v3store 的版本。etcd v3.4 也宣布於 2026 年 5 月 15 日正式 EOL。

RangeStream:解決大型查詢的記憶體與延遲問題

etcd v3.6 及更早版本的 Range RPC 必須將完整結果集組裝完畢後才能回傳,對大型 Kubernetes 集群(數萬個 node)的 Pod、Endpoint 等高基數資源查詢,會造成不可預測的延遲與記憶體峰值。RangeStream RPC 改為分塊串流回傳,讓用戶端可以在資料到達時逐步處理,而非等待全部資料組裝完成。

使用方式:

# 透過 etcdctl 使用 RangeStream
etcdctl get /registry/pods --range-stream

# gRPC 呼叫使用新的 RangeStream RPC

RangeStream 對 buffer 記憶體用量的影響是可預測的,並使應用程式可以在第一個資料塊到達後立即開始處理,顯著改善大型查詢的 time-to-first-byte。

v2store 完全移除

3.7.0 是 100% v3store 的第一個版本,以下 v2 元件全部移除:

  • v2 discovery 機制
  • v2 bootstrap 流程
  • v2 protocol 請求支援
  • v2 client 函式庫
  • 已棄用的實驗性旗標

移除遺留元件減少了攻擊面,也降低了維護複雜度。尚未升級至 v3.6.11 的使用者可能面臨升級障礙,SIG-etcd 在公告中明確徵求相關反饋。

版本支援政策變更

  • etcd v3.4:已於 2026 年 5 月 15 日 EOL,5 月底可能有最後一個安全補丁
  • etcd v3.5:在 v3.7.0 正式發布後支援一年
  • 目前支援中:v3.5 與 v3.6(兩個最新 minor 版本)

Beta 測試期間預計還有數個 beta 版本,包含 protobuf 函式庫重構,RC 與正式版預計在 6 月至 7 月初之間發布。

原始來源:Kubernetes Blog — etcd 3.7.0-beta.0etcd RangeStream API 文件


Kubernetes v1.36 Alpha:Server-Side Sharded List and Watch 讓高基數資源的控制器水平擴展

Kubernetes Blog · 2026-05-06

Kubernetes v1.36 引入 Alpha 功能 Server-Side Sharded List and Watch(KEP-5866),讓 API Server 在來源端就對事件串流進行過濾,控制器副本只接收它負責的那一片資源,而非完整的事件流。這解決了大型集群中水平擴展控制器時的頻寬與 CPU 浪費問題。

問題背景

在數萬節點的集群中,控制器(如 kube-state-metrics)若以多個副本部署分攤負載,傳統做法是每個副本都接收完整的事件流,然後在用戶端丟棄不屬於自己的物件。N 個副本意味著傳輸 N 倍的資料量,解序列化的 CPU 成本也線性增加,實際上抵消了水平擴展帶來的好處。

技術實作

新功能在 ListOptions 中加入 shardSelector 欄位,用戶端以 FNV-1a 64 位元雜湊函式(跨所有 API Server 實例確定性計算)指定一個雜湊範圍,API Server 只回傳落在該範圍內的物件:

// 副本 0:接收 UID 雜湊值位於低半段的物件
shardRange(object.metadata.uid, '0x0000000000000000', '0x8000000000000000')

// 副本 1:接收 UID 雜湊值位於高半段的物件
shardRange(object.metadata.uid, '0x8000000000000000', '0x10000000000000000')

支援以 || 運算子組合非連續範圍。回應的 metadata 包含 shardInfo 欄位;若該欄位不存在,表示 Server 未支援此功能,用戶端應退回用戶端過濾作為降級處理。

影響範圍

目前支援的 shard field 限於 object.metadata.uidobject.metadata.namespace。此功能為 Alpha 階段,需要在 API Server 啟用 feature gate ShardedListAndWatch。在大型集群的高基數資源(Pod、Event)上,此功能可以讓控制器的每副本成本從 O(總物件數) 降至 O(分片大小),使真正的水平擴展成為可能。

原始來源:Kubernetes Blog — Server-Side Sharded List and WatchKEP-5866


End of article
0
Would love your thoughts, please comment.x
()
x