與其他企業(yè)級基礎(chǔ)設(shè)施供應(yīng)商相比,面對容器技術(shù)帶來的挑戰(zhàn),Microsoft 處于一個(gè)比較微妙的位置。Microsoft 已經(jīng)在受到容器應(yīng)用增長沖擊的系統(tǒng)中取得了很多既得利益,其中包括操作系統(tǒng)(Windows Server),虛擬機(jī)管理程序(Hyper-V),私有云產(chǎn)品(Azure Stack)和 公有云(Azure)。
對于平臺型公司,容器技術(shù)既是挑戰(zhàn)又是機(jī)遇。每一個(gè)提供基礎(chǔ)設(shè)施服務(wù)的玩家對容器化浪潮的反應(yīng)不盡相同,雖然 VMware 在競爭中起步較早,但 Google、Microsoft 和 Red Hat 在擁抱新一輪的計(jì)算浪潮時(shí)反應(yīng)迅速。Google 專注于容器管理,開源了 Kubernetes 容器編排引擎,并在其公有云中提供了 Kubernetes 的托管版本。Red Hat 意識到,作為傳統(tǒng)的 PaaS,OpenShift 并未表現(xiàn)出強(qiáng)勁的勢頭。所以 Red Hat 做出了巨大改變,包括品牌和底層的技術(shù)棧,從而轉(zhuǎn)向 Kubernetes。
微軟迅速與 Docker 公司達(dá)成協(xié)議,使其成為Windows 容器的默認(rèn)接口,并努力確保容器是整個(gè)堆棧不可或缺的部分,反映出其新的文化特點(diǎn)。 Windows 容器、Hyper-V 容器、Windows Server 2016 中集成 Docker 引擎,Azure 容器服務(wù)、Visual Studio Tools for Docker、容器優(yōu)化的 Windows Nano 服務(wù)器、Azure 中的嵌套虛擬化等功能都表明了 Microsoft 正在全力以赴將容器化作為一等公民。
到目前為止,微軟的一項(xiàng)戰(zhàn)略舉措是將 Brendan Burns(https://github.com/brendandburns)納入麾下,他是前 Google 員工,隸屬于 Kubernetes 創(chuàng)始團(tuán)隊(duì)。這次招聘引起了不小的轟動(dòng),包括 Azure 的主要競爭對手 -- 構(gòu)建 Google 云平臺的團(tuán)隊(duì)。但是,由于 Brendan 與 Kubernetes 的合作,這個(gè)開源項(xiàng)目在社區(qū)中獲得了巨大的普及,所以并未引起太多不滿。包括谷歌員工在內(nèi)的 Kubernetes 社區(qū)希望看到微軟正式擁抱 Kubernetes。微軟并沒有讓我們失望,在 Brendan 過渡到 Azure Compute 團(tuán)隊(duì)的幾個(gè)月內(nèi),Redmond 在 Azure 上開放了Kubernetes。這幾乎打破了 AWS 的壟斷,AWS 構(gòu)建了專有的容器管理平臺,基于 EC2 的 亞馬遜 EC2 容器服務(wù)。
Brendan 的主要可交付成果包括 Windows 與 Kubernetes 的集成,對微軟用戶來說這是一件極其重大的事。通過 Kubernetes 的管理,用戶將能夠無縫地混合和匹配 Linux 和 Windows 工作負(fù)載。這種異構(gòu)環(huán)境將運(yùn)行包含 Linux 和 Windows 節(jié)點(diǎn)的 Kubernetes 集群。但 Windows 的基礎(chǔ)網(wǎng)絡(luò)堆棧對此次集成增加了不小的難度,解決這個(gè)挑戰(zhàn)的過程應(yīng)該非常有趣。Brendan 除了將 Kubernetes 帶到了 Azure,他也在忙于解決微軟的整體容器化戰(zhàn)略。
最新發(fā)布的 Azure 容器實(shí)例(ACI)是微軟的一個(gè)重要舉措,ACI 中有很多 Brendan 的印記。ACI 允許開發(fā)人員啟動(dòng) “無服務(wù)容器”,而無需關(guān)心充當(dāng)宿主機(jī)的虛擬機(jī)和操作系統(tǒng)。只需兩步,開發(fā)人員就可以在 Azure 中啟動(dòng)一個(gè)容器。盡管有容器優(yōu)化的操作系統(tǒng),如 CoreOS,Atomic Hosts 和 Windows Nano Server,但在運(yùn)行容器前,它們被當(dāng)做虛擬機(jī)使用。
使用 ACI,開發(fā)人員在運(yùn)行應(yīng)用程序時(shí)無需擔(dān)心 VM 或 宿主機(jī)操作系統(tǒng)。這是微軟將 ACI 定位為“無服務(wù)容器”的主要原因。在 ACI 中無法通過 SSH 或 RDP 連接到主機(jī)。工作流程很簡單 - 從 registry 中拉取一個(gè)容器,按需運(yùn)行即可。
ACI 的定價(jià)模式與無服務(wù)理念相一致。每個(gè)配置的容器實(shí)例每月收取 $ 0.0025。內(nèi)存持續(xù)時(shí)間是通過容器的起止時(shí)間計(jì)算而來,RAM 的收費(fèi)是 $0.0000125/G。從容器創(chuàng)建時(shí)起,每個(gè) CPU 需要支付 $0.0000125的費(fèi)用。每個(gè) ACI 實(shí)例最多可以有最大 3.5GB 的 RAM 和 4個(gè) CPU。例如,如果每天啟動(dòng)一個(gè)具有 1GB RAM 和 1個(gè)CPU 的 ACI 實(shí)例5分鐘,則帳單將轉(zhuǎn)換為0.30美元,這是非常實(shí)惠的。
在許多方面,ACI 是微軟對 AWS Lambda 的回?fù)?。雖然 Azure Function 是與 Lambda 類似的替代方案,但 Microsoft 將其作為對競爭對手的無服務(wù)產(chǎn)品的快速響應(yīng)。Azure Function 是對 Azure WebJobs 的改進(jìn),Azure WebJobs 是為類似但不同的用例創(chuàng)建的服務(wù)。ACI 是一種優(yōu)雅的無服務(wù)計(jì)算,因?yàn)樗试S開發(fā)人員以 Docker 鏡像的形式攜帶代碼加配置。與 Lambda 不同,ACI 并不局限于一組預(yù)定義的語言和運(yùn)行時(shí)。
攜帶自有容器的理念近來深入人心。Google 通過 App Engine 靈活的環(huán)境將托管虛擬機(jī)添加到其 PaaS。Amazon 支持 AWS Beanstalk 中的單容器和多容器部署。但是 Azure 容器實(shí)例為原生容器應(yīng)用帶來了真正的無服務(wù)功能。開發(fā)人員可以在 Docker 容器鏡像中封裝從代碼到配置的所有內(nèi)容,并對其進(jìn)行定期執(zhí)行。其中包括運(yùn)行配置管理腳本,備份任務(wù),自動(dòng)化構(gòu)建,隊(duì)列處理以及更多任務(wù)。
ACI 并不是成熟容器編排平臺諸如 Docker Swarm,Mesosphere DC / OS,HashiCorp Nomad 和 Kubernetes 的替代品。如果要運(yùn)行復(fù)雜的微服務(wù)應(yīng)用程序,需要高級功能如持久性、服務(wù)發(fā)現(xiàn)、canary、自動(dòng)擴(kuò)容、自我修復(fù)、監(jiān)控和日志記錄等功能,Azure 容器服務(wù)是最好的選擇。將 ACI 視為增強(qiáng)的、支持容器的無服務(wù)平臺。與其壓縮代碼和上傳代碼片段到 AWS Lambda 或 Azure Function,你可以利用 Docker 的調(diào)試工具,上線之前在本地測試代碼。
ACI 表明微軟非常重視容器技術(shù),而且它的創(chuàng)新速度比競爭對手要快。這項(xiàng)技術(shù)將成為 Azure Compute 平臺的關(guān)鍵支柱之一。我非常確定 ACI 將在微軟的 Edge 計(jì)算平臺 -- Azure IoT Edge 中占有一席之地。它也將最終在 Azure Stack 中作為計(jì)算層提供服務(wù)。