本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。
Hi,大家好,歡迎大家和我一起學 K8S,這是系列第 12 篇。
上一篇我們了解了 Pod 的手動擴容和縮容,本篇來看看自動的方式。
K8S 作為一個集群式的管理軟件,自動化、智能化是免不了的功能。Google 在 K8S v1.1 版本中就加入了這個 Pod 橫向自動擴容的功能(Horizontal Pod Autoscaling,簡稱 HPA)。
HPA 與之前的 Deployment、Service 一樣,也屬於一種 K8S 資源對象。
HPA 的目標是希望通過追蹤集群中所有 Pod 的負載變化情況,來自動化地調整 Pod 的副本數,以此來滿足應用的需求和減少資源的浪費。
HAP 度量 Pod 負載變化情況的指標有兩種:
- CPU 利用率(CPUUtilizationPercentage)
- 自定義的度量指標,比如服務在每秒之內的請求數(TPS 或 QPS)
如何統計和查詢這些指標,要依托於一個組件——Heapster。Heapster 會監控一段時間內集群內所有 Pod 的 CPU 利用率的平均值或者其他自定義的值,在滿足條件時(比如 CPU 使用率超過 80% 或 降低到 10%)會將這些信息反饋給 HPA 控制器,HPA 控制器就根據 RC 或者 Deployment 的定義調整 Pod 的數量。
HPA 實現的方式有兩種:配置文件和命令行
- 配置文件
這種方式是通過定義 yaml 配置文件來創建 HPA,如下是基本定義:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
scaleTargetRef: # (1)
kind: Deployment
name: php-apache
minReplicas: 1 # (2)
maxReplicas: 10
targetAverageUtilization: 50 # (3)
文件 kind 類型是 HorizontalPodAutoscaler
,其中有 3 個地方需要額外注意下:
(1)scaleTargetRef
字段指定需要管理的 Deployment/RC 的名字,也就是提前需要存在一個 Deployment/RC 對象。
(2) minReplicas
和 maxReplicas
字段定義 Pod 可伸縮的數量范圍。這個例子中擴容最高不能超過 10 個,縮容最低不能少於 1 個。
(3)targetAverageUtilization
指定 CPU 使用率,也就是自動擴容和縮容的觸發條件,當 CPU 使用率超過 50% 時會觸發自動動態擴容的行為,當回落到 50% 以下時,又會觸發自動動態縮容的行為。
- 命令行
這種方式就是通過 kubectl autoscale
命令來實現創建 HPA 對象,實現自動擴容和縮容行為。比如和上面的例子等價的命令如下:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
通過參數來引入各個字段。
OK,本文就到這里,更多實踐的例子大家可以參考 K8S 官網。下文我們將會探索 K8S 的容錯機制。
我的公眾號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,后台回復 「1024」 即可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎大家關注。