EAS のヘルスチェックは、Kubernetes のプローブメカニズムを使用して、異常なコンテナを自動的に検出および復旧し、正常なインスタンスのみがトラフィックを受信するようにします。
制限事項
ヘルスチェックは、ヘルスチェックロジックを含むカスタムイメージを使用してサービスをデプロイする場合にのみ利用できます。
仕組み
EAS のヘルスチェックは、Kubernetes のプローブメカニズムを使用してサービスの正常性を検出および管理します。EAS は、次のプローブタイプとヘルスチェック方法をサポートしています。
サポートされるプローブタイプ:
プローブタイプ
説明
Liveness プローブ
コンテナが実行中であるかどうかを判断します。プローブが異常なコンテナを検出した場合、kubelet はそのコンテナを強制終了し、再起動ポリシーを適用します。コンテナに Liveness プローブが設定されていない場合、kubelet はその Liveness プローブの結果を常に Success として扱います。
Readiness プローブ
コンテナがリクエストを処理する準備ができているかどうかを判断します。Ready 状態の Pod のみがトラフィックを受信します。Service とその Endpoints の間の関連付けは、Pod の準備状況に基づいて管理されます:
Pod の Ready 状態が False の場合、Kubernetes は Service に関連付けられた Endpoint リストから Pod の IP を削除します。
Pod の Ready 状態が True に変更されると、Kubernetes は Pod の IP を Endpoint リストに再度追加します。
Startup プローブ
コンテナの起動が完了したタイミングを判断します。このプローブは、起動が遅いコンテナに使用することで、初期化が完了する前に Liveness プローブや Readiness プローブが実行され、コンテナが早期に強制終了されるのを防ぎます。
サポートされるヘルスチェック方法:
ヘルスチェック方法
説明
http_getHTTP GET リクエストを送信して、サービスの正常性と可用性をチェックします。レスポンスのステータスコードが 2xx または 3xx の範囲内である場合、チェックは成功とみなされます。
tcp_socketTCP 接続を試みて、サービスの正常性と可用性をチェックします。
execコンテナ内で指定されたコマンドを実行します。チェック結果は、コマンドの終了コードによって決まります。
カスタムイメージの準備
予測ロジックを Web フレームワークでラップします。この例では Flask を使用します:
import json
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods = ['GET','POST'])
def process_handle_func():
"""
実際の要件に基づいてリクエストボディを解析します
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
実際の要件に基づいてレスポンスを設定します
"""
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 設定ファイルで指定されたポートと一致する必要があります。
"""
app.run(host='0.0.0.0', port=8000)Dockerfile を作成して予測コードをコピーし、必要なパッケージをインストールします:
# Python の例
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install <packages>
CMD ["/xxx/python", "/eas/xxx/app.py"] カスタムイメージをビルドする手順については、「Container Registry Enterprise Edition インスタンスでのイメージのビルド」をご参照ください。イメージビルドのガイドラインについては、「カスタムイメージのデプロイ」をご確認ください。または、コードを NAS ファイルシステムまたは Git リポジトリに保存し、デプロイ時にストレージをマウントすることもできます (「ストレージのマウント」をご参照ください) 。このトピックでは、最初の方法を使用して、「サービスデプロイ時のヘルスチェックの設定」でヘルスチェックの設定方法を説明します。
サービスデプロイ時のヘルスチェックの設定
カスタムデプロイでのヘルスチェックの設定
PAI コンソールにログインし、ページ上部で対象リージョンを選択し、右側で対象ワークスペースを選択し、[Go to EAS] をクリックします。
オンライン推論サービス タブで モデルのアップロードとデプロイメント をクリックします。カスタムモデルのデプロイ セクションで、カスタムデプロイメント をクリックします。
環境コンテキスト セクションで、次の主要なパラメーターを設定します。その他のパラメーターについては、「カスタムデプロイ」をご参照ください。
パラメーター
説明
イメージ設定
イメージアドレス を選択し、テキストフィールドにカスタムイメージのアドレスを入力します。例:
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz。コマンドの実行
コンテナのエントリポイントコマンドです。複雑なスクリプトは許可されず、単一のコマンドのみがサポートされます。コマンドは Dockerfile で定義されたものと一致する必要があります。例:
/data/eas/ENV/bin/python /data/eas/app.py。起動後にコンテナがリッスンするポート番号を入力します。例: 8000。
重要EAS エンジンは固定ポート 8080 と 9090 をリッスンします。コンテナでこれらのポートを使用しないでください。
ポートは、実行コマンドで参照されるxxx.py ファイルで設定されたものと一致する必要があります。
サービス機能の設定 セクションで、安定保証 パネルを展開し、ヘルスチェック トグルをオンにして、以下で説明するパラメーターを設定し、OK をクリックします。
デプロイメント をクリックします。
JSON デプロイでのヘルスチェックの設定
service.json という名前の 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":1,
"failure_threshold":4
},
"command":"/data/eas/ENV/bin/python /data/eas/app1.py",
"port":8000
}
]
}次の表に主要なパラメーターを示します。その他のパラメーターについては、「JSON デプロイ」をご参照ください。
パラメーター | 説明 | |
image | モデルサービスをデプロイするために使用されるカスタムイメージのアドレスです。 EAS はパブリックネットワークアクセスを許可していません。代わりに VPC 内部のレジストリアドレスを使用してください。例: | |
env | name | 実行時にコンテナに渡される環境変数の名前です。 |
value | 環境変数の値です。 | |
command | コンテナのエントリポイントコマンドです。複雑なスクリプトは許可されず、単一のコマンドのみがサポートされます。例: | |
port | コンテナ内のプロセスがリッスンするネットワークポートです。例: 8000。 重要 ポートは、command フィールドの xxx.py ファイルで設定されたポートと一致する必要があります。 | |
liveness_check 説明 ヘルスチェックのプローブタイプとして Liveness プローブを指定します。これを health_check (Readiness プローブ) または startup_check (Startup プローブ) として設定することもできます。 | http_get | ポート 8000 に HTTP GET リクエストを送信します。サブパラメーター:
さらに 2 つのヘルスチェック方法がサポートされています:
|
initial_delay_seconds | コンテナが起動してから最初のヘルスチェックが実行されるまでの遅延時間です。デフォルトは 0 秒です。 | |
period_seconds | ヘルスチェックの実行頻度です。デフォルトは 10 秒です。頻度が高いと Pod へのオーバーヘッドが増加し、頻度が低いとコンテナエラーの検出が遅れます。 | |
timeout_seconds | 各ヘルスチェックのタイムアウト時間です。デフォルトは 1 秒です。この時間を超えたチェックは失敗とみなされます。 | |
success_threshold | 以前に異常だったコンテナを正常とマークするために必要な連続した成功チェックの回数です。Readiness プローブではデフォルトで 3、Liveness プローブと Startup プローブではデフォルトで 1 です。 | |
failure_threshold | 以前に正常だったコンテナを異常とマークするために必要な連続した失敗チェックの回数です。デフォルトは 1 です。 | |