藉助阿里雲Knative的HPA(Horizontal Pod Autoscaler)彈效能力,您可以在Knative Service中設定HPA指標的類型和閾值,實現在突發高負載的情境下資源的自動擴縮容。
前提條件
部署Knative步驟一:部署Knative Service
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面的服務管理頁簽下,選擇命名空間為default,然後單擊使用模板建立,將以下YAML樣本粘貼至模板,最後單擊建立。
建立一個名為
helloworld-go-hpa
的服務,以下為配置樣本。重要請將下方代碼中的
{REGION-ID}
替換為您叢集所在地區,以確保可以正確地訪問和使用鏡像。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-hpa # 服務名稱。 spec: template: metadata: labels: app: helloworld-go-hpa annotations: autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev" # 指定彈性外掛程式為HPA。 autoscaling.knative.dev/metric: "cpu" # HPA的指標類型可以設定為CPU和Memory。此處以CPU為例。 autoscaling.knative.dev/target: "75" # 設定HPA CPU指標的閾值。根據該閾值,Knative的HPA將自動調整副本數。 autoscaling.knative.dev/minScale: "1" # 設定彈性策略執行個體數的最小值。 autoscaling.knative.dev/maxScale: "10" # 設定彈性策略執行個體數的最大值。 spec: containers: - image: registry.vpc.{REGION-ID}.aliyuncs.com/knative-samples/helloworld-go:160e4dc8 # {REGION-ID}為對應叢集所在的地區,如cn-hangzhou。 resources: requests: cpu: '200m'
執行以下命令,檢查服務是否正常運行。
kubectl get ksvc
預期輸出類似如下結果:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go-hpa http://helloworld-go-hpa.default.example.com helloworld-go-hpa-00001 helloworld-go-hpa-00001 True
如果
READY
列為True
,表明服務正常運行。如果READY
列為False
,請確認是否已按照文檔正確地部署服務。
步驟二:基於請求實現自動彈性擴縮容
安裝Hey壓測工具。
關於Hey壓測工具的詳細資料,請參見Hey。
執行以下命令,類比50個並發使用者在30秒內對服務發起訪問,從而進行壓測。
hey -z 30s -c 50 -host "helloworld-go.default.example.com" "http://121.199.XXX.XXX?sleep=100&prime=10000&bloat=5" # 121.199.XXX.XXX為網關IP。
在壓測的同時,執行以下命令即時查看Pod擴縮容情況。
kubectl get pods --watch
Pod擴縮容預期輸出如下結果:
NAME READY STATUS RESTARTS AGE # 該Pod正在運行,且容器已經就緒。 helloworld-go-hpa-00001-deployment-67cc8f979b-fxfl5 2/2 Running 0 101m # Pod擴容為4個,且狀態為0/2 Pending,這意味著容器正在等待調度並分配資源。 helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 Pending 0 0s # 4個Pod的狀態變為0/2 ContainerCreating,表示容器正在建立。 helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 ContainerCreating 0 0s # 4個Pod的狀態變為1/2 Running和2/2 Running,表示其中一個或兩個容器已經成功建立並運行。 helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 1/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 2/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 1/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 2/2 Running 0 1s
輸出結果表明,Knative具有基於請求實現自動彈性擴縮容的能力。表現為當系統負載增加,需要更多的Pod來處理請求時,Pod數從最初的1個擴充到了4個,以提高系統的處理能力和輸送量。