容器水平伸縮
云容器引擎支持在控制臺界面上快速創建支持HPA的應用,實現容器資源的彈性伸縮。您也可通過定義HPA(Horizontal Pod Autoscaling)的YAML來進行配置。
背景信息
從v1.18開始,K8s v2beta2 API允許通過HPA的behavior字段配置擴縮行為。在behavior字段中的scaleUp和scaleDown分別指定擴容和縮容行為。當您在使用HPA時,希望只進行擴容或者只進行縮容的Pod伸縮,則可以通過開啟指標伸縮,單擊禁止縮容或者禁止擴容來實現。
默認值:均不禁止
禁止擴容:selectPolicy的值Disabled會關閉給定方向的擴容。因此使用以下策略,將會阻止擴容。
behavior:
scaleUp:
selectPolicy: Disabled禁用縮容:selectPolicy的值Disabled會關閉給定方向的縮容。因此使用以下策略,將會阻止縮容。
behavior:
scaleDown:
selectPolicy: Disabled伸縮規則
HPA總體支持兩種度量指標,一種為資源度量指標,默認情況下僅支持cpu、內存這兩種資源指標,它不僅支持資源百分比也支持平均值;另一種為自定義度量指標,包含Pod度量跟Object度量兩大類。
資源度量指標
以CPU為例,配置示意如下:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50自定義度量指標
Pod度量是從某一方面的指標描述Pod, 取多個pod的平均值, 它與資源度量指標非常相像,但僅支持平均值類型,示意如下:
type: Pods
pods:
metric:
name: packets-per-second
target:
type: AverageValue
averageValue: 1kObject度量用于描述在相同命名空間除Pod以外的其他Kubernetes對象,如Service,配置示意如下:
type: Object
object:
metric:
name: requests-per-second
describedObject:
apiVersion: v1
kind: Service
name: main-route
target:
type: Value
value: 2k通過控制臺創建HPA
創建負載同時創建HPA
登錄云容器引擎管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇工作負載 > 無狀態。
在無狀態頁面選擇指標伸縮。
填寫伸縮規則跟伸縮范圍等信息,然后單擊下一步。
為已有應用開啟HPA
登錄云容器引擎管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇工作負載 > 無狀態。
在無狀態列表頁面選擇對應應用的操作欄中的更多—>水平伸縮。
在創建對話框中,設置伸縮的配置。
單擊確定。
通過kubectl命令創建HPA
您也可通過編排模板來手動創建HPA,并將其綁定到要伸縮的Deployment對象上,通過kubectl命令實現容器自動伸縮配置。
下面針對一個Nginx應用進行舉例。
1、創建并復制以下內容到nginx.yml中。Deployment的編排模板如下。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
ports:
- containerPort: 80
resources:
requests: ##必須設置,不然HPA無法運行。
cpu: 500m2、執行以下命令,創建Nginx應用。
kubectl create -f nginx.yml
3、創建HPA。通過scaleTargetRef設置當前HPA綁定的對象,在本例中綁定名叫nginx的Deployment。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 504、創建好HPA后,再次執行 kubectl describe hpa <hpa的名稱>命令 看到HPA正常運行。
</hpa的名稱>