k8s彈性伸縮概念以及測試用例

2022-07-01 03:51:09 字數 2970 閱讀 4376

本文原文出處:

彈性伸縮式k8s中的一大亮點功能,當負載大的時候,你可以對應用進行擴容,提公升pod的副本數來應對大量的流量,當負載小的時候可以對應用進行縮容,以避免資源浪費。也可以讓應用自動的進行擴容和縮容,這一功能有用。例如當微博出現了乙個話題時,這個時候人們都去訪問,此時他的伺服器將無法處理大量的流量訪問,這個時候就需要擴容,而當這個話題不在新鮮時,人們的訪問流量也就是降下來了,那麼就需要對伺服器進行縮容處理,來自動適應流量需求。

scale命令:擴容或縮容 deployment、replicaset、replication controller或 job 中pod數量

# 語法

kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=count (-f filename | type name)

# 將名為foo中的pod副本數設定為3。

kubectl scale --replicas=3 rs/foo

kubectl scale deploy/nginx --replicas=30

# 將由「foo.yaml」配置檔案中指定的資源物件和名稱標識的pod資源副本設為3

kubectl scale --replicas=3 -f foo.yaml

# 如果當前副本數為2,則將其擴充套件至3。

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

# 設定多個rc中pod副本數量

kubectl scale --replicas=5 rc/foo rc/bar rc/baz

k8s提供了scale和autoscale來進行擴容和縮容。

現在對go-deployment進行擴容,結果如圖

當訪問量減少了就進行縮容

現在我不想手動的進行擴容和縮容了,我想實現讓它當訪問流量大的時候自動擴容,當訪問流量小的時候自動縮容。這個時候autoscale出現了,利用他我們就可以實現自動擴容和縮容。

# 語法

kubectl autoscale (-f filename | type name | type/name) [--min=minpods] --max=maxpods [--cpu-percent=cpu] [flags]

# 使用 deployment 「foo」設定,使用預設的自動伸縮策略,指定目標cpu使用率,使其pod數量在2到10之間

kubectl autoscale deployment foo --min=2 --max=10

# 使用rc「foo」設定,使其pod的數量介於1和5之間,cpu使用率維持在80%

kubectl autoscale rc foo --max=5 --cpu-percent=80

到目前為止,k8s一共提供了2個不同維度的autoscaler。如下圖:

k8s把彈性伸縮分為兩類:

對應兩種伸縮策略:

垂直伸縮

縮容擴容的基本流程為三大步驟:

1.採集監控指標

2.聚合監控指標,判斷是否需要執行縮擴容

3.執行縮容擴容操作

hpa水平縮容擴容架構圖

hpa的監控指標

根據官方文件的描述,hpa是使用巡檢(control loop)的機制來採集pod資源使用情況的,預設採集間隔為15s,可以通過controller manager(master節點上的乙個程序)的--horizontal-pod-autoscaler-sync-period引數來手動控制。

目前hpa預設採集指標的實現是heapster,它主要採集cpu的使用率;beta版本也支援自定義的監控指標採集,但尚不穩定,不推薦使用

因此可以簡單認為,hpa就是通過cpu的使用率作為監控指標的。

聚合演算法

採集到cpu指標後,k8s通過下面的公式來判斷需要擴容多少個pod

desiredreplicas = ceil[currentreplicas * ( currentmetricvalue / desiredmetricvalue )]
ceil表示向上取整,舉個實際例子,假設某個服務執行了4個pod,當前的cpu使用率為50%,預期的cpu使用率為25%,那麼滿足預期的實際pod數量就是4 * (50% / 25%) = 8個,即需要將pod容量擴大一倍,增加4個pod來滿足需求。

當然上述的指標並不是絕對精確的,首先,k8s會盡可能的讓指標往期望值靠近,而不是完全相等,其次hpa設定了乙個容忍度(tolerance)的概念,允許指標在一定範圍內偏離期望值,預設是0.1,這就意味著如果你設定排程策略為cpu預期使用率 = 50%,實際的排程策略會是小於45%或者大於55%進行縮擴容,hpa會盡力把指標控制在這個範圍內(容忍度可以通過--horizontal-pod-autoscaler-tolerance來調整)

需要注意的是:

K8S 彈性伸縮

kubernetes有乙個hpa horizontal pod autoscaler 的資源,可以實現基於cpu使用率的pod自動伸縮的功能。hpa基於master node上的kube controller manager服務啟動引數 horizontal pod autoscaler sync ...

K8s概念指南

cluster 集群是指由 k8s使用一些列的物理機 虛擬機器和其他基礎資源來執行你的應用程式 node 乙個 node 就是乙個執行著 k8s的物理機或虛擬機器,平切 pod可以在其上面被排程 pod 乙個 pod對應乙個由相關容器和卷組成的容器組 label 乙個 label 是乙個被附加到資源...

k8s 集群概念

kubernetes是google開源的容器集群管理系統,提 用部署 維護 擴充套件機制等功能,利用kubernetes能方便管理跨集群執行容器化的應用,簡稱 k8s k與s之間有8個字母 二 基本概念 pod 若干相關容器的組合,pod包含的容器執行在同一host上,這些容器使用相同的網路命令空間...