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次。 | |