在過去十年中,基礎(chǔ)設(shè)施的世界發(fā)生了巨大的變化,越來越多的組織將其工作負載分布在多個平臺上——包括內(nèi)部部署和云。這將導(dǎo)致我們管理工作負載的方式發(fā)生變化,也帶來復(fù)雜性和風(fēng)險的增加。工作負載在多個平臺上的分布有許多不同的方式,其中最常見的是多云和混合云。
多云最簡單的意思是跨兩個或多個云基礎(chǔ)設(shè)施平臺部署應(yīng)用程序的組件。這些平臺可以是兩個公共云服務(wù)提供商,或者兩個私有云,或者它們的一些組合?;旌显埔膊畈欢啵皇撬偸侵腹苍坪退接性频慕Y(jié)合。
多云和混合云應(yīng)用程序設(shè)計模式可以采取多種形式,但有兩種最重要:
托管在不同云上的組件—最常見和最簡單的模型涉及到分離組件(應(yīng)用程序?qū)樱?,以便每個不同的組件部署在單個提供者上,整個應(yīng)用程序分布在多個云上。例如,應(yīng)用程序的前端可能位于公共云上,中間件位于私有云上,數(shù)據(jù)庫位于內(nèi)部裸金屬機集群上。
以一個以前端為中心的流量很大的web應(yīng)用程序為例,它可能經(jīng)常更新,以對后端資源進行備用調(diào)用。將應(yīng)用程序前端安裝在公共云上可以快速、動態(tài)地擴展此資源以響應(yīng)流量,并且可以簡化臨時(但資源密集型)過程,如頻繁發(fā)布新版本的藍/綠部署。將中間件放在私有云上可以實現(xiàn)類似但更受限的靈活性和更嚴格的安全性。在裸金屬上運行數(shù)據(jù)庫提供了最高的可調(diào)性和性能,同時為關(guān)鍵和/或受監(jiān)管的數(shù)據(jù)提供了最大的保護。
單個組件,分布在多個云中——我們很少使用單個應(yīng)用程序組件并將其分布在多個云中。這個模型的挑戰(zhàn)是,在單個應(yīng)用程序組件中引入了延遲和潛在的其他網(wǎng)絡(luò)挑戰(zhàn)等問題。
例如,當組織擴大公共云服務(wù)的使用并尋求成本優(yōu)化時,他們經(jīng)常會遇到所需資源不可用的情況(例如,區(qū)域接近容量,沒有所需類型的“點實例”可用)。在這種情況下,Kubernetes federation之類的技術(shù)可以用來支持容器工作負載,甚至原則上,對等微服務(wù)水平擴展以執(zhí)行單個應(yīng)用程序功能,從而“跨越”公共云之間的鴻溝。然而,編寫基于這種架構(gòu)的微服務(wù)和應(yīng)用程序意味著要預(yù)測一系列延遲和其他條件,而這些條件是在單個基礎(chǔ)設(shè)施上運行的應(yīng)用程序并不經(jīng)常遇到的。
多云優(yōu)勢
多云為幫助開發(fā)人員更輕松地使用來自多個云提供商的資源和服務(wù)提供了許多優(yōu)勢,包括以下幾點。
杠桿——你希望能夠?qū)?yīng)商施加一定的杠桿作用,以便能夠協(xié)商盡可能最佳的價格并確保盡可能最佳的服務(wù)級別。如果你被鎖定在一個單一的供應(yīng)商(或壟斷),你就失去了杠桿作用。你很容易受到成本上升和服務(wù)級別下降的影響。
性價比——訪問多個公共云的能力使你能夠不斷優(yōu)化性價比(不僅針對工作負載托管,還針對與服務(wù)應(yīng)用程序相關(guān)的所有其他性能因素和成本(例如網(wǎng)絡(luò)出口成本、互聯(lián)性、延遲))。但是,通過在供應(yīng)商和基礎(chǔ)設(shè)施之間移動組件和工作負載,最大限度地提高成本和性能優(yōu)化的自由度,意味著限制你對所使用的平臺和提供商的差異化功能和服務(wù)的依賴性。Kubernetes和容器可以在這里扮演重要的角色,形成跨越多個云和基礎(chǔ)設(shè)施的一致基礎(chǔ)。
風(fēng)險緩解——在上述基礎(chǔ)上,你需要能夠輕松地將雞蛋轉(zhuǎn)移到另一個籃子里。云提供商的定價很復(fù)雜,很難觀察和預(yù)測,而且?guī)缀醪恍枰⒁饩涂梢愿淖?。服?wù)可以停用。服務(wù)提供商的政策也會發(fā)生變化,而且服務(wù)提供商在執(zhí)行方面也會變化無常,服務(wù)協(xié)議的條款使得客戶在發(fā)生糾紛時幾乎沒有追索權(quán)。因此,提前計劃,提供冗余,并確保關(guān)鍵數(shù)據(jù)庫和其他難以移動的組件不會鎖定到特定的供應(yīng)商,是非常有意義的。
位置——公共云提供的一個關(guān)鍵服務(wù)是將工作負載和數(shù)據(jù)放到特定區(qū)域的能力。利用位置的能力可以進入利潤豐厚的市場——它對應(yīng)用程序性能(例如,最小化延遲)、存儲和傳輸成本以及(在某些情況下)特定服務(wù)的可用性和規(guī)模至關(guān)重要。
合規(guī)性——對工作負載和數(shù)據(jù)位置(靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù))的控制對于實現(xiàn)合規(guī)性、數(shù)據(jù)主權(quán)和數(shù)據(jù)保護的管轄權(quán)戰(zhàn)略也至關(guān)重要。對于尋求服務(wù)全球市場的組織來說,符合GDPR、Privacy Shield和其他法規(guī)的管轄權(quán)和客戶要求的能力至關(guān)重要。
多云挑戰(zhàn)
策略是確保多云帶來好處而不給開發(fā)人員、DevOps和運維團隊帶來額外挑戰(zhàn)所必需的。
一致性至關(guān)重要。通過確??缢接性坪凸苍频膽?yīng)用程序平臺的一致性,你可以幫助確保應(yīng)用程序能夠在任何地方運行而無需更改;并且可以在單一通道中維護配置、運維自動化、CI/CD和其他輔助代碼庫。Kubernetes是目前用于跨越公共云和私有云基礎(chǔ)設(shè)施以及裸金屬的最佳可用平臺,它提供了一系列抽象機制,用于將工作負載與底層基礎(chǔ)設(shè)施隔離開來,在底層基礎(chǔ)設(shè)施出現(xiàn)問題的情況下保持工作負載的活力,并允許快速、高效、低影響的應(yīng)用程序更新、擴展和生命周期管理。
但是單靠Kubernetes是不夠的——組織需要在任何基礎(chǔ)設(shè)施上提供一致的Kubernetes,這些Kubernetes易于定制、易于擴展、完全可觀察、功能齊備、安全、普遍兼容和運維人員友好的應(yīng)用程序環(huán)境,這些應(yīng)用程序環(huán)境都是由一個中央資源提供的。單一集群模型加快了運維速度,實現(xiàn)了容器、配置和自動化可移植性,同時還提高了安全性(消除了未知和變化,從而減少了攻擊面),促進了策略管理并簡化了合規(guī)性。
使用一個集中管理的系統(tǒng)來交付、更新和管理跨多云的集群,也為提高生產(chǎn)率打開了大門。一塊用于可觀察性和手動運維的“玻璃”,全自動和無中斷的更新,一組用于構(gòu)建自助服務(wù)應(yīng)用程序和按需交付集群的API(無論你在哪里需要它們)。通過“提供者”中間件(中央命令和控制設(shè)施)操縱各種公共云和私有云基礎(chǔ)設(shè)施,有助于確保你獲得特定于平臺和公共云的服務(wù)的好處,同時還強制執(zhí)行應(yīng)用程序運行所在的Kubernetes集群的一致配置和行為。
自由選擇與這種模式是一致的。一個集中管理的多云基礎(chǔ)設(shè)施應(yīng)該讓你的運維人員和開發(fā)人員可以在公共云和私有云中自由選擇,同時還支持使用一系列操作系統(tǒng)和一系列自動化、CI/CD、安全性和其他工具。
集中式監(jiān)控和容量管理也很重要,可以確保你清楚地了解系統(tǒng)的性能以及它們消耗的資源,以便你能夠正確地決定應(yīng)該在何處運行應(yīng)用程序。
在核心需求列表中排名靠前的還有易用性。如果系統(tǒng)過于復(fù)雜,無法使用,或者要求開發(fā)人員必須學(xué)會處理新的或奇怪的系統(tǒng),這將極大地阻礙采用。
選擇多云可能需要放棄什么
當然,選擇多云策略并確保使用公共平臺跨多個平臺部署和管理一致的Kubernetes(以及可能在Kubernetes之上運行的應(yīng)用程序)也有一些缺點。其中最主要的是,你可能無法(直接)利用公共(和私有)云提供商提供的所有很酷的附加服務(wù),包括“一鍵式Kubernetes”版本。
很難反駁方便和無成本/低成本/低摩擦啟動,但并非不可能??紤]以下幾點。
個人試用公共云托管的Kubernetes解決方案所需的努力并不代表一個組織大規(guī)模交付多個相同類型的開發(fā)、測試和生產(chǎn)集群所需的努力。后者要大得多——處理平臺的身份和訪問管理,用適當?shù)慕M和用戶填充新的集群,管理(和成本優(yōu)化)快速增長的Kubernetes集群群(加上它們的相關(guān)網(wǎng)絡(luò)和輔助服務(wù)配置),可能跨越多個提供商區(qū)域。考慮到所有這些都可能與其他提供者和平臺上概念相似但代碼不兼容的設(shè)置不同。要點:在現(xiàn)實世界中,在真實的尺度下,這個模型不是多云友好的。只有當你深度使用一個公共云或私有云平臺時,它才能優(yōu)雅地工作。
根據(jù)你選擇的集中式部署/更新/運維/觀察解決方案,跨多個提供商和平臺大規(guī)模交付和管理集群的摩擦可能非常小,(例如,通過針對解決方案的API運行的簡單自助自動化)幾乎為零。你也可以通過這種方式使用“一鍵集群”,即使用于生產(chǎn)也是如此。
同樣,根據(jù)你選擇的集中式解決方案,你應(yīng)該可以從許多核心公共云服務(wù)中獲得間接收益。這是因為你的解決方案供應(yīng)商已經(jīng)設(shè)計(并將繼續(xù)更新)其特定于提供商的配置和部署中間件,以便在合理的情況下優(yōu)化使用每個公共云提供商的服務(wù)組合。不同之處在于,你不需要弄清楚如何圍繞Kubernetes集群及其入口使用(和自動化)AWS Route53、Azure DNS、OpenStack Designate、VMware等,就可以在多個平臺上建立生產(chǎn)集群。
云提供商服務(wù)在集中式的Kubernetes機制下仍然是完全可訪問的,并且可以自由使用。你也可以使用AWS Lambda功能和集中式、多云Kubernetes管理。
最重要的是:入門服務(wù)(包括Kubernetes產(chǎn)品)讓初創(chuàng)企業(yè)可以輕松使用。但是,在沒有集中化解決方案提供的抽象和調(diào)解的情況下,你投入的越多,對提供者服務(wù)組合的挖掘越深入,你就越被鎖定。使用多云意味著在每個供應(yīng)商上重復(fù)(有差異)在企業(yè)級開始的工作,并維護你為此創(chuàng)建的工具的所有并行通道。因此,將運維和業(yè)務(wù)的任何部分從一家供應(yīng)商“lifting and shifting”到另一家供應(yīng)商,就成了一個多層次的挑戰(zhàn)。