如何在 Kubernetes 上擴展微服務

使用微服務可以對應用程序的性能進行更精細的控制。微服務有許多擴展選項,本文概述了一些使用 Kubernetes 擴展微服務的簡單技術。

作者:Ashley Davis  翻譯:Bach(才雲)

校對:星空下的文仔(才雲) 來源:K8sMeetup 社區

基於微服務的應用程序可以以多種方式擴展。我們可以通過擴展以支持更大的團隊開發,或者來獲得更好的性能。這樣,應用程序可以具有更高的容量,並能處理更大的工作負載。

**使用微服務可以對應用程序的性能進行更精細的控制。**我們可以輕鬆把握微服務的性能,以發現在需求高峯時性能不佳、工作過度或過載的服務。圖 1 展示瞭如何使用 Kubernetes 儀表盤來了解微服務的 CPU 和內存使用情況。

圖 1:在 Kubernetes 儀表盤中查看微服務的 CPU 和內存使用情況

對於微服務,我們有許多擴展選項,本文中將概述一些使用 Kubernetes 擴展微服務的簡單技術

  1. 垂直擴展整個集羣

  2. 水平擴展整個集羣

  3. 水平擴展單個微服務

  4. 彈性伸縮整個集羣

  5. 彈性伸縮單個微服務

擴展通常需要對集羣進行冒險的配置更改。因此,我們不要直接對生產集羣進行這些更改,最好是創建一個新集羣,並使用藍綠部署或類似的部署策略,以避免更改基礎結構帶來的風險。

垂直擴展集羣

隨着應用程序的增長,我們可能會遇到這樣的情況:集羣沒有足夠的計算資源、內存或存儲來運行我們的應用程序。隨着我們添加新的微服務,最終使集羣中的節點達到最大化。

此時,我們必須增加集羣的可用資源總量。在 Kubernetes 集羣上擴展微服務時,我們可以使用垂直或水平擴展。圖 2 展示了 Kubernetes 的垂直擴展效果。

圖 2:通過增加虛擬機(VM)的大小垂直擴展集羣

我們通過增加節點池中虛擬機(VM)的規模來擴展集羣。在此示例中,我們增加了三個小型 VM 的大小,因此現在有了三個大型 VM。我們沒有更改虛擬機的數量,我們只是增加了它們的大小,即垂直擴展了我們的 VM。

圖 3:使用 Terraform 垂直擴展集羣

圖 3 是從 Terraform 代碼中摘錄的,該代碼在 Azure 上配置了一個集羣,將 vm_size 字段從 Standard_B2ms 更改爲 Standard_B4ms。這將升級 Kubernetes 節點池中每個 VM 的大小。現在,我們有四個 CPU,而不是兩個 CPU(每個 VM 一個)。作爲此更改的一部分,VM 的內存和硬盤驅動器也增加了。

**集羣中仍然只有一個 VM,但 VM 的大小增加了。**在此示例中,擴展集羣就像更改代碼一樣簡單。這就是基礎架構即代碼的力量,這是將基礎架構配置存儲爲代碼,並通過提交觸發連續交付(CD)流水線的代碼更改來對基礎架構進行更改。

水平擴展集羣

除了垂直擴展集羣外,我們還可以水平擴展集羣。VM 可以保持相同的大小,只需添加更多 VM。

通過將更多的虛擬機添加到集羣中,我們可以將應用程序的負載分散到更多的計算機上。圖 4 展示瞭如何將集羣從三個 VM 擴展到六個 VM。每個 VM 的大小保持不變,但是通過擁有更多的 VM,我們可以獲得更多的計算能力。

圖 4:通過增加虛擬機數量來水平擴展集羣

圖 5 是 Terraform 代碼的一部分,該代碼將更多的 VM 添加到節點池中。回到圖 3,我們將 node_count 設置爲 1,但是在這裏我們將其更改爲 6。請注意,我們將 vm_size 字段還原爲較小的 Standard_B2ms。在此示例中,我們增加了虛擬機的數量,但沒有增加它們的大小。

圖 5:使用 Terraform 對集羣進行水平伸縮

通常,水平伸縮會更好,因爲它比垂直伸縮便宜,使用許多較小的 VM 會比使用較少但較大且價格更高的 VM 便宜。

水平擴展單個微服務

假設我們的集羣已擴展到足夠大的規模,可以託管所有具有良好性能的微服務,那麼當單個微服務過載時,我們該怎麼辦?

**每當微服務成爲性能瓶頸時,我們就可以水平擴展它以在多個實例上分配其負載。**如圖 6 所示:

圖 6:通過複製水平擴展微服務

這樣可以有效地爲這個特定的微服務提供更多的計算資源、內存和存儲,以便它處理更大的工作負載。

同樣,我們可以使用代碼進行此更改。我們可以通過在 Kubernetes deployment 或 Pod 的規範中設置副本字段來實現此目的,如圖 7 所示:

圖 7:使用 Terraform 水平擴展微服務

**我們不僅可以擴展單個微服務以提高性能,還可以水平擴展微服務以實現冗餘,從而創建更具容錯能力的應用程序。**通過具有多個實例,每當一個實例發生故障時,就有其他實例來承擔負載。這可以允許微服務的失敗實例重新啓動並重新開始工作。

集羣的彈性伸縮

現在我們可以考慮彈性伸縮,這是一種可以自動動態地伸縮集羣以滿足不同級別需求的技術。

每當需求低時,Kubernetes 可以自動釋放不需要的資源。在需求高峯時,將分配新資源來滿足增加的工作負載。這樣可以節省大量成本,因爲在任何給定時刻,我們只爲處理應用程序工作負載所需的資源付費。

我們可以在集羣級別使用彈性伸縮來自動增長接近其資源極限的集羣。圖 8 顯示瞭如何啓用 Kubernetes 自動伸縮器並設置節點池的最小和最大大小。

圖 8:使用 Terraform 爲集羣啓用彈性伸縮

單個微服務的彈性伸縮

我們還可以爲單個微服務啓用彈性伸縮。圖 9 是 Terraform 代碼的示例,該示例爲微服務提供了 “突發式” 功能。微服務的副本數量會動態伸縮,以適應微服務的各種工作負載。

圖 9:使用 Terraform 爲微服務啓用彈性伸縮

要了解有關 Kubernetes 中 Pod 自動伸縮的更多信息,請參閱 Kubernetes docs:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

原文鏈接:https://thenewstack.io/scaling-microservices-on-kubernetes/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/96W4kmaZUw0jxjZtM4RM0Q