すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:ヘルスチェック

最終更新日:Jul 16, 2025

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_get

    HTTP GET リクエストを送信して、サービスのヘルスステータスと Liveness を確認し、返された状態コードに基づいてプローブが成功したかどうかを確認します。

    tcp_socket

    TCP 接続を作成しようとして、サービスのヘルスステータスと 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 コンソールでヘルスチェック機能を構成する

  1. PAI コンソール にログインします。 ページ上部でリージョンを選択します。 次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) に入る] をクリックします。

  2. [サービスのデプロイ] をクリックします。 [カスタムモデルデプロイ] セクションで、[カスタムデプロイ] をクリックします。

  3. [カスタムデプロイ] ページの [環境情報] セクションで、次の主要パラメーターを構成します。 その他のパラメーターについては、「コンソールでのカスタムデプロイのパラメーター」をご参照ください。

    パラメーター

    説明

    [イメージ構成]

    [イメージアドレス] を選択し、準備したカスタムイメージのアドレスを入力します。 例: 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 つのプローブタイプを指定できます。 プローブタイプを複製することはできません。

    ヘルスチェックパラメーター

    パラメーター

    説明

    プローブタイプ

    次のタイプのプローブがサポートされています。

    • [Liveness プローブ]: コンテナが想定どおりに実行されているかどうかを確認します。

    • [Readiness プローブ]: コンテナが初期化され、リクエストを処理する準備ができていることを確認します。

    • [Startup プローブ]: コンテナの起動が遅いことが原因で、アプリケーションが誤って失敗とマークされるのを防ぎます。 このプローブは、初期化に長い時間がかかるアプリケーション向けに設計されています。

    各タイプのプローブの動作原理については、「仕組み」をご参照ください。

    [チェック方法]

    次のヘルスチェック方法がサポートされています。

    • [http_get]: コンテナの IP アドレス、ポート番号、およびパスを使用して HTTP GET メソッドを呼び出します。 レスポンスの状態コードが 200 以上 400 未満の場合、コンテナは正常です。

    • [tcp_socket]: コンテナの IP アドレスとポート番号を使用して TCP チェックを実行します。 TCP 接続が確立されると、コンテナは正常です。

    • [exec (カスタムヘルスチェック)]: コンテナ内で特定のコマンドを実行します。 操作が成功した後の終了コードが 0 の場合、ヘルスチェックは成功です。

    [呼び出しパス]

    [チェック方法] パラメーターを [http_get] に設定した場合にのみ、このパラメーターを使用できます。

    ヘルスチェックを実行する HTTP サーバーのエンドポイント。 エンドポイントのプレフィックスは http://localhost です。 エンドポイントのカスタムサフィックスを指定する必要があります。 デフォルトのサフィックスは / です。

    [ポート番号]

    [チェック方法] パラメーターを [http_get] または [tcp_socket] に設定した場合にのみ、このパラメーターを使用できます。

    ヘルスチェックのポート番号。 例: 8000。

    コマンド

    [チェック方法] パラメーターを [exec(カスタムヘルスチェック)] に設定した場合にのみ、このパラメーターを使用できます。

    実行するコマンド。 フロントエンドはコマンドを対応する形式に自動的に変換し、JSON サービス構成ファイルに書き込みます。

    [チェック初期化のレイテンシ]

    コンテナの起動後、最初のヘルスチェックを開始するのに必要な時間。 デフォルト値: 0。 単位: 秒。

    [チェック間隔]

    ヘルスチェックの頻度。 デフォルト値: 10。 単位: 秒。 頻度が高いと、ポッドのオーバーヘッドが増加します。 頻度が低いと、コンテナエラーが見落とされる可能性があります。

    [チェックタイムアウト期間]

    ヘルスチェックのタイムアウト期間。 デフォルト値: 1。 単位: 秒。 ヘルスチェックがタイムアウトした場合、ヘルスチェックは失敗と見なされます。

    [チェック成功しきい値]

    ヘルスチェックが成功した後、サービスが異常と見なされるまでに許容される連続したヘルスチェック失敗の最小数。 Readiness プローブのデフォルト値: 3。 Liveness プローブと Startup プローブのデフォルト値: 1。

    [チェック失敗しきい値]

    ヘルスチェックが失敗した後、サービスが正常と見なされるまでに許容される連続したヘルスチェック成功の最小数。 デフォルト値: 1。

  4. パラメーターを構成した後、[デプロイ] をクリックします。

オンプレミスクライアントでヘルスチェック機能を構成する

  1. EASCMD クライアントをダウンロードし、ID 認証を完了します。 この例では、Windows 64 が使用されています。

  2. クライアントがあるディレクトリに 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。

  3. JSON ファイルがあるディレクトリで次のコマンドを実行して、サービスをデプロイします。 詳細については、「コマンドを実行して EASCMD クライアントを使用する」をご参照ください。

    eascmdwin64.exe create service.json