Elastic Algorithm Service (EAS) は、Kubernetesのヘルスチェックメカニズムを使用するヘルスチェック機能を提供します。 ヘルスチェック機能は、故障したコンテナを自動的に検出して回復し、正常なインスタンスのみがトラフィックを受信し、リソースが異常なインスタンスに割り当てられないようにします。 このトピックでは、ヘルスチェック機能を設定する方法について説明します。
制限事項
ヘルスチェックロジックを含むカスタムイメージを使用してサービスをデプロイする場合にのみ、ヘルスチェック機能を設定できます。
仕組み
EASのヘルスチェック機能は、Kubernetesのヘルスチェックメカニズムを使用します。 この機能を使用すると、プローブ技術とヘルスチェック方法を使用して、サービスのヘルスステータスと可用性を検出および管理できます。 次の表に、プローブの種類とヘルスチェック方法を示します。
プローブの種類
プローブタイプ
説明
Livenessプローブ
kubeletは、livenessプローブを使用してコンテナが生きているかどうかを確認し、異常なコンテナを強制終了し、再起動ポリシーに基づいて後続の操作を実行します。 コンテナがlivenessプローブによってプローブされていない場合、kubeletはlivenessプローブがコンテナのSuccessを返すと見なします。 これは、コンテナが生きていることを示します。
準備プローブ
Readinessプローブを使用して、コンテナがリクエストを受信できるかどうかを確認します。 Ready状態のポッドのみがリクエストを受信できます。 サービスとエンドポイントの関係は、ポッドの準備ができているかどうかによって異なります。
Readyフィールドの値がFalseの場合、Kubernetesはサービスに関連付けられているエンドポイントのリストからポッドのIPアドレスを削除します。
Readyフィールドの値がTrueに変更されると、Kubernetesはサービスに関連付けられているエンドポイントのリストにポッドのIPアドレスを追加します。
スタートアッププローブ
kubeletはスタートアッププローブを使用して、コンテナがいつ起動されるかを学習します。 起動プローブを使用すると、コンテナの起動後にのみ、livenessプローブとreadinessプローブがコンテナに送信されるようにすることができます。 スタートアッププローブを使用して、開始速度が遅いコンテナに対してライブネスチェックを実行できます。 このように、コンテナは、コンテナが発射される前にkubeletによって殺されない。
ヘルスチェックの方法
ヘルスチェック方法
説明
http_get
HTTP GETリクエストを送信して、サービスのヘルスステータスと有効性を確認し、返されたステータスコードに基づいてプローブが成功したかどうかを確認します。
tcp_ソケット
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():
"""
Parse the request body based on your business requirements.
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
Configure the response based on your business requirements.
"""
response = make_response(res)
response.status_code = 200
return response
def process(data):
"""
Your prediction logic
"""
return 'result'
if __name__ == '__main__':
"""
You must set the host parameter to 0.0.0.0. Otherwise, the health check may fail during service deployment.
The port number that you specify for the port parameter must be the same as the port number specified in the JSON configuration file of the service that you deploy.
"""
app.run(host='0.0.0.0', port=8000)
単純なDockerfileを作成して、予測コードをファイルにコピーし、必要なパッケージをインストールできます。 次のサンプルコードは、Dockerfileの内容の例を示しています。
# In this example, Python is used.
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install Name of the package that you require
CMD ["/xxx/python", "/eas/xxx/app.py"]
カスタムイメージの作成方法については、「Container Registry Enterprise Editionインスタンスを使用したイメージの構築」をご参照ください。 カスタムイメージの詳細については、「カスタムイメージを使用したモデルサービスの展開」をご参照ください。 コードをFile Storage NAS (NAS) またはGitリポジトリに保存し、サービスのデプロイ中にサービスインスタンスにストレージをマウントしてインスタンスにコードを書き込むこともできます。 詳細については、「ストレージのサービスへのマウント」をご参照ください。 次のセクションでは、予測コードをDockerfileにコピーして、サービスのデプロイ時にヘルスチェック機能を設定する方法について説明します。
サービス展開中のヘルスチェック機能の設定
PAIコンソールでのヘルスチェック機能の設定
PAI コンソールにログインします。 ページ上部のリージョンを選択します。 次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) の入力] をクリックします。
[サービスのデプロイ] をクリックします。 [カスタムモデルのデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページで、次の主要なパラメーターを設定します。 その他のパラメーターについては、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
[環境情報] セクションで、パラメーターを設定します。 下表に、各パラメーターを説明します。
パラメーター
説明
イメージ設定
[画像アドレス] を選択し、準備したカスタム画像のアドレスを入力します。 例:
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz
。実行するコマンド
イメージのエントリコマンド。 入力できるコマンドは1つだけです。 複雑なスクリプトはサポートされていません。 このコマンドは、Dockerfileのコマンドと一致している必要があります。 例:
/data/eas/ENV/bin/python /data/eas/app.py
また、イメージの開始後にイメージがリッスンするローカルHTTPポートであるポート番号を入力する必要があります。 例: 8000。
重要EASエンジンはポートでリッスンするため、ポート8080とポート9090を指定しないことを推奨します。
ポート番号は, コマンドで指定したxxx.pyファイルで設定したポート番号と同じである必要があります。
[サービス設定] セクションで、[ヘルスチェック] を有効にし、次のパラメーターを設定します。
説明ヘルスチェック項目は最大3つ追加できます。 ヘルスチェック項目ごとに設定できるプローブタイプは1つだけであり、ヘルスチェック項目ごとに設定されるプローブタイプは一意である必要があります。
パラメーター
説明
プローブタイプ
次のタイプのプローブがサポートされています。
Livenessプローブ: コンテナーが期待どおりに実行されているかどうかを確認します。
Readiness probe: コンテナーが初期化され、リクエストを処理できるようにします。
スタートアッププローブ: コンテナーの起動が遅いため、アプリケーションが誤って失敗とマークされるのを防ぎます。 このプローブは、初期化に長時間を必要とするアプリケーション向けに設計されています。
各タイプのプローブの動作原理については、「How it works」をご参照ください。
チェック方法
次のヘルスチェック方法がサポートされています。
http_get: コンテナーのIPアドレス、ポート番号、およびパスを使用してHTTP GETメソッドを呼び出します。 応答のステータスコードが200以上400未満の場合、コンテナーは正常です。
tcp_socket: コンテナーのIPアドレスとポート番号を使用してTCPチェックを実行します。 TCP接続が確立されている場合、コンテナーは正常です。
exec (カスタムヘルスチェック): コンテナ内で特定のコマンドを実行します。 操作が成功した後、終了コードが0の場合、ヘルスチェックは成功です。
コールパス
このパラメーターは、Check Methodパラメーターをhttp_getに設定した場合にのみ使用できます。
ヘルスチェックを実行するHTTPサーバーのエンドポイント。 エンドポイントのプレフィックスは
http:// localhost
です。 エンドポイントにカスタムサフィックスを指定する必要があります。 デフォルトのサフィックスは/
です。ポート番号
このパラメーターは、Check Methodパラメーターをhttp_getまたはtcp_socketに設定した場合にのみ使用できます。
ヘルスチェックのポート番号。 例: 8000。
コマンド
このパラメーターは、Check Methodパラメーターをexec(Custom Health Check) に設定した場合にのみ使用できます。
実行するコマンド。 フロントエンドは自動的にコマンドを対応する形式に変換し、コマンドをJSONサービス設定ファイルに書き込みます。
チェック初期化のレイテンシ
コンテナーの起動後に最初のヘルスチェックを開始するのに必要な時間。 デフォルト値:0 単位は秒です。
チェック間隔
ヘルスチェックの頻度。 デフォルト値は 10 です。 単位は秒です。 高周波は、ポッドのための追加のオーバーヘッドを生成する。 低頻度は、コンテナエラーの無知につながる可能性があります。
タイムアウト期間の確認
ヘルスチェックのタイムアウト期間。 デフォルト値:1 単位は秒です。 ヘルスチェックがタイムアウトした場合、ヘルスチェックは失敗したと見なされます。
チェック成功しきい値
ヘルスチェックが成功した後、サービスが異常と見なされるまでに連続して失敗したヘルスチェックの最小数。 準備完了プローブのデフォルト値: 3。 活性プローブおよび起動プローブのデフォルト値: 1.
チェック失敗しきい値
ヘルスチェックが失敗した後、サービスが正常と見なされるまでの連続したヘルスチェックの最小数。 デフォルト値:1
[OK] をクリックします。
パラメーターを設定したら、[デプロイ] をクリックします。
オンプレミスクライアントでのヘルスチェック機能の設定
EASCMDクライアントをダウンロードし、ID認証を完了します。 この例では、Windows 64が使用されています。
クライアントが配置されているディレクトリに、
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 } ] }
次の表に、主要なパラメーターを示します。 その他のパラメーターについては、「モデルサービスのすべてのパラメーター」をご参照ください。
パラメーター
説明
イメージ
モデルサービスのデプロイに使用されるカスタムイメージのアドレス。
EASはインターネットアクセスをサポートしていません。 イメージがアップロードされるイメージリポジトリの仮想プライベートクラウド (VPC) エンドポイントを使用して、イメージにアクセスする必要があります。 例:
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz
。env
name
イメージに基づいてコンテナを起動するために使用される環境変数の名前。
値
イメージに基づいてコンテナを起動するために使用される環境変数の値。
コマンド
イメージのエントリコマンド。 入力できるコマンドは1つだけです。
/data/eas/ENV/bin/python /data/eas/app.py
などの複雑なスクリプトはサポートされていません。ポート
イメージ内のプロセスがリッスンするネットワークポート。 例: 8000。
重要ポート番号は、コマンドで指定したxxx.pyファイルで設定したポート番号と一致している必要があります。
liveness_check
説明liveness_checkは、ヘルスチェックでlivenessプローブが使用されていることを示します。 readiness_check (準備プローブ) またはstartup_check (スタートアッププローブ) を指定することもできます。
http_get
ポート8000経由でリクエストを送信するために使用されるHTTP GETチェックメソッド。 次のパラメータに注意してください。
http_get.path: ヘルスチェックを実行するHTTPサーバーのエンドポイント。 エンドポイントのプレフィックスは
http:// localhost
です。 エンドポイントにカスタムサフィックスを指定する必要があります。 デフォルトのサフィックスは/
です。http_get.port: HTTPサーバーでヘルスチェックを実行するポート。
次のヘルスチェック方法も使用できます。
tcp_socket: コンテナのIPアドレスとポート番号を使用してTCPチェックを実行します。 TCP接続が確立されている場合、コンテナーは正常です。 設定方法:
"tcp_socket":{ "port":8000 }
exec: コンテナーで特定のコマンドを実行します。 実行が成功した後、終了コードが0の場合、ヘルスチェックは成功です。 設定方法:
"exec":{ "command":[ "your_script", "with_args" ] }
initial_delay_秒
コンテナーの起動後に最初のヘルスチェックを開始するのに必要な時間。 デフォルト値:0 単位は秒です。
period_秒
ヘルスチェックの頻度。 デフォルト値は 10 です。 単位は秒です。 高周波は、ポッドのための追加のオーバーヘッドを生成する。 低頻度は、コンテナエラーの無知につながる可能性があります。
timeout_秒
ヘルスチェックのタイムアウト期間。 デフォルト値:1 単位は秒です。 ヘルスチェックがタイムアウトした場合、ヘルスチェックは失敗したと見なされます。
success_threshold
ヘルスチェックが成功した後、サービスが異常と見なされるまでに連続して失敗したヘルスチェックの最小数。 準備完了プローブのデフォルト値: 3。 活性プローブおよび起動プローブのデフォルト値: 1.
failure_threshold
ヘルスチェックが失敗した後、サービスが正常と見なされるまでの連続したヘルスチェックの最小数。 デフォルト値:1
JSONファイルが配置されているディレクトリで次のコマンドを実行して、サービスを作成します。詳細については、「EASCMDクライアントを使用するコマンドの実行」をご参照ください。
eascmdwin64.exe create <service.json>
<service.json>
を、作成したJSONファイルの名前に置き換えます。