譯自:Performance evaluation of the autoscaling strategies vertical and horizontal using Kubernetes
可延伸的應用可能會採用水平或垂直擴縮容來動態調整雲端資源。為了幫助選擇最佳策略,本文主要對比了kubernetes中的水平和垂直擴縮容。通過對 Web 應用程式進行綜合負載測量實驗,結果表明水平擴縮容的效率更高,對負載變化的響應更快,且對應用程式響應時間的影響更小。
雲服務的負載可能會隨時間變動,為了實現可延伸,需要依據特定的指標(如CPU)來採取自動擴容策略,以此來擴大應用的處理能力。為此,我們需要均衡應用的QoS和雲基礎設施的開銷,即量入為出。
當前有兩種擴縮容型別:水平,即服務的數目會視負載的情況增加或減少;垂直,即服務的資源(CPU或記憶體)會視負載的情況增加或減少。但即使有了這兩種方法,也沒有明確定義的標準來決定使用哪種方法。此外,在效能和成本效益方面,還缺乏與垂直自動擴縮容相關的分析,以及如何與水平自動擴縮容進行比較。
因此,為了評估這兩種方法的效能,我們使用kubernetes做了一個測量實驗,並藉助了一個壓測工具,該工具可以以一種受控的方式向一個"busy-wait"應用傳送請求,並根據負載發生變化後自動擴縮容決策的時間、每個決策上請求的 CPU 的容量以及應用響應時間的影響來對這些機制進行評估。
k8s是一個基於Borg的開源專案,聚焦容器編排,並允許在叢集中執行容器應用,同時簡化了不同環境(生產、開發等)的設定。總之,k8s提供了一組物理和虛擬機器器(節點),其中,master負責控制和給worker節點分配任務。在k8s中,pod是節點上最小的可分配單元,一個pod可以打包一個或多個容器,並定義執行規則。需要注意的是,要確保節點能夠有足夠的資源去執行對應的pod。
為了在k8s中建立一個物件,需要建立一個包含所需規格的組態檔。K8s的物件可以用於不同的目的,如監控、網路設定、擴縮容等。因此,需要根據不同的目的來選擇不同的型別。此處使用的型別是:
水平自動擴縮容的目的是降低或增加叢集中的Pods數目,以便有效地利用資源並滿足應用的需求。這種擴縮容方式圍繞某些指標,如CPU、記憶體、自定義指標或外部指標(基於Kubernetes外部的應用負載)。[2] [3]
為了使用水平擴縮容,需要建立一個HorizontalPodAutoscaler
組態檔,並定義一個CPU百分比使用限制,如果Pod的利用率達到該限制,則會建立出更多的副本。HPA每15s(可變)會校驗是否需要建立新的Pods。
HPA 背後的演演算法基於 HPA 所watch的所有Pods的當前利用率的平均值(Uₐ),期望利用率(U