如何使用Vcluster實(shí)現(xiàn)Kubernetes中的多租戶
譯文譯者 | 李睿
審校 | 重樓
Kubernetes徹底改變了組織部署和管理容器化應(yīng)用程序的方式,使跨集群編排和擴(kuò)展應(yīng)用程序變得更加容易。然而,在共享的Kubernetes集群上運(yùn)行多個異構(gòu)工作負(fù)載會帶來資源爭用、安全風(fēng)險、缺乏定制和復(fù)雜管理等挑戰(zhàn)。
以下幾種方法可以在Kubernetes中實(shí)現(xiàn)隔離和多租戶:
- Kubernetes命名空間:命名空間通過在不同用戶之間劃分集群資源來實(shí)現(xiàn)一定的隔離。但是,命名空間共享相同的物理基礎(chǔ)設(shè)施和內(nèi)核資源。因此,隔離和定制是有限制的。
- Kubernetes發(fā)行版:流行的Kubernetes發(fā)行版(例如Red Hat OpenShift和Rancher)支持Vcluster。它們更有效地利用了Kubernetes的原生功能,例如命名空間、RBAC和網(wǎng)絡(luò)策略。其他優(yōu)點(diǎn)包括集中控制平臺、預(yù)配置集群模板和易于使用的管理。
- 分層命名空間:在傳統(tǒng)的Kubernetes集群中,每個命名空間都是獨(dú)立的。這意味著一個名稱空間中的用戶和應(yīng)用程序不能訪問另一個名稱空間中的資源,除非他們具有明確的權(quán)限。分層命名空間通過允許在命名空間之間定義父子關(guān)系來解決這個問題。這意味著在父命名空間中擁有權(quán)限的用戶或應(yīng)用程序?qū)⒆詣釉谒凶用臻g中擁有權(quán)限。這使得跨多個名稱空間管理權(quán)限變得容易得多。
- Vcluster項(xiàng)目:Vcluster項(xiàng)目通過將物理Kubernetes集群劃分為多個獨(dú)立的軟件定義集群來解決這些痛點(diǎn)。Vcluster允許組織為開發(fā)團(tuán)隊(duì)、應(yīng)用程序和客戶提供專用的Kubernetes環(huán)境,這些環(huán)境具有有保證的資源、安全策略和自定義配置。本文將深入探討Vcluster、它的功能、不同的實(shí)現(xiàn)選項(xiàng)、用例和挑戰(zhàn),還將研究最大化利用率和簡化Vcluster管理的最佳實(shí)踐。
什么是Vcluster?
Vcluster是一個開源工具,允許用戶創(chuàng)建和管理虛擬Kubernetes集群。虛擬Kubernetes集群是一個功能齊全的Kubernetes集群,它運(yùn)行在另一個Kubernetes集群之上。Vcluster的工作原理是在底層Kubernetes集群的命名空間中創(chuàng)建一個Vcluster。Vcluster有自己的控制平臺,但它共享底層集群的工作節(jié)點(diǎn)和網(wǎng)絡(luò)。這使得Vcluster成為一個輕量級的解決方案,可以部署在任何Kubernetes集群上。
用戶在創(chuàng)建Vcluster時,可以指定希望Vcluster擁有的工作節(jié)點(diǎn)的數(shù)量。然后,Vcluster命令行將創(chuàng)建Vcluster,并在工作節(jié)點(diǎn)上啟動控制平臺pod。然后可以使用kubectl CLI將工作負(fù)載部署到Vcluster。
用戶可以在Vcluster網(wǎng)站上了解更多關(guān)于Vcluster的信息。
使用Vcluster的好處
(1)資源隔離
Vcluster允許用戶將中央集群的一部分資源(例如CPU、內(nèi)存和存儲)分配給單個Vcluster。當(dāng)多個團(tuán)隊(duì)共享相同的物理集群時,這可以防止“嘈雜鄰居”問題。可以確保關(guān)鍵工作負(fù)載不受干擾地獲得所需的資源。
(2)訪問控制
使用Vcluster,可以在Vcluster級別實(shí)施訪問策略,確保只有授權(quán)用戶才能訪問。例如,像金融應(yīng)用程序這樣的敏感工作負(fù)載可以在隔離的Vcluster中運(yùn)行。與命名空間級策略相比,限制訪問要簡單得多。
(3)定制
Vcluster允許針對各個團(tuán)隊(duì)的需求進(jìn)行廣泛的定制,并且可以定制不同的Kubernetes版本、網(wǎng)絡(luò)策略、進(jìn)入規(guī)則和資源配額。開發(fā)人員可以在不影響其他人的情況下修改他們的Vcluster。
(4)多租戶
組織必須經(jīng)常向多個內(nèi)部團(tuán)隊(duì)或外部客戶提供Kubernetes訪問。通過在同一物理集群中創(chuàng)建獨(dú)立的隔離環(huán)境,Vcluster使多租戶易于實(shí)現(xiàn)。
(5)容易擴(kuò)展
額外的Vcluster可以快速啟動或關(guān)閉,以處理動態(tài)工作負(fù)載和擴(kuò)展需求。可以立即提供新的開發(fā)和測試環(huán)境,而無需擴(kuò)展整個物理集群。
Vcluster之前的工作負(fù)載隔離方法
在Vcluster作為解決方案出現(xiàn)之前,組織已經(jīng)利用了各種Kubernetes的本地特性來實(shí)現(xiàn)一些工作負(fù)載隔離:
- 命名空間:命名空間在不同的團(tuán)隊(duì)或應(yīng)用程序之間隔離集群資源。它們通過資源配額和網(wǎng)絡(luò)策略提供基本的隔離。但是,沒有系統(tǒng)管理程序級別的隔離。
- 網(wǎng)絡(luò)策略:細(xì)粒度的網(wǎng)絡(luò)策略限制pod和命名空間之間的通信。這會在工作負(fù)載之間創(chuàng)建網(wǎng)絡(luò)分段。但是,仍然可能發(fā)生資源爭用。
- 污點(diǎn)和容忍度:對節(jié)點(diǎn)應(yīng)用污點(diǎn)可以防止指定的pod在節(jié)點(diǎn)上進(jìn)行調(diào)度。pod必須具有與污點(diǎn)相匹配的容忍度。這樣可以將pod限制為特定節(jié)點(diǎn)。
- 云虛擬網(wǎng)絡(luò):在公共云上,使用多個虛擬網(wǎng)絡(luò)有助于隔離Kubernetes集群流量。但是集群中的pod仍然可以通信。
- 第三方網(wǎng)絡(luò)插件:像Calico、Weave和Cilium這樣的CNI插件可以構(gòu)建覆蓋網(wǎng)絡(luò)和細(xì)粒度的網(wǎng)絡(luò)策略來隔離流量。
- 定制控制器:開發(fā)定制Kubernetes控制器允許以編程方式隔離資源。但這需要大量的編程專業(yè)知識。
Vcluster的演示
(1)安裝Vcluster命令行
要求:
- kubectl(通過kubectl版本檢查)
- helm v3(檢查helm版本)
- 一個可以訪問Kubernetes集群的工作kube-context(通過kubectl查詢名稱空間)。
使用以下命令下載基于arm64的Ubuntu機(jī)器的Vcluster CLI二進(jìn)制文件:
curl -L -o vcluster
"https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-arm64" && sudo install -c -m 0755 cluste /usr/local/bin && rm -f vcluster
bash
要確認(rèn)Vcluster CLI已成功安裝,通過以下方式測試:
vcluster --version
bash
要在其他服務(wù)器上安裝,可以參考以下鏈接。安裝Vcluster命令行。
(2)部署Vcluster
創(chuàng)建一個Vclustermy-first-Vcluster
vcluster create my-first-vcluster
bash
(3)連接到Vcluster
輸入以下命令連接Vcluster:
vcluster connect my-first-vcluster
bash
使用kubectl命令獲取連接的Vcluster中的名稱空間。
kubectl get namespaces
bash
將應(yīng)用程序部署到Vcluster
現(xiàn)在,在Vcluster中部署一個示例Nginx部署。創(chuàng)建一個部署:
kubectl create namespace demo-nginx
kubectl create deployment nginx-deployment -n demo-nginx --image=nginx
bash
這將把應(yīng)用程序隔離在Vcluster中的一個命名空間demo-nginx中。
可以檢查此演示部署是否會在Vcluster中創(chuàng)建pod:
kubectl get pods -n demo-nginx
bash
檢查主機(jī)集群部署
既然已經(jīng)確認(rèn)了Vcluster中的部署,現(xiàn)在嘗試檢查主機(jī)集群中的部署。
斷開與Vcluster的連接。
vcluster disconnect
bash
這將把kube場景移回主機(jī)集群。現(xiàn)在檢查主機(jī)集群中是否有可用的部署。
kubectl get deployments -n vcluster-my-first-vcluster
bash
在Vcluster-my-Vcluster命名空間中找不到任何資源。這是因?yàn)椴渴鸨桓綦x在其他集群無法訪問的Vcluster中。
現(xiàn)在使用以下命令檢查所有名稱空間中是否有pod正在運(yùn)行。
kubectl get pods -n vcluster-my-first-vcluster
bash
現(xiàn)在可以看到Nginx容器在Vcluster命名空間中運(yùn)行。
Vcluster用例
Vcluster通過在單個物理集群中提供隔離的和可定制的Kubernetes環(huán)境來支持幾個重要的用例。以下更詳細(xì)地探討其中的一些:
(1)開發(fā)和測試環(huán)境
為開發(fā)團(tuán)隊(duì)分配專用的Vcluster允許他們完全控制配置,而不會影響生產(chǎn)工作負(fù)載或其他開發(fā)人員。開發(fā)團(tuán)隊(duì)可以使用所需的Kubernetes版本、網(wǎng)絡(luò)策略、資源配額和訪問控制來定制他們的Vcluster。開發(fā)團(tuán)隊(duì)可以快速啟動和關(guān)閉Vcluster以測試不同的配置。由于Vcluster提供了有保證的計(jì)算和存儲資源,開發(fā)人員不需要開展競爭,它們也不會影響在其他Vcluster中運(yùn)行的應(yīng)用程序的性能。
(2)生產(chǎn)應(yīng)用程序隔離
企業(yè)應(yīng)用程序(例如ERP、CRM和財(cái)務(wù)系統(tǒng))需要可預(yù)測的性能、高可用性和嚴(yán)格的安全性。專用Vcluster允許這些生產(chǎn)工作負(fù)載不受其他應(yīng)用程序的影響。可以為關(guān)鍵任務(wù)應(yīng)用程序分配預(yù)留容量,以避免資源爭用。定制網(wǎng)絡(luò)策略保證隔離。集群還允許基于角色的粒度訪問控制,以滿足合規(guī)性需求。與過度配置大型集群以避免干擾不同,Vcluster以較低的成本提供有保證的資源。
(3)多租戶
服務(wù)提供商和擁有多個業(yè)務(wù)單元的企業(yè)通常需要向不同的內(nèi)部團(tuán)隊(duì)或外部客戶安全地提供Kubernetes訪問權(quán)限。通過為每個租戶創(chuàng)建單獨(dú)的自助服務(wù)環(huán)境并應(yīng)用適當(dāng)?shù)馁Y源限制和訪問策略,Vcluster簡化了多租戶。提供商可以通過采用額外的Vcluster輕松地為新客戶提供服務(wù)。這消除了“嘈雜鄰居”問題,并通過根據(jù)實(shí)際使用情況(而不是峰值需求)打包Vcluster來實(shí)現(xiàn)高密度的工作負(fù)載。
(4)合規(guī)性
金融和醫(yī)療保健等受到嚴(yán)格監(jiān)管的行業(yè)在數(shù)據(jù)隱私、地理位置和訪問控制方面有嚴(yán)格的安全性和合規(guī)性要求。具有內(nèi)部網(wǎng)絡(luò)分段、基于角色的訪問控制和資源隔離的專用Vcluster可以更輕松地與同一集群中的其他應(yīng)用程序一起安全地托管兼容的工作負(fù)載。
(5)臨時資源
Vcluster允許立即啟動臨時Kubernetes環(huán)境來處理以下用例:
- 測試集群升級:新的Kubernetes版本可以部署到較低的環(huán)境中,而不會停機(jī)或影響生產(chǎn)。
- 評估新的應(yīng)用程序:應(yīng)用程序可以部署到一次性的Vcluster中,而不是共享的開發(fā)集群,以防止沖突。
- 容量峰值:新的Vcluster為流量峰值提供突發(fā)容量,而不是過度配置整個集群。
- 特殊事件:可以為研討會、會議和其他事件臨時創(chuàng)建Vcluster。
一旦不再需要,就可以簡單地刪除這些Vcluster,而不會在集群上留下持久的足跡。
(6)工作負(fù)載整合
隨著組織擴(kuò)展Kubernetes的足跡,需要在不干擾現(xiàn)有應(yīng)用程序的情況下將多個集群合并到共享的基礎(chǔ)設(shè)施上。將應(yīng)用程序遷移到Vcluster提供了邏輯隔離和定制,允許它們與其他工作負(fù)載一起無縫運(yùn)行。這提高了利用率并減少了操作開銷。Vcluster允許企業(yè)IT在保持隔離的同時在整個組織中提供一致的Kubernetes平臺。總之,Vcluster是通過工作負(fù)載隔離、定制、安全性和密度來優(yōu)化Kubernetes環(huán)境的重要工具。用例強(qiáng)調(diào)了它們?nèi)绾问菇M織內(nèi)從開發(fā)人員到運(yùn)維人員再到業(yè)務(wù)部門的各種需求受益。
使用Vcluster的挑戰(zhàn)
雖然帶來了顯著的好處,但也有一些缺點(diǎn)需要權(quán)衡:
(1)復(fù)雜性
與單個大型Kubernetes集群相比,管理多個Vcluster(盡管規(guī)模較小)會帶來更多的操作開銷。其他任務(wù)包括:
- 提供和配置多個控制平臺。
- 在Vcluster之間一致地應(yīng)用安全策略和訪問控制。
- 在Vcluster之間進(jìn)行監(jiān)控和日志記錄。
- 為每個Vcluster維護(hù)指定的資源和容量。
例如,集群管理員必須在20個Vcluster中而不是單個集群中配置和更新RBAC策略。與單個集群的集中管理相比,這需要付出更多的努力。Kubernetes上的靜態(tài)IP地址和端口可能會導(dǎo)致沖突或錯誤。
(2)資源分配與管理
平衡Vcluster的資源消耗和性能可能很棘手,因?yàn)樗鼈兛赡苡胁煌男枨蠡蚱谕?/span>
例如,Vcluster可能需要根據(jù)工作負(fù)載擴(kuò)展或縮減,或者與其他Vcluster或名稱空間共享資源。應(yīng)用程序峰值需求的Vcluster大小可能在非峰值期間有多余的未使用容量,這些容量處于閑置狀態(tài),無法被其他Vcluster利用。
(3)有限的定制
定制Vcluster的能力因?qū)崿F(xiàn)而異。命名空間提供的靈活性最低,而集群API提供的靈活性最高。像OpenShift這樣的工具通過簡單性平衡了定制。例如,命名空間不能運(yùn)行不同的Kubernetes版本或網(wǎng)絡(luò)插件。Cluster API允許完全定制,但更復(fù)雜。
結(jié)論
Vcluster使Kubernetes用戶能夠在共享的物理集群中定制、隔離和擴(kuò)展工作負(fù)載。通過分配專用的控制平臺資源和訪問策略,Vcluster提供了強(qiáng)大的技術(shù)隔離。對于多租戶這樣的用例,Vcluster提供了更簡單、更安全的Kubernetes管理。
Vcluster還可以用于減少Kubernetes的成本開銷,并可用于臨時環(huán)境。像OpenShift、Rancher和Kubernetes Cluster API這樣的工具使得部署和管理Vcluster變得更加容易。隨著采用的增加,可以期待在Vcluster空間中有更多的創(chuàng)新,以進(jìn)一步簡化操作并最大化利用率。雖然Vcluster有一些缺點(diǎn),但對于許多組織來說,其帶來的好處顯然超過所增加的復(fù)雜性。
原文標(biāo)題:Multi-Tenancy in Kubernetes Using Vcluster,作者:Pavan Shiraguppi