EAS提供了健全狀態檢查功能,該功能採用Kubernetes的健全狀態檢查機制,可以自動檢測並恢複失敗的容器,確保只有健康的執行個體接收流量並避免向不健康的執行個體分配資源。本文為您介紹如何配置健全狀態檢查功能。
使用限制
僅當您建立了包含健全狀態檢查邏輯的自訂鏡像,並使用該鏡像部署服務時,才能使用健全狀態檢查功能。
原理介紹
EAS的健全狀態檢查功能採用Kubernetes的健全狀態檢查機制,通過探針技術和健全狀態檢查方法來檢測和管理服務的健康情況和可用性。其中:
支援的探針類型:
探針類型
說明
存活探針(Liveness Probes)
用於判斷容器是否存活,如果存活探針探測到容器不健康,kubelet將kill掉該容器,並根據容器的重啟策略做相應的處理。如果一個容器不包含存活探針,那麼kubelet認為該容器的存活探針返回的值永遠是Success,即容器存活。
就緒探針(Readiness Probes)
用於判斷Container Service是否可用,達到Ready狀態的Pod才可以接收請求。Service與Endpoint的關聯關係也根據Pod的Ready狀態設定:
當Pod的Ready狀態為False時,K8s將Pod IP從Service關聯的後端Endpoint列表中隔離。
等待Pod的Ready狀態變更為True時,K8s將Pod IP重新加入到Service關聯的Endpoint列表中。
啟動探針(Startup Probes)
用於判斷容器何時開始啟動,可以控制容器在啟動成功後再進行存活性和就緒性檢查。可以使用該探針對慢啟動容器進行存活性檢測,避免它們在啟動運行之前被kill掉。
支援的健康檢測方法:
健康檢測方法
說明
http_get通過HTTP GET請求檢查服務健康和存活狀況,並依據響應狀態代碼確定成功與否。
tcp_socket通過嘗試開啟一個TCP串連來檢查服務健康和存活狀況。
exec在容器內執行指定命令,並依據命令的退出碼確定探測是否成功。
準備自訂鏡像
您可以選用Web架構,對預測邏輯進行封裝。以Flask架構為例,app.py樣本內容如下:
import json
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods = ['GET','POST'])
def process_handle_func():
"""
根據實際需求解析request body
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
根據實際需求設定response
"""
response = make_response(res)
response.status_code = 200
return response
def process(data):
"""
您的預測邏輯
"""
return 'result'
if __name__ == '__main__':
"""
注意這裡的host必須指定為0.0.0.0, 否則服務部署時健全狀態檢查不能通過,
port必須和部署服務的JSON設定檔中指定的port保持一致。
"""
app.run(host='0.0.0.0', port=8000)您可以編寫簡單的Dockerfile將預測代碼進行拷貝,並安裝所需要的包,Dockerfile樣本如下:
# 以Python為例
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install 需要的包
CMD ["/xxx/python", "/eas/xxx/app.py"] 構建自訂鏡像的具體操作步驟,請參見使用企業版執行個體構建鏡像。您需要參考自訂鏡像,瞭解更多關於構建自訂鏡像時需要注意的細節。另一種方式是將代碼儲存在NAS或Git倉庫中,部署時通過儲存掛載的方式將其接入服務執行個體,詳情請參見儲存掛載。本文使用第一種方式為您介紹如何在部署服務時配置健全狀態檢查功能。
部署服務時配置健全狀態檢查功能
自訂部署配置健全狀態檢查功能
登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS。
在推理服务頁簽,單擊部署服务。然後在自定义模型部署地區,單擊自定义部署。
在环境信息地區,配置以下關鍵參數,其他參數配置說明,請參見自訂部署。
參數
描述
镜像配置
選擇镜像地址,並在文字框中輸入已準備好的自訂鏡像地址,例如
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz。运行命令
鏡像的入口命令,只支援單一命令形式,不支援複雜指令碼,需要與Dockerfile中的命令保持一致。例如
/data/eas/ENV/bin/python /data/eas/app.py。同時您需要輸入連接埠號碼,即鏡像啟動後監聽的本地HTTP連接埠,例如8000。
重要由於EAS引擎監聽固定的8080/9090連接埠,因此容器連接埠需要避開8080/9090連接埠。
該連接埠一定要和運行命令中的xxx.py檔案配置的連接埠保持一致。
健康检查
開啟健康检查開關,配置相關參數後,單擊确定。具體參數配置說明,請參見健全狀態檢查參數表。
說明允許添加最多三個健全狀態檢查項,每個健全狀態檢查項可配置一種探針類型,且不能重複。
參數配置完成後,單擊部署。
JSON部署配置健全狀態檢查功能
建立JSON格式的檔案,命名為service.json,檔案內容樣本如下。
{
"metadata": {
"name": "test",
"instance": 1,
"enable_webservice": true
},
"cloud": {
"computing": {
"instance_type": "ml.gu7i.c16m60.1-gu30"
}
},
"containers": [
{
"image":"registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
"env":[
{
"name":"VAR_NAME",
"value":"var_value"
}
],
"liveness_check":{
"http_get":{
"path":"/",
"port":8000
},
"initial_delay_seconds":3,
"period_seconds":3,
"timeout_seconds":1,
"success_threshold":2,
"failure_threshold":4
},
"command":"/data/eas/ENV/bin/python /data/eas/app1.py",
"port":8000
}
]
}其中關鍵配置說明如下。其他參數配置說明,請參見JSON部署。
參數 | 描述 | |
image | 用於部署模型服務的自訂鏡像地址。 由於EAS不開放公網存取權限,因此您需要使用VPC內網Registry地址進行部署。例如 | |
env | name | 鏡像執行時的環境變數名稱。 |
value | 鏡像執行時的環境變數取值。 | |
comand | 鏡像的入口命令,只支援單一命令形式,不支援複雜指令碼,例如 | |
port | 鏡像中進程監聽的網路連接埠號碼。例如8000。 重要 該連接埠一定要和command中的xxx.py檔案配置的連接埠保持一致。 | |
liveness_check 說明 表示健全狀態檢查配置使用的探針類型為存活探針。您還可以將其配置為health_check(就緒探針)或startup_check(啟動探針)。 | http_get | 表示使用HTTP Get檢查方法請求訪問8000連接埠。其中:
另外還支援使用以下兩種健全狀態檢查方法:
|
initial_delay_seconds | 健全狀態檢查延遲時間長度,容器啟動後多久開始進行第一次健全狀態檢查工作,預設為0秒。 | |
period_seconds | 健全狀態檢查頻率,預設為10秒。頻率過高會對Pod帶來較大的額外開銷,頻率過低則無法及時反映容器產生的錯誤。 | |
timeout_seconds | 健全狀態檢查的逾時時間長度,預設1秒。逾時則健全狀態檢查將被認定為失敗。 | |
success_threshold | 處於成功狀態時,健全狀態檢查連續失敗幾次,可被認定為失敗,就緒探針預設為3次,存活探針和啟動探針預設為1次。 | |
failure_threshold | 處於失敗狀態時,健全狀態檢查連續成功幾次,可被認定為成功,預設1次。 | |