本文已發布超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
容器中的具狀態應用程式!?Kubernetes 1.3 說「是!」
恭喜 Kubernetes 社群又發布了一個充滿價值的版本。對具狀態應用程式和聯邦叢集的關注是我對 1.3 版本感到如此興奮的兩個原因。Kubernetes 對於 Cassandra、Kafka 和 MongoDB 等具狀態應用程式的支援至關重要。重要的服務依賴資料庫、鍵值儲存、訊息佇列等等。此外,隨著應用程式成長以服務全球數百萬使用者,僅僅依賴一個資料中心或容器叢集是行不通的。叢集聯邦允許使用者跨多個叢集和資料中心部署應用程式,以實現規模和彈性。
您可能之前聽我說過,容器是下一個偉大的應用程式平台。Diamanti 正在加速生產環境中具狀態應用程式的容器採用 - 在生產環境中,效能和易於部署至關重要。
應用程式需要的不仅仅是牲畜
除了像網頁伺服器這樣的無狀態容器(所謂的「牲畜」,因為它們是可互換的)之外,使用者越來越多地使用容器部署具狀態工作負載,以受益於「一次建構,隨處運行」並提高裸機效率/利用率。這些「寵物」(之所以如此稱呼,是因為每個都需要特別處理)帶來了新的需求,包括更長的生命週期、組態依賴性、具狀態容錯移轉和效能敏感性。容器編排必須滿足這些需求,才能成功部署和擴展應用程式。
進入 Pet Set,這是 Kubernetes 1.3 中的一個新物件,用於改進具狀態應用程式支援。Pet Set 依序執行每個資料庫副本(例如)的啟動階段,確保有序的主/從組態。Pet Set 還透過利用無處不在的 DNS SRV 記錄(一種公認且長期理解的機制)簡化了服務發現。
Diamanti 對 Kubernetes 的 FlexVolume 貢獻透過提供具有低延遲儲存和保證效能(包括從容器到媒體的強制服務品質)的持久性卷,實現了具狀態工作負載。
聯邦主義者
規劃應用程式可用性的使用者必須應對跨地理位置的容錯移轉和擴展問題。跨叢集聯邦服務允許容器化應用程式輕鬆跨多個叢集部署。聯邦服務解決了諸如管理多個容器叢集以及協調跨聯邦叢集的服務部署和發現等挑戰。
像嚴格的集中式模型一樣,聯邦提供了通用的應用程式部署介面。然而,由於每個叢集都保留自主權,因此聯邦增加了在網路中斷和其他事件期間在本機管理叢集的彈性。跨叢集聯邦服務還在容器叢集中應用一致的服務命名和採用,簡化了 DNS 解析。
很容易想像在未來的版本中,跨叢集聯邦服務會帶來強大的多叢集使用案例。一個範例是根據治理、安全性和效能需求排程容器。Diamanti 的排程器擴展是考慮到這個概念而開發的。我們的第一個實作使 Kubernetes 排程器能夠感知每個叢集節點本機的網路和儲存資源。類似的概念將來可以應用於使用跨叢集聯邦服務進行更廣泛的放置控制。
參與其中
隨著對具狀態應用程式的興趣日益濃厚,進一步增強 Kubernetes 儲存的工作已經開始。儲存特別興趣小組正在討論支援本機儲存資源的提案。Diamanti 期待擴展 FlexVolume 以包含更豐富的 API,從而實現本機儲存和儲存服務,包括資料保護、複寫和縮減。我們還致力於透過 Kubernetes 跨叢集聯邦服務,提出改進應用程式放置、遷移和跨容器叢集容錯移轉的提案。
加入對話並做出貢獻!以下是一些入門的地方