VMware 在去年 VMWorld 介紹了云原生組合 Tanzu 和太平洋項(xiàng)目(Project Pacific)。3月11日,VMware 發(fā)布了近10年來(lái)最重要的一個(gè)版本:vSphere 7,包含眾多的新功能。其中最引人注目的更新當(dāng)屬在 vSphere with Kubernetes (VwK) 功能,原生支持 Kubernetes 平臺(tái),實(shí)現(xiàn)了虛機(jī)和容器混合管理的能力,使 vSphere 成為全新的現(xiàn)代化應(yīng)用開(kāi)發(fā)運(yùn)維平臺(tái)。
vSphere with Kubernetes, 即之前的太平洋項(xiàng)目,對(duì) vSphere 進(jìn)行了多項(xiàng)的重構(gòu),引入了 Kubernetes 的概念和架構(gòu),以應(yīng)用為中心,讓開(kāi)發(fā)人員和運(yùn)維人員從不同的視圖使用系統(tǒng),帶來(lái)里程碑式的革新。
VwK 在 VMware 公司內(nèi)部已孕育了3年有多,目標(biāo)深遠(yuǎn)、工程浩大,Kubernetes 聯(lián)合創(chuàng)始人 Joe Beda 直接指導(dǎo),上百名精英工程師投入研發(fā),現(xiàn)在終于如約而至,重磅推出。
我們一起來(lái)看看 vSphere with Kubernetes 的細(xì)節(jié)吧。
vSphere 集群轉(zhuǎn)變成 Kubernetes 集群
vSphere with Kubernetes 是 vSphere 7 里面一個(gè)功能選項(xiàng),管理員可在 vCenter 里啟用這個(gè)選項(xiàng),然后可選擇 vSphere 集群激活 VwK 功能。
在啟用 VwK 后,vSphere 集群中會(huì)部署 3 臺(tái)虛擬機(jī),每臺(tái)虛擬機(jī)部署 Kubernetes 的 Master 節(jié)點(diǎn),組成高可用的本地控制平面 (Local Control Plane) ;接著在每個(gè) ESXi 節(jié)點(diǎn)的內(nèi)核運(yùn)行一個(gè) Kubelet 進(jìn)程(稱(chēng)作 Spherelet ),使 ESXi 成為 Kubernetes 的 Worker 節(jié)點(diǎn)。這樣改造之后,vSphere 集群華麗轉(zhuǎn)身成為支持現(xiàn)代應(yīng)用 Kubernetes 集群。這個(gè) vSphere 集群稱(chēng)為 “Supervisor Cluster”(主管集群)。
把 vSphere 集群轉(zhuǎn)變成 Kubernetes 集群
把 vSphere 集群轉(zhuǎn)換為 Kubernetes 集群的好處之一,就是系統(tǒng)服務(wù)可以跑在這個(gè)主管集群之上,使得系統(tǒng)服務(wù)的升級(jí)、重啟等生命周期管理可以依照 Kubernetes 的 Pod 方式進(jìn)行,更加靈活;同時(shí)具備隔離性好,安全性高、HA保護(hù)等特性。
vSphere 7 提供的系統(tǒng)服務(wù)統(tǒng)稱(chēng)為 VMware Cloud Foundation (VCF)服務(wù)。分為3類(lèi)。
主管集群的服務(wù)(*為實(shí)驗(yàn)性功能,**為 roadmap 功能)
第一類(lèi)是Tanzu 運(yùn)行時(shí)服務(wù),主要包含 Tanzu Kubernetes Grid (TKG) 服務(wù)。TKG 服務(wù)用來(lái)管理用戶(hù)態(tài)的 Kubernetes 集群,稱(chēng)作 Tanzu Kubernetes Cluster (TKC),可用于運(yùn)行用戶(hù)的應(yīng)用。TKG 在部署 TKC 集群之前,首先創(chuàng)建組成 TKC 集群的虛擬機(jī),虛擬機(jī)啟動(dòng)后,由預(yù)置在虛機(jī)模板里的 Kubeadm 程序部署 Kubernetes 節(jié)點(diǎn)。當(dāng)所有虛擬機(jī)都成為 Kubernetes 節(jié)點(diǎn)時(shí),集群部署完成。
第二類(lèi)是混合基礎(chǔ)架構(gòu)服務(wù),提供 Kubernetes 所需要的基礎(chǔ)設(shè)施,如虛擬機(jī)、存儲(chǔ)、網(wǎng)絡(luò)、鏡像倉(cāng)庫(kù)和 vSphere Pod 等。這些服務(wù)使 TKC 可以通過(guò)標(biāo)準(zhǔn)接口(如CNI, CSI等)訪(fǎng)問(wèn)基礎(chǔ)設(shè)施資源。
第三類(lèi)是定制服務(wù),有合作伙伴或者用戶(hù)自行開(kāi)發(fā)部署,其原理和前兩種相同。此次發(fā)布的 vSphere 版本暫時(shí)不支持這類(lèi)服務(wù),將在后續(xù)版本中提供。
VCF服務(wù)簡(jiǎn)介(59秒 )
vCenter API 轉(zhuǎn)為 Kubernetes API
經(jīng)上述重構(gòu)之后的主管集群和 Kubernetes 集群已經(jīng)有幾分形似了。要做到十全十美的神似,還有關(guān)鍵一步:支持 Kubernetes 的 API 。為此,VwK 對(duì) vSphere API 進(jìn)行了封裝和改進(jìn),向開(kāi)發(fā)者呈現(xiàn)出 Kubernetes API 。
這個(gè) vSphere 版的 Kubernetes API 可謂青出于藍(lán),除了能管理 Pod 之外,還能夠管理 vSphere 的所有基礎(chǔ)設(shè)施資源,例如虛擬機(jī)、存儲(chǔ)、網(wǎng)絡(luò)、容器鏡像等。
這里的秘訣要?dú)w功于 Kubernetes 的聲明式接口和 CRD (Custom Resource Definition)的擴(kuò)展形式;A(chǔ)設(shè)施的資源可以用 CRD 表示,如上文中的網(wǎng)絡(luò)、存儲(chǔ)、TKC 等都有相應(yīng)的 CRD。
用戶(hù)只需要編寫(xiě) yaml 格式的文件(一種簡(jiǎn)潔的文本文件),聲明所需要的 CRD 資源,通過(guò) kubectl 命令即可創(chuàng)建和維護(hù) vSphere 的資源了。
用于創(chuàng)建虛擬機(jī)的yaml文件例子
熟悉 Kubernetes 的同學(xué)都知道,管理 CRD 資源一種較好的方法是通過(guò) Operator 模式。Operator 實(shí)際上是運(yùn)行在 Kubernetes 上的程序,負(fù)責(zé)管理特定 CRD 資源的生命周期。在 vSphere 的主管集群里面,運(yùn)行著不少各施其職的 Operator,分別擔(dān)負(fù)起集群、虛機(jī)、網(wǎng)絡(luò)、存儲(chǔ)等資源的管理任務(wù)。
因?yàn)?Operator 是開(kāi)源和開(kāi)放的架構(gòu),合作伙伴還可以開(kāi)發(fā)定制化的 Operator,實(shí)現(xiàn)更豐富的功能。后面還會(huì)提到。
增加 CRX 運(yùn)行 vSphere Pod
既然 vSphere 提供了 Kubernetes API,那么問(wèn)題來(lái)了:vSphere能直接運(yùn)行 Pod 嗎?答案是肯定的。(注:Pod 是 Kubernetes 特有的運(yùn)行應(yīng)用的最小單元,由一個(gè)或數(shù)個(gè)容器組成。)
在 vSphere 7中,ESXi 內(nèi)置了一個(gè)容器運(yùn)行時(shí)(runtime),稱(chēng)作 CRX:Container Runtime for ESXi。CRX 運(yùn)行 Pod 的時(shí)候,先創(chuàng)建一個(gè)虛機(jī),然后在虛機(jī)內(nèi)啟動(dòng)一個(gè)微小的 Linux 內(nèi)核,大約 20-30MB 的樣子。接著把容器鏡像的文件系統(tǒng)掛載到虛擬機(jī)之中,最后執(zhí)行鏡像里面的應(yīng)用。這樣就啟動(dòng)了一個(gè)Pod 的應(yīng)用。
用 CRX 運(yùn)行的 Pod 是跑在一個(gè)輕量級(jí)虛擬機(jī)里面的,這個(gè)虛機(jī)稱(chēng)作 vSphere Pod (之前稱(chēng)為 PodVM)。vSphere Pod 是以虛擬機(jī)的方式產(chǎn)生,比基于 Linux Container 的 Pod 隔離度更高,安全性更好。另一個(gè)好處是可以同時(shí)支持 Windows 容器,這點(diǎn) Linux Container 無(wú)法實(shí)現(xiàn)。
ESXi 原生 Pod 的架構(gòu)
上圖黃色部分就是基于 CRX 的 vSphere Pod。在創(chuàng)建的時(shí)候, NSX 的 Kube Proxy 同步更新網(wǎng)絡(luò),存儲(chǔ) CNS 同步創(chuàng)建 VMDK 來(lái)綁定 vSphere Pod 需要的PV (Persistent Volume)。
大家對(duì) vSphere Pod 是否有種似曾相識(shí)的感覺(jué)?沒(méi)錯(cuò),VMware 之前的產(chǎn)品VIC 和開(kāi)源項(xiàng)目 Kata Containers 都采用過(guò)類(lèi)似輕量級(jí)虛擬機(jī)加載容器的技術(shù)。經(jīng)過(guò)幾年的積淀,已發(fā)展成為比較成熟的技術(shù)了。
參加過(guò) VIC 項(xiàng)目的核心工程師,大都在 vSphere 7 里面繼續(xù)奮戰(zhàn)。VIC 支持的是Docker API 和單容器,相比之下,vSphere with Kubernetes 支持 Kubernetes API 和 Pod (可多容器)。
TKC 集群 (應(yīng)用集群)
前面介紹的主管集群(supervisor cluster)可直接用 Kubernetes API管理 vSphere 的資源,可以運(yùn)行 Pod。但是需要指出的是,主管集群的并不是完全兼容 Kubernetes API 的,例如 privilege(特權(quán)) pod 在主管集群里面就不能使用。其次,主管集群的 Kubernetes 版本是相對(duì)固定的,不太可能頻繁升級(jí)。還有一點(diǎn),主管集群在每個(gè) vSphere 集群里只有一個(gè),多租戶(hù)的場(chǎng)景中無(wú)法使用不同版本的 Kubernetes。
TKC集群
為此,VwK 提供了 Tanzu Kubernetes Cluster (TKC) 集群,由前文所述的 TKG 服務(wù)管理。簡(jiǎn)單的說(shuō),就是部署在虛機(jī)里的 Kubernetes 集群,并且符合 CNCF的一致性 (Conformance)認(rèn)證標(biāo)準(zhǔn),可以兼容運(yùn)行在 Kubernetes上的應(yīng)用。TKC 集群可直接使用內(nèi)置于主管集群中的 VCF 服務(wù),可以很便捷地獲取 Load balancer,PV 等資源。
TKG 服務(wù)采用了 Kubernetes 社區(qū)的 Cluster API 開(kāi)源項(xiàng)目。Cluster API 體現(xiàn)了“用 Kubernetes 管理 Kubernetes ” 的思想,即用戶(hù)把需要?jiǎng)?chuàng)建的集群規(guī)范以 CRD 的形式提交給一個(gè) Kubernetes 管理集群,該管理集群根據(jù) CRD 去維護(hù)目標(biāo)集群的生命周期。Cluster API 以 provider 的方式支持多種云服務(wù)商。在 vSphere 7 中,主管集群(Supervisor Cluster)就是管理集群,而且只有 vSphere provider。
Cluster API:用K8s管理K8s
Namespace (命名空間)應(yīng)用視圖
命名空間要點(diǎn)(58秒視頻)
命名空間要點(diǎn)(58秒視頻)
之前提到,VwK 為應(yīng)用提供了單獨(dú)的視圖,稱(chēng)作 Namespace(命名空間)。Namespace 是計(jì)算機(jī)科學(xué)里廣泛使用的概念,用來(lái)區(qū)分不同的邏輯功能或?qū)嶓w,如編程語(yǔ)言里面的 namespace ,Linux 的 namespace,容器 registry 里面的 namespace 等等。VwK 在主管集群中借鑒并擴(kuò)展了 Kubernetes 劃分虛擬集群的概念 namespace 。
Namespace 和主管集群、SDDC 的關(guān)系
Kubernetes 的 namespace 對(duì)應(yīng)用做了邏輯上的隔離,形成虛擬集群,優(yōu)點(diǎn)是每個(gè) namespace 可以單獨(dú)設(shè)置資源管理策略,如統(tǒng)一控制網(wǎng)絡(luò)訪(fǎng)問(wèn)策略。
VwK 在主管集群中增設(shè)了namespace ,可以包括容器、虛擬機(jī)和 vSphere Pod 等資源。應(yīng)用所需的資源,如 Pod 和虛擬機(jī)等,都收納于一個(gè) namespace 之下。由于 Namespace 是面向應(yīng)用的邏輯單元,只需要對(duì) namespace 配置 Quota, HA, DRS,網(wǎng)絡(luò)、存儲(chǔ)、加密和快照等策略,就可以對(duì)應(yīng)用的所有虛擬機(jī)和 Pod 等資源進(jìn)行管控,大大方便了運(yùn)維管理。
用戶(hù)界面上的 namspace(左側(cè)導(dǎo)航欄)
從技術(shù)實(shí)現(xiàn)的角度看,當(dāng)管理員創(chuàng)建 namespace 的時(shí)候,vSphere 自動(dòng)在后臺(tái)創(chuàng)建一個(gè)對(duì)應(yīng)的資源池 (Resource pool),對(duì)應(yīng)著 namespace里的所有資源。之后對(duì) namespace 的管控實(shí)質(zhì)上都是轉(zhuǎn)化為資源池的操作。
Namespace由 Resource pool支持
Namespace 是 VwK 的一項(xiàng)創(chuàng)新,定義了管理員和開(kāi)發(fā)人員的邊界,實(shí)現(xiàn)面向應(yīng)用的管理,提高了新應(yīng)用的開(kāi)發(fā)效率。管理員在 vCenter 創(chuàng)建 namespace 后,可交給開(kāi)發(fā)人員使用。開(kāi)發(fā)人員用 Kubernetes API 在 namespace 中創(chuàng)建應(yīng)用所需虛擬機(jī)、vSphere Pod,或者 Kubernetes 集群 (TKC 集群)等資源,不再需要管理員的介入。管理員只需要管理好 namespace 的資源策略,即使開(kāi)發(fā)團(tuán)隊(duì)在里面呼風(fēng)喚雨,翻天覆地,管理員也可高枕無(wú)憂(yōu)了。
內(nèi)置 Harbor Registry
Harbor Registry 中國(guó)用戶(hù)一定不會(huì)陌生,VwK 的鏡像倉(cāng)庫(kù)服務(wù)由 Harbor 開(kāi)源鏡項(xiàng)目提供,確保鏡像安全和提高性能。當(dāng)創(chuàng)建 namespace 時(shí),會(huì)同時(shí)建立一個(gè) Harbor 的項(xiàng)目與其對(duì)應(yīng),提供該 namespace 下的鏡像服務(wù)。這個(gè)設(shè)計(jì)理念我們團(tuán)隊(duì)已經(jīng)構(gòu)思很久,現(xiàn)在終于體現(xiàn)在 vSphere 里面了。
萬(wàn)事皆服務(wù)
Kubernetes 的聯(lián)合創(chuàng)始人 Joe Beda 說(shuō)過(guò)一句經(jīng)典的話(huà):“ Kubernetes 是平臺(tái)的平臺(tái),可以用來(lái)構(gòu)建新的平臺(tái)”。這句深刻地闡明了 Kubernetes 創(chuàng)建者對(duì)產(chǎn)品的定位和設(shè)計(jì)理念。Kubernetes 不僅可管理容器編排服務(wù),還可以通過(guò)擴(kuò)展,管理其他服務(wù),如數(shù)據(jù)庫(kù)、函數(shù)服務(wù)、人工智能服務(wù)等等。
這個(gè)理念在 vSphere with Kubernetes 里面得到了充分體現(xiàn):vSphere 平臺(tái)可以構(gòu)建各類(lèi)服務(wù)( XXX as a Service )。我們只需在主管集群里面部署特定服務(wù)的 Operator ,就可以用該 Operator 運(yùn)維相應(yīng)的服務(wù)。
主管集群成為控制平面,可管理各種服務(wù)
上面提到的 TKC 集群實(shí)質(zhì)上就是 Kubernetes as a Service,它的 Operator 已經(jīng)內(nèi)置在主管集群中。同樣的,我們也可以部署 VM as a Service, MySQL as a Service 等服務(wù)的 Operator,達(dá)到管理這些服務(wù)的目的。
Operator 是開(kāi)放架構(gòu),合作伙伴可以開(kāi)發(fā)出各類(lèi)功能的服務(wù),并且部署和運(yùn)行在主管集群中,這將使得圍繞 vSphere 的生態(tài)系統(tǒng)百花齊放,成為名副其實(shí)的“平臺(tái)的平臺(tái)”。
vSphere with Kubernetes 使 vSphere 蛻變成改變游戲規(guī)則的新一代現(xiàn)代化應(yīng)用平臺(tái),無(wú)疑是VMware Tanzu 組合中最閃亮的組件。
VMware 本次新產(chǎn)品發(fā)布還包括 Tanzu 套件,VCF 4等產(chǎn)品。大家可關(guān)注官網(wǎng),或者留意后續(xù)的文章介紹。
歡迎點(diǎn)“在看”或分享給感興趣的朋友。