阿里雲Container Service支援在控制台介面上快速建立支援HPA的應用,實現容器資源的Auto Scaling。您也可通過定義HPA(Horizontal Pod Autoscaling)的yaml配置來進行配置。
前提條件
- 您已成功建立一個Kubernetes叢集,參見建立Kubernetes叢集。
- 您已成功串連到Kubernetes叢集的Master節點。
方法1 通過Container Service控制台建立HPA應用
在阿里雲Container Service中,已經整合了HPA,開發人員可以非常簡單地通過Container Service控制台進行建立。
- 登入 Container Service管理主控台。
- 在Kubernetes菜單下,單擊左側導覽列中的使用鏡像建立。 ,單擊右上方的
- 填寫應用的名稱,設定應用部署叢集和命名空間,單擊下一步。
- 首先進行應用設定,設定副本數量,然後勾選開啟自動調整,設定伸縮的條件和配置。
- 指標:支援CPU和記憶體,需要和設定的所需資源類型相同。
- 觸發條件:資源使用率的百分比,超過該使用量,容器開始擴容。
- 最大容器數量:該Deployment可擴容的容器數量上限。
- 最小容器數量:該Deployment可縮容的容器數量下限。
- 進行容器設定,選擇鏡像,並設定所需的資源。然後單擊下一步
说明 您必須為Deployment設定所需資源,否則無法進行容器自動調整。
- 進入訪問設定頁面,本例中不進行訪問設定,單擊建立。
此時一個支援HPA的Deployment就已經建立完畢,您可在部署的詳情中查看伸縮組資訊。
- 在實際使用環境中,應用會根據CPU負載進行伸縮。您也可在測試環境中驗證Auto Scaling,通過給Pod進行CPU壓測,可以發現Pod在半分鐘內即可完成水平的擴充。
方法2 通過kubectl命令進行使用
您也可通過編排模板來手動建立HPA,並將其綁定到要伸縮的Deployment對象上,通過kubectl命令實現容器自動調整配置。
下面針對一個Nginx應用進行舉例,Deployment的編排模板如下,執行kubectl create -f xxx.yml命令進行建立。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
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: 500m
然後建立HPA,通過scaleTargetRef設定當前HPA綁定的對象,在本例中綁定是名叫nginx的Deployment。
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
scaleTargetRef: ##綁定名為nginx的Deployment
apiVersion: apps/v1beta2
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
说明 HPA需要給Pod設定request資源,如果沒有request資源,HPA不會運行。
Warning FailedGetResourceMetric 2m (x6 over 4m) horizontal-pod-autoscaler missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7
Warning FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5
建立好HPA後,再次執行kubectl describe hpa [name]命令,可以看到如下資訊,則表示HPA已經正常運行。
Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
此時當Nginx的Pod的利用率超過本例中設定的50%利用率時,則會進行水平擴容,低於50%的時候會進行縮容。