本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

容器中的有狀態應用!?Kubernetes 1.3 說“是!”

祝賀Kubernetes社群又釋出了一個充滿價值的版本。對有狀態應用程式和聯邦叢集的關注是我對1.3版本如此興奮的兩個原因。Kubernetes對Cassandra、Kafka和MongoDB等有狀態應用程式的支援至關重要。重要的服務依賴於資料庫、鍵值儲存、訊息佇列等。此外,隨著應用程式的增長,為全球數百萬使用者提供服務,僅僅依賴一個數據中心或容器叢集是行不通的。叢集聯邦允許使用者將應用程式部署到多個叢集和資料中心,以實現可伸縮性和彈性。

您可能之前聽我說過,容器是下一個偉大的應用平臺。Diamanti正在加速有狀態應用程式在生產中的容器化採用——在生產中,效能和易於部署才是真正重要的。

應用程式需要的不僅僅是“牛”

除了像Web伺服器這樣的無狀態容器(被稱為“牛”,因為它們可以互換)之外,使用者越來越多地使用容器部署有狀態工作負載,以受益於“一次構建,隨處執行”並提高裸機效率/利用率。這些“寵物”(被稱為“寵物”,因為每個都需要特殊處理)帶來了新的要求,包括更長的生命週期、配置依賴性、有狀態故障轉移和效能敏感性。容器編排必須解決這些需求,才能成功部署和擴充套件應用程式。

Kubernetes 1.3中引入了一個新物件Pet Set,用於改進有狀態應用程式支援。Pet Set會按順序啟動每個資料庫副本(例如),確保主/從配置有序。Pet Set還透過利用無處不在的DNS SRV記錄(一種廣為人知且歷史悠久的機制)來簡化服務發現。

Diamanti 對 Kubernetes 的 FlexVolume 貢獻透過提供具有低延遲儲存和有保證效能的持久捲來支援有狀態工作負載,包括從容器到介質強制實施服務質量。

聯邦主義者

規劃應用程式可用性的使用者必須應對跨地域的故障轉移和擴充套件問題。跨叢集聯邦服務允許容器化應用程式輕鬆部署到多個叢集。聯邦服務解決了管理多個容器叢集以及協調跨聯邦叢集的服務部署和發現等挑戰。

與嚴格的集中式模型一樣,聯邦提供了通用的應用程式部署介面。然而,由於每個叢集都保持自主性,聯邦增加了在網路中斷和其他事件期間在本地管理叢集的靈活性。跨叢集聯邦服務還在容器叢集之間應用一致的服務命名和採用,從而簡化了DNS解析。

很容易想象在未來的版本中,透過跨叢集聯邦服務,可以實現強大的多叢集用例。一個例子是根據治理、安全和效能要求排程容器。Diamanti的排程器擴充套件就是基於這個概念開發的。我們的第一個實現使Kubernetes排程器能夠感知每個叢集節點本地的網路和儲存資源。類似的概念未來也可以應用於透過跨叢集聯邦服務進行更廣泛的放置控制。

參與其中

隨著對有狀態應用程式興趣的增長,進一步增強 Kubernetes 儲存的工作已經開始。儲存特別興趣小組正在討論支援本地儲存資源的提案。Diamanti 期待擴充套件 FlexVolume,以包含更豐富的 API,從而啟用本地儲存和儲存服務,包括資料保護、複製和精簡。我們還在研究透過 Kubernetes 跨叢集聯邦服務改進容器叢集之間的應用程式放置、遷移和故障轉移的提案。

加入對話並做出貢獻!以下是一些入門的地方