使用搶占式ECI實(shí)例運(yùn)行Job任務(wù)
ECI支持搶占式實(shí)例,對于短時間運(yùn)行的Job任務(wù),以及部分?jǐn)U展性和容錯率高的無狀態(tài)應(yīng)用(例如可彈性伸縮的Web站點(diǎn)服務(wù)),使用搶占式實(shí)例可以有效地節(jié)約實(shí)例使用成本。本文以Job任務(wù)為例,演示如何創(chuàng)建搶占式實(shí)例類型的ECI Pod來運(yùn)行Job任務(wù)。
背景信息
使用搶占式實(shí)例前,請了解以下相關(guān)信息:
計(jì)費(fèi)方式
搶占式實(shí)例的市場價(jià)格隨供需變化而浮動,您需要在創(chuàng)建搶占式實(shí)例時指定出價(jià)模式,當(dāng)指定實(shí)例規(guī)格的實(shí)時市場價(jià)格低于出價(jià)且?guī)齑娉渥銜r,就能成功創(chuàng)建搶占式實(shí)例。創(chuàng)建成功后,在保護(hù)期(默認(rèn)1小時)內(nèi)按照成交時的市場價(jià)格計(jì)費(fèi)。超過保護(hù)期后,按照實(shí)時的市場價(jià)格計(jì)費(fèi)。
回收機(jī)制
超過保護(hù)期后,系統(tǒng)每隔5分鐘將自動檢測一次實(shí)例規(guī)格的市場價(jià)格和庫存。如果某一時刻的市場價(jià)格高于出價(jià)或?qū)嵗?guī)格庫存不足,搶占式實(shí)例會被釋放。在釋放前約5分鐘,ECI會通過Kubernetes Events事件通知的方式告知您。在此期間,您可以做一定的處理來確保業(yè)務(wù)不受實(shí)例釋放所影響(如切斷該實(shí)例的業(yè)務(wù)入口流量)。
創(chuàng)建方式
支持指定ECS規(guī)格,或者指定vCPU和內(nèi)存來創(chuàng)建搶占式ECI實(shí)例。
配置方法
您可以在Pod metadata中添加
k8s.aliyun.com/eci-spot-strategy
的Annotation來創(chuàng)建搶占式實(shí)例。該Annotation用于設(shè)置搶占式實(shí)例的出價(jià)策略,取值如下:
SpotAsPriceGo:系統(tǒng)自動出價(jià),跟隨當(dāng)前市場實(shí)際價(jià)格。
SpotWithPriceLimit:自定義設(shè)置搶占實(shí)例價(jià)格上限。如果選擇該策略,需添加
k8s.aliyun.com/eci-spot-price-limit
的Annotation來設(shè)置搶占式實(shí)例的每小時價(jià)格上限。
更多信息,請參見創(chuàng)建搶占式實(shí)例。
操作步驟
在Kubernetes中,Job負(fù)責(zé)批量處理短暫的一次性任務(wù)。使用搶占式實(shí)例運(yùn)行Job任務(wù)的配置示例如下:
準(zhǔn)備Job的配置文件,命名為spot_job.yaml。
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: annotations: k8s.aliyun.com/eci-use-specs: ecs.c5.large,2-4Gi # 指定多個規(guī)格,提升實(shí)例創(chuàng)建成功率 k8s.aliyun.com/eci-spot-strategy: SpotAsPriceGo # 系統(tǒng)自動出價(jià),跟隨當(dāng)前市場實(shí)際價(jià)格 spec: containers: - name: pi image: registry-vpc.cn-beijing.aliyuncs.com/ostest/perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never
創(chuàng)建Job。
kubectl create -f spot_job.yaml
查看Pod運(yùn)行情況。
kubectl get pod
如果Job任務(wù)正在運(yùn)行,對應(yīng)Pod狀態(tài)為Running。
NAME READY STATUS RESTARTS AGE pi-frmr8 1/1 Running 0 35s
如果Job任務(wù)正常運(yùn)行完成,對應(yīng)Pod狀態(tài)會變更為Completed。
NAME READY STATUS RESTARTS AGE pi-frmr8 0/1 Completed 0 2h
如果Job任務(wù)還未運(yùn)行完成,對應(yīng)Pod由于搶占式實(shí)例的回收機(jī)制被釋放了,Kubernetes中的Job Controller會自動創(chuàng)建新的Pod來繼續(xù)運(yùn)行任務(wù)。
此時仍會保留舊的Pod,該P(yáng)od狀態(tài)會變更為BidFailed。
說明搶占式實(shí)例創(chuàng)建成功后,在保護(hù)期內(nèi)可以正常運(yùn)行。超出保護(hù)期后,如果市場價(jià)格高于出價(jià)或者資源庫存不足,搶占式實(shí)例會被釋放。搶占式實(shí)例在釋放前約5分鐘,會產(chǎn)生預(yù)釋放事件(SpotToBeReleased),您可以查看事件信息獲取。更多信息,請參見釋放說明。
NAME READY STATUS RESTARTS AGE pi-frmr8 1/1 BidFailed 0 4h53m pi-kp5zx 1/1 Running 0 3h45m