Elastic Algorithm Service (EAS) は、Kubernetes のヘルスチェックメカニズムを使用するヘルスチェック機能を提供します。 ヘルスチェック機能は、障害が発生したコンテナを自動的に検出して回復し、正常なインスタンスのみがトラフィックを受信し、異常なインスタンスにリソースが割り当てられないようにします。 このトピックでは、ヘルスチェック機能を構成する方法について説明します。
制限事項
ヘルスチェックロジックを含むカスタムイメージを使用してサービスをデプロイする場合にのみ、ヘルスチェック機能を構成できます。
仕組み
EAS のヘルスチェック機能は、Kubernetes のヘルスチェックメカニズムを使用します。 この機能を使用すると、プローブ技術とヘルスチェック方法を使用して、サービスのヘルスステータスと可用性を検出して管理できます。 次の表に、プローブタイプとヘルスチェック方法を示します。
プローブタイプ
プローブタイプ
説明
Liveness プローブ
kubelet は、Liveness プローブを使用してコンテナが稼働しているかどうかを確認し、異常なコンテナを強制終了してから、再起動ポリシーに基づいて後続の操作を実行します。 コンテナが Liveness プローブによってプローブされない場合、kubelet は Liveness プローブがコンテナに対して Success を返すものと見なします。 これは、コンテナが稼働していることを示します。
Readiness プローブ
Readiness プローブは、コンテナがリクエストを受信する準備ができているかどうかを確認するために使用されます。 Ready 状態のポッドのみがリクエストを受信できます。 サービスとエンドポイントの関係は、ポッドの準備ができているかどうかに依存します。
Ready フィールドの値が False の場合、Kubernetes はサービスに関連付けられているエンドポイントのリストからポッドの IP アドレスを削除します。
Ready フィールドの値が True に変更されると、Kubernetes はサービスに関連付けられているエンドポイントのリストにポッドの IP アドレスを追加します。
Startup プローブ
kubelet は、Startup プローブを使用して、コンテナがいつ起動されたかを学習します。 Startup プローブを使用すると、コンテナが起動された後にのみ、Liveness プローブと Readiness プローブがコンテナに送信されるようにすることができます。 Startup プローブは、起動速度が遅いコンテナで Liveness チェックを実行するために使用できます。 これにより、コンテナが起動される前に kubelet によって強制終了されることはありません。
ヘルスチェック方法
ヘルスチェック方法
説明
http_getHTTP GET リクエストを送信して、サービスのヘルスステータスと Liveness を確認し、返された状態コードに基づいてプローブが成功したかどうかを確認します。
tcp_socketTCP 接続を作成しようとして、サービスのヘルスステータスと Liveness を確認します。
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():
"""
ビジネス要件に基づいてリクエスト本文を解析します。 //日本語訳
"""
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 を記述して、予測コードをファイルにコピーし、必要なパッケージをインストールできます。 次のサンプルコードは、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"] カスタムイメージの作成方法については、「Container Registry Enterprise Edition インスタンスを使用してイメージをビルドする」をご参照ください。 カスタムイメージの詳細については、「カスタムイメージを使用してモデルサービスをデプロイする」をご参照ください。 また、File Storage NAS (NAS) または Git リポジトリにコードを保存し、ストレージをサービスインスタンスにマウントして、サービスデプロイ中にインスタンスにコードを書き込むこともできます。 詳細については、「サービスにストレージをマウントする」をご参照ください。 次のセクションでは、予測コードを Dockerfile にコピーすることで、サービスデプロイ中にヘルスチェック機能を構成する方法について説明します。
サービスデプロイ中にヘルスチェック機能を構成する
PAI コンソールでヘルスチェック機能を構成する
PAI コンソール にログインします。 ページ上部でリージョンを選択します。 次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) に入る] をクリックします。
[サービスのデプロイ] をクリックします。 [カスタムモデルデプロイ] セクションで、[カスタムデプロイ] をクリックします。
[カスタムデプロイ] ページの [環境情報] セクションで、次の主要パラメーターを構成します。 その他のパラメーターについては、「コンソールでのカスタムデプロイのパラメーター」をご参照ください。
パラメーター
説明
[イメージ構成]
[イメージアドレス] を選択し、準備したカスタムイメージのアドレスを入力します。 例:
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz。[実行するコマンド]
イメージのエントリコマンド。 1 つのコマンドのみを入力できます。 複雑なスクリプトはサポートされていません。 コマンドは Dockerfile のコマンドと一致している必要があります。 例:
/data/eas/ENV/bin/python /data/eas/app.py。また、ポート番号を入力する必要があります。これは、イメージが起動された後にイメージが listen するローカル HTTP ポートです。 例: 8000。
重要EAS エンジンがポート 8080 とポート 9090 で listen するため、これらのポートを指定しないことをお勧めします。
ポート番号は、コマンドで指定された xxx.py ファイルで構成されたポート番号と同じである必要があります。
[ヘルスチェック]
[ヘルスチェック] をオンにします。 関連パラメーターを構成した後、[OK] をクリックします。 パラメーター構成の詳細な手順については、「ヘルスチェックパラメーター」をご参照ください。
説明最大 3 つのヘルスチェック項目を追加でき、それぞれに 1 つのプローブタイプを指定できます。 プローブタイプを複製することはできません。
パラメーターを構成した後、[デプロイ] をクリックします。
オンプレミスクライアントでヘルスチェック機能を構成する
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 } ] }次の表に、主要パラメーターを示します。 その他のパラメーターについては、「モデルサービスのすべてのパラメーター」をご参照ください。
パラメーター
説明
image
モデルサービスのデプロイに使用されるカスタムイメージのアドレス。
EAS はインターネットアクセスをサポートしていません。 イメージがアップロードされたイメージリポジトリの Virtual Private Cloud (VPC) エンドポイントを使用してイメージにアクセスする必要があります。 例:
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz。env
name
イメージに基づいてコンテナを起動するために使用される環境変数の名前。
value
イメージに基づいてコンテナを起動するために使用される環境変数の値。
command
イメージのエントリコマンド。 1 つのコマンドのみを入力できます。
/data/eas/ENV/bin/python /data/eas/app.pyなどの複雑なスクリプトはサポートされていません。port
イメージ内のプロセスが listen するネットワークポート。 例: 8000。
重要ポート番号は、command で指定された xxx.py ファイルで構成されたポート番号と一致している必要があります。
liveness_check
説明liveness_check は、ヘルスチェックで Liveness プローブが使用されることを示します。 health_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_seconds
コンテナの起動後、最初のヘルスチェックを開始するのに必要な時間。 デフォルト値: 0。 単位: 秒。
period_seconds
ヘルスチェックの頻度。 デフォルト値: 10。 単位: 秒。 頻度が高いと、ポッドのオーバーヘッドが増加します。 頻度が低いと、コンテナエラーが見落とされる可能性があります。
timeout_seconds
ヘルスチェックのタイムアウト期間。 デフォルト値: 1。 単位: 秒。 ヘルスチェックがタイムアウトした場合、ヘルスチェックは失敗と見なされます。
success_threshold
ヘルスチェックが成功した後、サービスが異常と見なされるまでに許容される連続したヘルスチェック失敗の最小数。 Readiness プローブのデフォルト値: 3。 Liveness プローブと Startup プローブのデフォルト値: 1。
failure_threshold
ヘルスチェックが失敗した後、サービスが正常と見なされるまでに許容される連続したヘルスチェック成功の最小数。 デフォルト値: 1。
JSON ファイルがあるディレクトリで次のコマンドを実行して、サービスをデプロイします。 詳細については、「コマンドを実行して EASCMD クライアントを使用する」をご参照ください。
eascmdwin64.exe create service.json