ACK Serverless叢集基於阿里雲Elastic Container Instance服務提供了強大的Auto Scaling能力。依照制定的策略,ACK Serverless叢集的算力可以在短時間內增長數倍,或在算力需求回落時快速縮容以節省成本。本文介紹如何直接控制叢集中的Pod數量或配置基於負載的自動調整策略。
完成本教程預計產生0.5 USD左右的費用(假設資源運行0.5 小時)。請在完成教程後及時釋放資源。
前提條件
已參考快速部署基於Nginx的Web應用完成Web應用的部署。
步驟一:安裝metrics-server組件
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
單擊上方的日誌與監控頁簽,找到名為metrics-server的卡片,單擊右下方的安裝,並等待安裝完成。
步驟二:實現應用擴縮容
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊名稱為“nginx-deploy”的無狀態應用,進入應用詳細資料頁面。
單擊右上方的伸縮,在伸縮面板中將所需容器組數量修改為10,然後單擊確定。
重新整理頁面後,可以觀察到9個新的Pod被建立,表示擴容成功。
重複步驟4,將Pod數量修改為1。
重新整理頁面後,可以觀察到Pod數量回落至1個,表示縮容成功。
kubectl
執行以下命令,查看應用的詳細資料。
kubectl get deploy預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 9m32s執行以下命令,將應用內的Pod擴容到10個。
kubectl scale deploy nginx-deploy --replicas=10預期輸出:
deployment.extensions/nginx-deploy scaled執行以下命令,查看Pod。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-8jlz2 1/1 Running 0 39s nginx-deploy-55d8dcf755-9jbzk 1/1 Running 0 39s nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 38s nginx-deploy-55d8dcf755-bxk8n 1/1 Running 0 38s nginx-deploy-55d8dcf755-cn6x9 1/1 Running 0 38s nginx-deploy-55d8dcf755-jsqjn 1/1 Running 0 38s nginx-deploy-55d8dcf755-lhp8l 1/1 Running 0 38s nginx-deploy-55d8dcf755-r2clb 1/1 Running 0 38s nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 10m nginx-deploy-55d8dcf755-xspnt 1/1 Running 0 38s執行以下命令,將應用內的Pod縮容到1個。
kubectl scale deploy nginx-deploy --replicas=1預期輸出:
deployment.extensions/nginx-deploy scaled執行以下命令,查看Pod。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 1m
步驟三:配置基於負載的自動調整
控制台
在應用詳情頁面,單擊容器伸縮頁簽。
單擊指標伸縮(HPA)處對應的建立。
在建立面板中填入以下樣本值,然後單擊確定。
配置項
樣本值
名稱
nginx-deploy
指標
單擊添加,然後填入以下指標:
監控項:CPU使用量
閾值:20%
最大容器數量
10
最小容器數量
1
kubectl
建立一個新的指標伸縮策略。
執行此策略時,應用中至少有1個Pod,至多有10個Pod,而應用會通過伸縮的方式儘可能將容器的平均CPU佔用保持在20%左右。
kubectl autoscale deployment nginx-deploy --cpu-percent=20 --min=1 --max=10預期輸出:
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled查看指標伸縮策略的資訊。
kubectl get hpa預期輸出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-deploy Deployment/nginx-deploy 0%/20% 1 10 1 35s
步驟四(可選):測試自動調整策略
可通過向叢集內的容器增加負載以觀察自動調整策略的表現。請參考以下步驟為容器增加負載。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在容器組頁面,單擊測試容器右側操作列中的終端,選擇測試容器進入命令列頁面。
以下命令會使容器運行一個無限迴圈,使CPU負載提升到最大。請選擇測試容器執行,否則可能對業務有損。
while : ; do : ; done返回控制台,在第一個容器組的監控列,單擊
表徵圖,觀察容器的CPU負載。等待幾分鐘,重新整理頁面,可以看到已建立4個新的Pod。
此時,一個Pod的CPU負載達到100%,而其餘4個Pod的CPU負載約為0%。此時,本應用中所有Pod的平均CPU負載達到了約20%,叢集擴容完成,進入穩定點。
回到第3步中開啟的容器終端頁面,輸入Ctrl+C結束迴圈,使得容器CPU負載迴歸正常。
說明如關閉了之前開啟的容器終端頁面,可使用
top命令查看進程,並使用kill -9 <PID>命令結束CPU負載達到100%的進程。再次返回控制台,等待5-10分鐘後重新整理頁面,觀察Pod數量回落至1個。
步驟五:釋放資源
如果無需繼續使用叢集,請按照以下操作釋放資源:
刪除已建立的應用和服務
在Container Service管理主控台的叢集列表頁面,單擊目的地組群名稱。
在左側導覽列選擇工作負載 > 無狀態,然後選中已建立的Nginx應用,單擊大量刪除,並按介面提示完成後續確認操作。
刪除叢集
ACK Serverless叢集目前不收取叢集管理費用,但在使用ACK Serverless叢集過程中用到的其他阿里雲雲產品資源(如ECI),您需要按照各雲產品規定的計費規則,為您使用的資源付費,費用由各雲產品收取。完成教程後,請參考以下情境處理叢集:
如果不再繼續使用叢集,請在Container Service管理主控台的叢集列表頁面,找到目的地組群並單擊對應的,在彈出面板閱讀提示資訊,選中要同時刪除的相關雲產品資源,然後單擊刪除,並按頁面提示完成後續操作。更多資訊,請參見刪除叢集。
如果需要繼續使用叢集,請及時為阿里雲帳號儲值,確保餘額充足。如需瞭解使用ACK Serverless叢集Pro版過程中用到的其他阿里雲雲產品資源的計費資訊,請參見雲產品資源計費。