Skip to content

ライフサイクルの状態

ワークロードのライフサイクルとは、作成から破棄までに遷移する状態のセットと、各遷移をトリガーする要素のことです。プラットフォームは、ワークロードのProtonをバックアップするKubernetes Podから状態を導き出します。

プラットフォームは2つのレベルで状態を追跡します。ProtonStatusは、各ProtonをバックアップするKubernetes Podから計算された完全なランタイムビューです。WorkloadStatusは、ワークロード自体に表示されるユーザー向けの部分セットであり、ワークロードレベルのAPIが報告することのない内部Protonのライフサイクルの状態(initializingwarmingdrainingrestarting)を省略します。

結合された状態テーブルでは、表示場所列を使用して、各値がどこに表示されるかを示しています。

状態 Surfaces on 説明
unknown ワークロード + Proton 状態はまだ報告されていません。プラットフォームはまだスナップショットを生成していません。
submitted ワークロード + Proton APIによって受け入れられましたが、まだスケジュールされていません。PodはPending(保留中)で、ノードは割り当てられていません。
initializing Protonのみ 下位互換性を確保するため、レガシー状態が維持されます。 新しいProtonでは、代わりにprovisioningが使用されます。 ワークロードは、これを隣接するワークロードレベルの状態(launchingまたはrunning)にまとめます。
provisioning ワークロード + Proton クラスターリソース(リソースバンドルのスケジューリング、PVCの作成、シークレットの注入)が割り当てられています。Podはノードが割り当てられたPending(保留中)状態です。
launching ワークロード + Proton イメージの取得とコンテナの起動が進行中、またはコンテナは起動していますが、Readiness Probeをまだ通過していません。PodはRunning(実行中)ですが、コンテナは準備できていません。
running ワークロード + Proton 正常で、リクエストを処理しています。PodはRunning(実行中)で、すべてのコンテナが準備完了しています。
suspended ワークロード + Proton 意図的に一時停止されています。Podは停止されますが、ワークロードのIDと設定は保持されます。startを実行すると、これらが復元されます。
warming Protonのみ 置換時のウォームアップウィンドウで実行されています。候補のProtonから反映されます。
draining Protonのみ アクティブですが、トラフィックを受信しなくなりました。置換時の古いProtonです。
interrupted Protonのみ ランタイムがプリエンプトされました(ノードのエビクション、スポットの回収、またはスケジューラ主導の置換)。プラットフォームは、容量が空くと自動的に再スケジュールします。 ワークロードレベルでは、interruptedstoppedに対応します。
restarting Protonのみ Podの再起動が必要な設定変更後、ProtonのIDを保持したままProtonがインプレースで再作成されています。ワークロードレベルのステータスは、隣接する可視状態のままです。
stopping ワークロード + Proton グレースフルシャットダウンが進行中です。Podは終了処理中です。
stopped ワークロード + Proton 停止しています。再起動できます。Podが存在しないか、完了まで実行するアーティファクトのPodフェーズがSucceeded(成功)です。
errored ワークロード + Proton 失敗しました。CrashLoopBackOffImagePullBackOff、またはPodフェーズがFailed(失敗)です。
terminated ワークロード + Proton 永久に破棄されました。ワークロードが削除され、Protonは存在しなくなりました。

プラットフォームは、Pod状態の述語を優先順位に従って評価してProtonStatusを導き出します。その後、Protonのみの状態をまとめることでWorkloadStatusが導き出されます。

一般的な遷移

次の表に、作成、更新、置換、停止、失敗、および昇格操作の一般的な状態シーケンスを示します。このシーケンスは、完全な遷移パスを示すためにProtonレベルで記述されています。ワークロードレベルでは、Protonのみの状態(initializingwarmingdrainingrestarting)は隣接するワークロードで可視の状態にまとめられます。

操作 遷移
作成 submitted -> provisioning -> launching -> running
更新 running -> initializing -> running
置換 running -> running(active) + initializing/warming/running(candidate) -> switch -> draining(active) + running(new active) -> running(single active)
停止 running -> stopping -> stopped
一時停止 (Suspend) running -> suspended
失敗 launching | running -> errored
昇格 running (draft) -> running (locked) (再起動なし)

Podベースの真実

プラットフォームは、優先順位に従ってPodの述語からワークロードのステータスを計算します。

  • 複数レプリカのワークロードの場合、ワースト状態優先(worst-state-wins)の集計が適用されます。
  • サイドカーは、コンテナの準備完了(readiness)と失敗の評価に影響します。
  • 初期化(Init)コンテナのステータスは述語には影響しません。これらは起動に影響を与えますが、ワークロードレベルのerroredを直接トリガーすることはありません。

erroredが継続する理由

いずれかのコンテナがCrashLoopBackOffになると、ワークロードはerroredを報告し、問題のあるPodが置き換えられるか、失敗したコンテナが再び成功し始めるまでrunningには戻りません。また、すべてのコンテナのReadiness Probeを通過するまで、ワークロードはlaunchingのままになります。readinessProbe.pathのタイプミスや、準備が完了しないサイドカーがあると、プライマリーコンテナが起動していてもワークロードはrunningに到達しません。

CrashLoopBackOffは、ワークロードまたはProtonのstatusフィールドに名前付き文字列として表示されません。ステータスは、これ以上の詳細情報なしにerroredと表示されます。 クラッシュループを確認するには、Protonに対してstatusDetailsを呼び出します。restartCount > 0かつstatus: "waiting"であるコンテナは、クラッシュループが発生していることを示しています。

