Kubernetes 缺少的多租戶功能,你可以通過(guò)這些方式實(shí)現(xiàn)
虛擬控制平面
另一種多租戶的實(shí)現(xiàn)方案是為每個(gè)租戶提供一個(gè)獨(dú)立的虛擬控制平面,以徹底隔離租戶的資源。虛擬控制平面的實(shí)現(xiàn)方式通常是為每個(gè)租戶運(yùn)行一套獨(dú)立的 apiserver,同時(shí)利用 controller 將租戶 apiserver 中的資源同步到原 Kubernetes 集群中。每個(gè)租戶只能訪問(wèn)自己對(duì)應(yīng)的 apiserver,而原 Kubernetes 集群的 apiserver 則通常不對(duì)外訪問(wèn)。這類方案的代價(jià)是額外的 apiserver 的開銷,但能夠獲得更為徹底的控制平面隔離。結(jié)合數(shù)據(jù)平面的隔離技術(shù),虛擬控制平面可以實(shí)現(xiàn)更為徹底和安全的多租戶方案。此類方案以 vcluster 項(xiàng)目為代表。
如何選擇?
選擇按 namespace 劃分租戶還是使用虛擬控制平面應(yīng)取決于多租戶的使用場(chǎng)景。通常來(lái)說(shuō),按 namespace 劃分租戶的隔離性和自由度會(huì)略有欠缺,但優(yōu)勢(shì)在于輕量。對(duì)于多團(tuán)隊(duì)共享使用的場(chǎng)景,按 namespace 劃分租戶較為合適。而對(duì)于多客戶共享使用的場(chǎng)景,選擇虛擬控制平面通常能夠提供更好的隔離保障。多集群方案
從上文可以看出,共享使用 Kubernetes 集群并非易事;Kubernetes 集群并非天然地支持多租戶,僅僅是提供了一些細(xì)粒度上的功能支持。要想讓 Kubernetes 支持多租戶場(chǎng)景需要其他項(xiàng)目的支持,以同時(shí)在控制平面和數(shù)據(jù)平面上實(shí)現(xiàn)租戶之間的隔離。這使得整個(gè)方案存在不小的學(xué)習(xí)和適應(yīng)成本。因此,目前有許多用戶采用的不是共享集群,而是多集群的方案。相比共享集群,多集群方案有利有弊:優(yōu)勢(shì)是隔離性強(qiáng)、邊界清晰,劣勢(shì)是資源開銷以及運(yùn)維成本較高。由于每個(gè)集群需要獨(dú)立的控制平面和工作節(jié)點(diǎn),為了提高物理集群的利用率,通常會(huì)選擇在虛擬機(jī)上搭建 Kubernetes 集群。然而傳統(tǒng)的虛擬化產(chǎn)品因?yàn)樾枰櫦案鼮閺V泛的場(chǎng)景,所以功能上往往大而全,并且售價(jià)高昂,并非支撐虛擬化 Kubernetes 集群的最佳選擇。基于此,可以認(rèn)為,支撐虛擬化 Kubernetes 集群理想的虛擬化平臺(tái)應(yīng)該具備以下特點(diǎn):-
輕量。不需要顧及到桌面虛擬化等場(chǎng)景,只需專注于服務(wù)器虛擬化,減去一切不必要的功能和開銷。
-
高效。全面使用 virtio 這樣的半虛擬化 I/O 技術(shù),提高效率。
-
安全。最大程度減少主機(jī)受到攻擊的可能。
-
Kubernetes 原生。虛擬化平臺(tái)本身最好是 Kubernetes 集群,以降低學(xué)習(xí)和運(yùn)維成本。

此外,針對(duì)在 Virtink 上創(chuàng)建和運(yùn)維虛擬化 Kubernetes 集群的需要,SmartX 開發(fā)了 knest 命令行工具來(lái)幫助用戶一鍵式創(chuàng)建集群以及對(duì)集群進(jìn)行擴(kuò)縮容管理。在 Virtink 集群上創(chuàng)建一個(gè)虛擬化 Kubernetes 集群僅需執(zhí)行“knest create”命令即可實(shí)現(xiàn)。對(duì)集群進(jìn)行后續(xù)的擴(kuò)縮容也可以通過(guò) knest 工具進(jìn)行一鍵式操作。總? ?結(jié) Kubernetes 并未內(nèi)建多租戶功能,但提供了一些細(xì)粒度的功能支持。利用這些功能,結(jié)合一些第三方工具,能夠?qū)崿F(xiàn)多租戶共享使用集群。但同時(shí)這些工具也帶來(lái)了額外的學(xué)習(xí)和運(yùn)維成本。在這個(gè)情況下,多個(gè)虛擬化集群依然是很多用戶選擇的方案。然而傳統(tǒng)的虛擬化平臺(tái)在效率和成本上并非此場(chǎng)景的最佳選擇。SmartX Virtink 開源虛擬化引擎基于高效、安全的 Cloud Hypervisor,提供 Kubernetes 上編排輕量虛擬機(jī)的能力,最大程度降低虛擬化 Kubernetes 集群的資源開銷。配套提供的 knest 命令行工具則支持集群一鍵式創(chuàng)建和運(yùn)維,有效降低多個(gè)集群的運(yùn)維成本 相關(guān)鏈接:
-
Kubernetes-sigs / hierarchical-namespaces https://github.com/kubernetes-sigs/hierarchical-namespaces
-
clastix / capsule https://github.com/clastix/capsule
-
loft-sh / kiosk https://github.com/loft-sh/kiosk
-
loft-sh / vcluster https://github.com/loft-sh/vcluster
-
smartxworks / virtink https://github.com/smartxworks/virtink
-
smartxworks / knest https://github.com/smartxworks/knest
------ 我們創(chuàng)建了一個(gè)高質(zhì)量的技術(shù)交流群,與優(yōu)秀的人在一起,自己也會(huì)優(yōu)秀起來(lái),趕緊點(diǎn)擊加群,享受一起成長(zhǎng)的快樂。另外,如果你最近想跳槽的話,年前我花了2周時(shí)間收集了一波大廠面經(jīng),節(jié)后準(zhǔn)備跳槽的可以點(diǎn)擊這里領(lǐng)取!
推薦閱讀
-
比996還狠!為了不被裁員,Twitter員工每天狂干12小時(shí)!
-
別再自己瞎寫工具類了,Spring Boot 內(nèi)置工具類應(yīng)有盡有!
-
關(guān)于 “ React 和 Vue 該用哪個(gè)” 我真的栓 Q
你好,我是程序猿DD,10年開發(fā)老司機(jī)、阿里云MVP、騰訊云TVP、出過(guò)書創(chuàng)過(guò)業(yè)、國(guó)企4年互聯(lián)網(wǎng)6年 。 從普通開發(fā)到架構(gòu)師、再到合伙人。一路過(guò)來(lái),給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅(jiān)持下來(lái),多思考、少抱怨、勤動(dòng)手,就很容易實(shí)現(xiàn)彎道超車! 所以,不要問(wèn)我現(xiàn)在干什么是否來(lái)得及。如果你看好一個(gè)事情,一定是堅(jiān)持了才能看到希望,而不是看到希望才去堅(jiān)持。相信我,只要堅(jiān)持下來(lái),你一定比現(xiàn)在更好! 如果你還沒什么方向,可以先關(guān)注我, 這里會(huì)經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。
點(diǎn)擊 領(lǐng)取2022最新10000T學(xué)習(xí)資料