BestEffort算力質(zhì)量概述
ACS支持創(chuàng)建使用BestEffort算力質(zhì)量的實(shí)例(本文中簡稱為BestEffort QoS類型實(shí)例)。對于短時(shí)間運(yùn)行的Job任務(wù),以及部分?jǐn)U展性和容錯(cuò)率高的無狀態(tài)應(yīng)用,使用BestEffort QoS類型實(shí)例可以有效地節(jié)約實(shí)例使用成本。本文介紹如何在ACS中創(chuàng)建BestEffort QoS類型實(shí)例。
應(yīng)用場景
BestEffort QoS類型實(shí)例最適合應(yīng)用于無狀態(tài)、可彈性伸縮、高度分布式且對實(shí)時(shí)性無特殊要求的應(yīng)用場景。例如可彈性伸縮的Web站點(diǎn)服務(wù)、圖像渲染、音視頻轉(zhuǎn)碼、大數(shù)據(jù)分析和大規(guī)模并行計(jì)算等。使用BestEffort QoS類型實(shí)例可以極大降低計(jì)算資源的使用成本。
一般來說,不建議在BestEffort QoS類型實(shí)例上運(yùn)行有狀態(tài)應(yīng)用,因?yàn)锽estEffort QoS類型實(shí)例有較大的性能擾動,且可被搶占和驅(qū)逐。但是在一些特殊情況下,如果能夠滿足以下條件,則可以考慮在BestEffort QoS類型實(shí)例上運(yùn)行有狀態(tài)應(yīng)用:
具有快速重啟能力
使用高可用架構(gòu)
除非滿足上述所有條件,否則仍建議將有狀態(tài)應(yīng)用部署到資源有保證的實(shí)例上,以確保數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性。
前提條件
創(chuàng)建BestEffort實(shí)例
登錄容器計(jì)算服務(wù)控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群頁面,單擊目標(biāo)集群ID,然后在左側(cè)導(dǎo)航欄,選擇
。在無狀態(tài)頁面,單擊使用鏡像創(chuàng)建。
在創(chuàng)建頁面依次填寫應(yīng)用名稱、副本數(shù)量、類型、標(biāo)簽(可選)、注解(可選)。
實(shí)例類型選擇通用型,QoS類型選擇best-effort。
后續(xù)步驟,請參見創(chuàng)建無狀態(tài)工作負(fù)載Deployment。
釋放說明
BestEffort QoS類型實(shí)例創(chuàng)建成功后,如果遇到資源庫存不足的情況,實(shí)例會被回收釋放。您可以通過以下方式了解BestEffort QoS類型實(shí)例的釋放情況。
預(yù)釋放事件
BestEffort QoS類型實(shí)例在釋放前約5分鐘,會觸發(fā)KubernetesEvents的BestEffortToBeReleased事件。您可以在日志服務(wù)控制臺配置BestEffortToBeReleased事件的監(jiān)控告警,具體操作請參見創(chuàng)建并使用K8s事件中心。
收到BestEffort實(shí)例即將被釋放的事件通知后,您可以充分利用這段時(shí)間進(jìn)行必要的處理,例如檢查可能受影響的業(yè)務(wù)范圍、遷移重要的工作負(fù)載到其他節(jié)點(diǎn)等容災(zāi)和恢復(fù)措施來確保業(yè)務(wù)不受實(shí)例釋放所影響。
通過kubectl describe
命令查看Pod詳細(xì)信息,在返回信息的Events中可以看到預(yù)釋放事件。
kubectl describe pod nginx-best-effort
示例輸出:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BestEffortToBeReleased 3m32s kubelet Best Effort Instance will be released
通過kubectl get events命令查看事件信息,在返回信息中可以看到預(yù)釋放事件。
kubectl get events --field-selector=reason=BestEffortToBeReleased
示例輸出:
LAST SEEN TYPE REASON OBJECT MESSAGE
3m39s Warning BestEffortToBeReleased pod/pi-frmr8 Best Effort Instance will be released
釋放后Pod狀態(tài)
BestEffort QoS類型實(shí)例釋放后,實(shí)例信息仍會保留,狀態(tài)變更為Failed,F(xiàn)ailed原因?yàn)镻reempted。
通過kubectl get pod命令查看Pod信息,在返回信息中可以看到Pod狀態(tài)已變更。
kubectl get pod nginx-best-effort
示例輸出:
NAME READY STATUS RESTARTS AGE
nginx-best-effort 0/0 Preempted 0 3h5m
通過kubectl describe命令查看Pod詳細(xì)信息,在返回信息中可以看到Pod狀態(tài)信息。
kubectl describe pod nginx-best-effort
示例輸出:
Status: Failed
Reason: Preempted
Message: The pod is best-effort instance, and have been released at 2024-04-08T12:36Z
最佳實(shí)踐
BestEffort算力質(zhì)量實(shí)例為動態(tài)庫存,強(qiáng)烈建議您在生產(chǎn)環(huán)境配置庫存優(yōu)先調(diào)度策略,在庫存不足時(shí)由平臺自動切換至默認(rèn)型。更多信息,請參見自定義資源調(diào)度策略。以下以Job為例,配置庫存優(yōu)先調(diào)度策略。
使用以下內(nèi)容,創(chuàng)建一個(gè)Job。
apiVersion: batch/v1 kind: Job metadata: name: demo-job namespace: default spec: parallelism: 3 template: metadata: labels: app: stress # 關(guān)聯(lián)ResourcePolicy中spec.selector定義的配置 spec: containers: - name: demo-job image: registry.cn-hangzhou.aliyuncs.com/acs/stress:v1.0.4 args: - '30s' command: - sleep resources: requests: cpu: "1" memory: "1Gi" limits: cpu: "1" memory: "1Gi" restartPolicy: Never backoffLimit: 4
使用以下內(nèi)容,創(chuàng)建ResourcePolicy,優(yōu)先使用best-effort算力質(zhì)量的實(shí)例,庫存不足時(shí)則申請default型。
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: rp-demo namespace: default spec: # 符合該selector條件的Pod將遵循此調(diào)度策略 selector: app: stress # 以下為資源配置,用于描述調(diào)度順序 units: - resource: acs # resource類型必須指定為acs podLabels: # 優(yōu)先申請"general-purpose"+"best-effort"類型的資源 alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: best-effort - resource: acs # 前者庫存不足時(shí),再申請"general-purpose"+"default"類型的資源 podLabels: alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default