從 Beta 階段邁進
在 Kubernetes 中,功能遵循定義的 生命週期。首先,就像感興趣的開發人員眼中閃爍的光芒。然後,也許在線上討論中草繪,在線上相當於咖啡館餐巾紙的東西上繪製。這個粗略的工作通常會變成 Kubernetes 增強提案 (KEP),然後通常會變成程式碼。
對於 Kubernetes v1.20 及更高版本,我們專注於幫助該程式碼升級為穩定功能。
我提到的生命週期如下
通常,alpha 功能預設不會啟用。您可以透過設定功能閘道來啟用它們;通常,透過在每個使用該功能的元件上設定命令列標記。
(如果您透過受管理的服務產品(例如 AKS、EKS、GKE 等)使用 Kubernetes,則運行該服務的供應商可能已決定為您啟用哪些功能閘道)。
有一個定義的流程,用於將現有的 alpha 功能升級到 beta 階段。這很重要,因為beta 功能預設為啟用,功能標記仍然存在,因此叢集操作員可以選擇退出(如果他們願意)。
一組類似但更全面的畢業標準控制著向正式發布 (GA) 的過渡,也稱為「穩定」。GA 功能是 Kubernetes 的一部分,並承諾它們將在當前主要版本中保持不變。
預設啟用 beta 功能可讓 Kubernetes 及其貢獻者獲得有價值的真實世界回饋。然而,存在激勵機制不匹配的情況。一旦功能預設為啟用,人們就會使用它。即使可能有一些細節需要釐清,Kubernetes REST API 和慣例的運作方式意味著任何未來的穩定 API 都將與最新的 beta API 相容:當 beta 功能升級到 GA 時,您的 API 物件不會停止運作。
特別是對於 API 及其資源,將功能從 beta 移至 GA 的動力遠不如從 alpha 移至 beta 的動力強。想要特定功能的供應商有充分的理由幫助將程式碼推進到功能預設為啟用的程度,但除此之外,旅程就沒那麼清晰了。
KEP 不僅追蹤程式碼改進。本質上,任何需要與更廣泛社群溝通的事物都值得一個 KEP。也就是說,大多數 KEP 都涵蓋 Kubernetes 功能(以及實作它們的程式碼)。
您可能知道 Ingress 在 Kubernetes 中已經有一段時間了,但您是否意識到它實際上在 2015 年就進入 beta 階段了?為了幫助推動事情向前發展,Kubernetes 的架構特別興趣小組 (SIG) 已經有了一個新的方法。
避免永久 beta 階段
對於 Kubernetes REST API,當新功能的 API 達到 beta 階段時,就會開始倒數計時。beta 品質的 API 現在有三個版本(約九個曆月)可以選擇:
- 達到 GA,並棄用 beta,或
- 擁有一個新的 beta 版本(並棄用之前的 beta)。
需要明確的是,此時僅影響 REST API。例如,APIListChunking 是一個 beta 功能,但它本身並不是 REST API。目前沒有計劃自動棄用 APIListChunking 或任何其他不是 REST API 的功能。
如果 beta API 在三個 Kubernetes 版本之後仍未升級到 GA,則下一個 Kubernetes 版本將棄用該 API 版本。REST API 沒有選擇在發布窗口後的第一個 Kubernetes 版本之後仍停留在相同的 beta 版本。
這對您意味著什麼
如果您正在使用 Kubernetes,您很有可能正在使用 beta 功能。就像我說的,有很多這樣的例子。除了 Ingress 之外,您可能還在使用 CronJob 或 PodSecurityPolicy 或其他功能。您更有可能在至少啟用一個 beta 功能的控制平面上運行。
如果您正在使用或產生使用 beta API(如 Ingress)的 Kubernetes 資訊清單,則需要計劃修改這些資訊清單。目前的 API 將按照時間表(我之前提到的 9 個月)被棄用,並且在再過 9 個月後,這些被棄用的 API 將被移除。到那時,為了保持 Kubernetes 的最新狀態,您應該已經完成遷移。
這對 Kubernetes 貢獻者意味著什麼
此處的動機似乎很清楚:使功能穩定。保證 beta 功能將被棄用增加了一個很大的激勵,以便想要該功能的人們繼續努力,直到程式碼、文件和測試準備好讓該功能升級到穩定版本,並由 Kubernetes 多個版本的真實世界使用證據支持。
這對生態系統意味著什麼
我認為,這些看似嚴厲的措施很有道理,並且對 Kubernetes 來說是好事。透過適用於所有不同特別興趣小組 (SIG) 的規則,棄用現有的 API 有助於避免停滯並鼓勵修復。
假設一個 API 進入 beta 階段,然後真實世界的經驗表明它不太正確 - 從根本上說,該 API 存在缺陷。隨著 9 個月的倒數計時,相關人員有手段和理由來修改和發布一個處理問題案例的 API。任何想要使用被棄用 API 的人都歡迎 - Kubernetes 是開源的 - 但他們的需求不必阻礙功能的進展。