從單集群到多集群:Kubernetes在多云混合云環境的演進
Kubernetes 作為一項核心技術已成為現代應用程序架構的基礎,越來越多的企業使用 Kubernetes 作為容器編排系統。
下面的數據來自 2020 CNCF Survey 的原始數據,可以看到使用 Kubernete 的企業占比達到了 80%。
Kubernetes 的流行主要有以下幾個原因:
- 自動化:Kubernetes 實現了容器的部署、擴展、負載均衡、故障恢復、滾動更新等操作的自動化,極大地簡化了應用程序的管理和維護工作。這種自動化也提升了應用程序的彈性和可用性。
- 可移植性:Kubernetes 基于容器的架構模型,使得應用無需重新編碼或更新配置就可以在任何云平臺、物理機或者虛擬機中運行。
- 生態系統:Kubernetes 作為一個成功地開源項目,擁有強大的社區支持和生態系統,使其可以獲得更好的創新、優化和安全性保障。從社區中,我們可以找到各種插件和工具,為開發者提供了豐富的選擇和擴展性。
從單 Kubernetes 集群到多 Kubernetes 集群
初露端倪
企業中的應用程序通常比較復雜,需要不同的環境來進行開發、測試和生產部署。為了避免應用程序之間的干擾和交叉,通常需要在不同的 Kubernetes 集群中分別部署和管理應用程序。
在同一個數據中心不同的環境部署獨立的 Kubernetes 集群之后不同環境下的集群規模、管理方式、可靠性和安全性各有不同,從開發、測試到生產,成本的投入也逐步地提升,來保證更好的性能、更高的可靠性和安全性。
這也是多 Kubernetes 集群的一種形式(注意這里說的是 多 Kubernetes 集群)。
迅猛發展
隨著對云計算接受程度不斷提高、企業規模的持續增長,越來越多的企業開始考慮采用或者已經采用多云和混合云的架構。多云和混合云的驅動因素很多,總結之后分成了兩類:主動因素和被動因素。
主動因素
- 避免廠商鎖定:避免廠商鎖定:企業通過采用多云混合云策略,可以避免過度依賴單一云服務提供商,從而減輕由廠商鎖定帶來的風險。
- 提升性能、降低延遲:企業根據業務需求,將服務部署在地理位置更接近用戶的數據中心。
- 更大范圍的伸縮性:在不同的云服務提供商之間實現資源的彈性伸縮,從而提供更大范圍的伸縮性以滿足業務需求。
- 提升可靠性:在不同的云服務提供商和私有數據中心之間進行應用部署之后,即使某個云服務提供商出現故障,企業的應用仍可繼續運行。
- 成本因素:可以選擇性地使用各個云服務提供商提供的服務,以便在成本和性能之間找到最佳平衡。
被動因素
- 數據中心能力限制:數據中心基礎設施的規模、性能無法滿足需求。
- 上云、下云的過渡期:在上云或下云的過程中,存在著公有云和私有云共存的現象,過渡期可能會被拉長。
- 單一云覆蓋區域有限:盡管云服務提供商不斷擴展其全球數據中心的覆蓋范圍,但仍然可能存在單一云服務提供商無法滿足企業在特定地區的部署需求的情況。
- 業務隔離:在某些情況下,企業需要對不同業務進行隔離,以降低風險和提高安全性。將應用部署到不同的數據中心,來確保敏感數據和關鍵應用的安全。
- 合規和數據隔離:不同國家和地區可能有不同的法規要求,這些要求可能會限制企業在特定云服務提供商上存儲和處理數據。
多云混合云策略的引入,相應地,Kubernetes 集群的數量也變得越來越多。雖然集群的數量在增加,但是本質與單集群無異:每個 Kubernetes 集群有自己的控制平面(api-server、控制器)和一組工作節點,可以獨立進行應用程序的部署和管理(這就是為何前面稱之為多 Kubernetes 集群)。在“多集群”環境下,每個集群是獨立的,當需要管理的時候,采用的是“一個一個管理”的方式。
挑戰多多
多 Kubernetes 集群可以在不同的云平臺、不同的數據中心、不同的網絡環境和不同的物理基礎設施中部署,以滿足不同的應用程序和業務需求。但隨著集群數量的增加,也面臨著諸多挑戰:
- 集群管理復雜性增加:不同的 Kubernetes 集群部署在不同的云服務商平臺上,擁有不同的網絡架構和安全策略。隨著數量的增加,集群管理的復雜性也會相應增加。這包括資源分配、訪問控制、網絡管理、集群升級和維護等方面。
- 應用管理成本增加:企業需要在多個 Kubernetes 集群上部署和管理應用程序。
- 跨集群網絡和服務通信:Kubernetes 天然的網絡隔離特性,又因為部署在不同網絡架構的云平臺上,需要解決跨集群網絡和服務通信的問題。這包括跨平臺網絡互聯、跨集群服務發現和路由等問題。
從多 Kubernetes 集群到 Kubernetes 多集群
為了應對上面的種種挑戰,出現了另一個概念 Kubernetes 多集群。Kubernetes 多集群和多 Kubernetes 集群是兩個不同的概念,為了便于區分我們也可以將其稱為 Kubernetes 聯邦。
Kubernetes 聯邦是將多個 Kubernetes 集群連接在一起,以便協同工作和實現跨集群資源和應用的統一管理、跨地域和跨云的故障切換、根據實際需求動態分配資源降低成本、提升業務的靈活性和擴展性。
雖然對于如何連接多個 Kubernetes 集群沒有官方的解決方案,但是得益于強大的社區和生態,已有不少開源和商業化的解決方案。
集群管理復雜性
使用集中式的多集群管理平臺,在一個統一的界面中管理多云混合云中的 Kubernetes 集群,提供集群創建、配置、監控和故障排查的功能,使集群管理變得更加簡單和高效,同時提高集群的可靠性和可用性。
在工具方面有 KubeSphere、Rancher 以及眾多公有云的方案 Google Anthos、Azure Arc、Red Hat Advanced Cluster Management(ACM)、AliCloud ACK 等等。
應用管理
使用自動化的多集群應用編排和管理平臺,解決多集群、多云環境下應用程序的快速部署、擴展和管理問題,保證應用程序的可靠性。
除了前面提到多集群管理平臺提供了應用管理能力以外,還有如 Kubernetes Federation(前者 22 年 8 月已存檔)、Karama 等開源多集群應用管理平臺。
跨集群網絡和服務通信
降低多集群環境中的網絡復雜性。使用服務網格技術,管理跨多個集群的服務流量、安全性和可觀測性,實現跨集群的服務發現和通信;或者采用跨集群的網絡解決方案實現網絡互通。
服務網格技術有 Istio、Linkerd、Flomesh 等,網絡解決方案有 Submariner。
總結
在多云、混合云成為趨勢的當下,Kubernetes 多集群也不斷地被提及并逐漸成為重要的解決方案。Kubernetes 多集群的討論已不再局限于集群和應用的管理,還引入了跨集群的服務通信。
多集群可以為企業提供更靈活、更可靠的應用部署和管理能力,使企業能夠更好地利用混合多云環境中的資源,降低運營成本,提高應用的可靠性。除此以外,還可以助力企業更快速地進行應用遷移。