エラーになったワークロードのデバッグ

ProtonのstatusDetailsには、失敗したコンテナ名とその理由が含まれます。 /eventsエンドポイントは、DataRobotのライフサイクル遷移(状態変化、置換、昇格など)を記録しており、タイムラインの再構築に役立ちます。 このエンドポイントは、クラッシュ再起動やイメージ取得の失敗など、KubernetesのPodレベルのイベントは転送しません。それらのイベントについては、Protonに対するstatusDetailsが主要な診断情報源となります。 ログは、アプリケーションレベルのコンテキストを提供します。

ワークロードのどこで問題が発生したかを特定するために、ライフサイクルイベントとProtonごとのステータスを取得するには:

# Lifecycle events: what changed and when
curl -s "${DATAROBOT_ENDPOINT}/workloads/${WORKLOAD_ID}/events" \
  -H "Authorization: Bearer ${DATAROBOT_API_TOKEN}"

# Per-proton status
curl -s "${DATAROBOT_ENDPOINT}/workloads/${WORKLOAD_ID}/protons" \
  -H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" | jq '.data[] | {id, role, status}' 

Proton:ランタイムのバッキングと集約

Protonは、ワークロードの背後にあるランタイムプリミティブ、つまり実際に実行されているコンテナインスタンスです。ワークロードは管理されるIDであり、Protonは実行です。

オブジェクト階層

ワークロードには常に少なくとも1つのProtonがあります。置換中は一時的に2つ(古いものと新しいもの)のProtonを持つことがあり、ワークロードのトラフィックルーティングがどのProtonがリクエストを受け取るかを決定します。

Protonは1つ以上のKubernetesポッドで構成されます:

  • シングルレプリカのワークロードは1つのポッドにマッピングされます。
  • マルチレプリカのワークロードはレプリカごとに1つのポッドにマッピングされます。

ワークロードは安定したアドレスとガバナンスのラッパーです。Protonはそのアドレスの背後でアーティファクトを実行するランタイムバッキングです。

Protonのステータスの計算方法

プラットフォームは、述語を優先順位に従って使用し、ポッドのステートを集約することによってProtonのステータスを計算します。

マルチレプリカのProtonの場合、最悪のステートが優先される(worst-state-wins)集約が適用されます。

述語は優先順位に従って評価され、最も優先順位の高い一致が優先されます。

ポッドの条件 Protonのステート ワークロードのステート 優先度
CrashLoopBackOffのコンテナがある errored errored 7 (最高)
ImagePullBackOffのコンテナがある errored errored 7
ポッドのフェーズ Failed errored errored 6
ポッドのフェーズ Succeeded stopped stopped 5
ポッドのフェーズ Pending (まだノードがない) submitted submitted 4
ポッドのフェーズ Pending (ノードにスケジュール済み) provisioning provisioning 4
ポッドのフェーズ Running、すべてのコンテナが準備完了ではない launching launching 3
ポッドのフェーズ Running、すべてのコンテナが準備完了 running running 2
ノードのエビクションが進行中 interrupted stopped
ユーザーが発行したサスペンド suspended suspended
設定変更後に再作成されたProton restarting (Protonのみ。ワークロードのステートは変更なし)
ポッドが存在しない stopped (シャットダウン時) または errored (予期しないエラー) 同じ

述語は、サイドカーを含む各ポッドのすべてのコンテナを検査します。サイドカーのイメージURIが間違っている場合、プライマリーコンテナが正常であっても、Protonはerroredを報告します。Initコンテナのステータスは述語によって評価されません。これらは起動に影響しますが、直接erroredをトリガーすることはありません。

マルチコンテナの例

シナリオ ポッドのフェーズ コンテナのステート ワークロードのステート
アプリとサイドカーが両方とも正常 実行中 アプリ準備完了、サイドカー準備完了 running
アプリ実行中、サイドカーがImagePullBackOff 実行中 アプリ準備完了、サイドカーImagePullBackOff errored
アプリがCrashLoopBackOff 実行中 アプリCrashLoopBackOff errored
アプリ起動中、サイドカー実行中 実行中 アプリContainerCreating、サイドカー準備完了 launching
ポッドスケジュール済み、コンテナ待機中 保留中 両方ともWaiting (ノード割り当て済み) provisioning
ポッド保留中、まだノードがない 保留中 両方ともWaiting (ノードなし) submitted

Protonの検査

ほとんどのユーザーはワークロードを通じて操作します。Protonのエンドポイントは、ランタイムのステートを検査したり、置換操作中に候補をテストしたりするのに役立ちます。

ワークロードをバックアップしているProtonを一覧表示して、アクティブなインスタンスと候補のインスタンスを確認するには:

# List protons for a workload
curl -s "${DATAROBOT_ENDPOINT}/workloads/${WORKLOAD_ID}/protons" \
  -H "Authorization: Bearer ${DATAROBOT_API_TOKEN}" | jq '.' 

APIで使用可能なProtonのエンドポイントの完全なセットを確認するには:

GET /workloads/{workload_id}/protons
GET /workloads/{workload_id}/protons/{proton_id}
GET /workloads/{workload_id}/protons/{proton_id}/statusDetails 

OpenTelemetryのトレース、ログ、および指標は、プラットフォームの可観測性サーフェスの /api/v2/otel/workload/{workload_id}/{logs,metrics,traces} で公開されます(単数形の workload、Proton IDではなくワークロードIDがキーになります)。ワークロードAPI自体は /otel/* ルートを公開しません。