Kubernetes:用虛擬集群節省成本
譯文【51CTO.com快譯】運行過有多個集群的Kubernetes的人都知道成本會迅速變高。無論您如何創建集群,添加的每個集群都會增加更多成本。一個明顯的成本是控制平面,但總會有更多成本,比如每個集群都需要的額外API服務器,它本身不使用資源,但耗用現有資源池中的資源。或者您可能需要為每個集群使用單獨的負載均衡系統,而不是在應用程序之間共享一個系統。
本文將更深入地探討這個話題,以及如何通過使用虛擬集群來減少或消除多個集群的額外成本。
虛擬集群是什么?
簡而言之,虛擬集群之于Kubernetes,如同虛擬機之于裸機主機。在一個集群中,您可以創建新的虛擬集群。與虛擬機一樣,您將獲得通過直接主機獲得的所有功能,不過有幾個限制。
深入探討限制之前,先看看虛擬集群是什么、它們如何工作。您先要了解為什么要使用虛擬集群。雖然因組織而異,但有幾個共同的原因。
使用虛擬集群的一大原因是,您已經在運行多個小型集群。許多組織在使用集群來改善開發者體驗。許多公司不是將Kubernetes鎖起來、成為開發者眼里的黑匣子,而是直接讓開發者接觸Kubernetes,這既為了提高開發者對技術的熟悉度,也為了提高開發者的速度,因為他們現在確切地知道應用程序會如何運行。
說到開發,集群就像開發者的機器一樣是個人的。您永遠不知道同事在做什么或在測試什么,所以要確保他們所做的一切并不影響到您。這是使用許多小集群的典例,但也是表明良好的開發者體驗如何抬高成本的例子。
虛擬集群是一種在確保成本低的同時保持開發者體驗佳、速度快的方法,下面有詳細介紹。您已了解了為什么需要它,接下來得了解其工作原理。下面,您可以看到流行工具 vcluster如何實現虛擬集群。
圖1
看看圖的底部,您可以看到Host Cluster。這是在EKS、GKE、AKS 或運行Kubernetes的其他任何地方運行的集群。這是一個標準集群。除此之外,您擁有kube-system命名空間。同樣,這是完全標準的,到目前為止還沒有任何虛擬的東西。當您向上移動一步、看到ns-1和ns-2命名空間,虛擬部分就出現了。這些位于kube-system命名空間內。
創建虛擬集群時,您可以使用現有的命名空間或創建新的命名空間。通常創建新的命名空間。這個命名空間將含有幾個pod。然后,這些pod含有一個您可以連接上去的“新”集群。隨后,這個“新”集群有自己的API服務器,這意味著您可以將其作為自己的集群與之交互。
您想要使用虛擬集群時,就像運行vcluster connect命令一樣簡單,這會導致兩個結果。它將開始端口轉發到虛擬集群內API服務器的端口,并創建kubeconfig.yaml文件。您可以將其與kubectl結合使用,在現在虛擬的集群中執行命令。(您在本文后面將獲得有關如何為自己設置vcluster的快速入門指南,因此現在無需操心。)
可以在此處閱讀有關虛擬集群細節的更多信息。
節省成本
使用虛擬集群節省成本來自多個因素,主要來自虛擬集群提供的早已經過深思熟慮的功能,而不是來自專門致力于降低成本。
首先可節省控制平面的成本。節省多少取決于運行多少個集群。如果您在GKE上運行,每個所替換的集群每月可節省73美元。除此之外,您還可以從以前分離但現在共享的資源節省資金。現在可以共享負載均衡系統之類的東西,而不是為每個集群付費。
第二個節省成本的好處來自能夠動態擴展Kubernetes集群。Kubernetes中的自動擴展絕非新功能。事實上,它是使用Kubernetes的最大賣點之一。然而,自動擴展實際使用的集群數量不是Kubernetes生來就有的。就虛擬集群而言,您可以在幾秒鐘內啟用和停用集群,讓每個開發者都可以擁有多個集群或沒有集群,取決于任何時間點的需求。
通過關閉未使用的集群來節省成本可能很有效,但也很難管理。如果旨在具有動態性,難度更大,比如開發者家時關閉,第二天回到辦公室時啟用。這存在幾個問題。首先,它可能很煩人。其次,毫無疑問開發者有時忘記關閉未使用的集群。開發者可能因軟件缺陷而分心,或者回家后忘了日常工作中的這一步。
不過這倒不是說不能有效地使用該原則。借助Loft的睡眠模式,可以將集群設成一段時間不使用后自動進入睡眠狀態。考慮到開發者每周平常工作40個小時,這么做最多可以節省76%的Kubernetes支出。
如果您想進一步了解虛擬集群的工作原理、它們帶來什么好處,可以訪問vcluster官網。
創建虛擬集群
您已意識到虛擬集群很有意義。下一步如何著手?下面是快速入門指南。如果需要更詳細的說明,可以查看官方文檔。不過事實上,創建vclusters 就像這里詳述的一樣簡單。
要做的第一件事是下載vcluster CLI:
- $ curl -s -L "https://github.com/loft-sh/vcluster/releases/latest" | \
- sed -nE 's!.*"([^"]*vcluster-linux-amd64)".*!https://github.com\1!p' | \
- xargs -n 1 curl -L -o vcluster && chmod +x vcluster && \
- sudo mv vcluster /usr/local/bin
CLI安裝完畢后,您可以使用vcluster create
- $ vcluster create vcluster-1 -n host-namespace-1
您現在有了自己的虛擬集群,可以通過運行vcluster connect vcluster-1 -n host-namespace-1連接到該集群。無需做另外的任何工作即可開始使用,此時您可以處理新創建的集群了。
結語
現在您了解了虛擬集群的大致情況、如何使用vcluster來實現虛擬集群,以及虛擬集群如何幫助降低成本。通過將所有小型集群整合成一個大型“主機”集群,您可以節省每個控制平面的成本。除此之外,還可以節省更多的成本,因為現在更多的資源全面共享,而不是分散。
將上述內容與Loft的睡眠模式相結合,有望節省當前Kubernetes成本的三分之二以上。
原文標題:Kubernetes: Saving Cost with Virtual Clusters,作者:Kasper Siig
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】