メニュー
資料請求 お問い合わせ
2026-08-052026-08-05

OpenShiftでPodはどう起動するのか?

みなさん、こんにちは。Red Hat OpenShiftの構築を担当している巻島です。

この記事では、Podが作成されてから、アプリケーションが通信を受け付けられるReady状態になるまでの流れを整理して説明します。

「どの機能が何をするのか」と「起動処理がどこで止まっているのか」を理解することが目的となります。

1. 「Podの起動」とは

Podの起動には、複数の段階があります。画面にRunningと表示されても、アプリケーションがトラフィックを受け付けられるReady状態になっているとは限りません。Podがどこまで起動しているかは、主に次のPod Conditionで確認できます。

Condition(状態情報)

意味

PodScheduled

Podが実行先Nodeへ割り当てられた

PodReadyToStartContainers

Pod sandboxとネットワークの準備が完了し、コンテナを作成できる

Initialized

通常のinitコンテナがすべて正常終了した

ContainersReady

Pod内のすべてのコンテナがReadyになった

Ready

全コンテナとreadinessGatesの条件を満たし、リクエストを処理できると判定された

Runningは、PodがNodeに割り当てられ、すべてのコンテナが作成され、少なくとも一つのコンテナが実行中、起動中、または再起動中であることを示します。

そのため、Readiness Probeに失敗している場合は、STATUSがRunningでも、READY欄は0/1のままです

用語解説

●      Pod Condition:Podが起動処理の各段階を通過したかを示す状態情報

●      ReadinessGates:Pod独自の追加のReady条件

2. 全体像

Pod作成からReadyまでの流れを、コントロールプレーンとワーカーノードに分けると次のようになります。

図:Pod作成からReadyまでの流れ

配置先が決まると、そのNodeのkubeletが、Volume、ネットワーク、イメージなどの準備を調整します。CRI-Oは、kubeletからの依頼を受けてコンテナの作成や起動を行います。

OpenShiftの標準構成では、Podネットワークの設定にOVN-Kubernetesが関わります。OVN-Kubernetesは、OpenShift Container Platformの標準ネットワークプロバイダーです。

用語解説

●  OVN-Kubernetes:PodやService間のネットワークを管理する仕組み

3. PodがReadyになるまでの5ステップ

Step 1. Podを作成し、Nodeを決める

DeploymentなどのコントローラーがPodオブジェクトをAPI Serverへ作成します。Schedulerは未割り当てのPodを見つけ、必要とするCPUやメモリーやNodeへの配置条件、Pod同士の配置条件、Volumeの利用条件などを確認してNodeを選びます。配置先が決まるとPodScheduled=Trueになります。

Step 2. kubeletが起動の準備をする

配置先Nodeのkubeletが、自分のNodeに割り当てられたPodを検知します。

kubeletは最初に、Podが使用するVolumeを準備します。その後、CRIを通じてCRI-OへPod sandboxの作成を依頼します。

CRI-Oは、OVN-Kubernetesなどのネットワーク機能と連携し、Podのネットワークを設定します。Pod sandboxの作成とネットワーク設定が完了すると、PodReadyToStartContainers=True

となります。その後、必要なコンテナイメージがNodeにない場合は、CRI-Oがレジストリからイメージを取得します。イメージを取得できない場合は、ErrImagePullやImagePullBackOffが表示されます。

用語解説

●  kubelet:各Node上でPodの起動や状態確認を行うプログラム

●  CRI:kubeletとコンテナ実行基盤をつなぐインターフェース

●  CRI-O:コンテナの作成・起動・停止などを行う実行基盤

●  Pod sandbox:同じPod内のコンテナが共有するネットワークなどの土台

Step 3. initコンテナを実行する

通常のinitコンテナが定義されている場合、Podの定義に書かれた順番で一つずつ実行されます。先のinitコンテナが正常終了するまで、次のinitコンテナは開始されません。すべて正常終了するとInitialized=Trueになり、アプリケーションコンテナの起動へ進みます。

用語解説

●  initコンテナ:アプリケーション本体を起動する前に、設定やデータの準備を行うコンテナ

Step 4. アプリケーションコンテナを起動する

CRI-Oがコンテナを作成し、Node上でアプリケーションプロセスを開始します。この段階でPod phaseがRunningになることがあります。ただし、Runningはアプリケーションが利用可能になったことを保証しません。アプリケーションの初期化処理が続いていたり、Readiness Probeに失敗していたりする可能性があります。

Step 5. ProbeでReadyを判定する

kubeletは設定されたProbeを実行します。Startup Probeは起動完了、Readiness Probeは通信を受けられるか、Liveness Probeは再起動が必要な異常かを確認します。すべてのコンテナがReadyになり、追加のReady条件(readinessGates)がある場合はそれも満たすと、Ready=Trueになります。

Probe

役割

Startup

アプリケーションの起動完了を確認する

Readiness

トラフィックを受けられるかを判定する

Liveness

異常時にコンテナを再起動するか判断する

用語解説

●  Probe:kubeletがコンテナの状態を確認するためのチェック

●  Service:複数のPodに対して、安定した接続先を提供する仕組み

4. 起動が止まった箇所の判別方法

STATUSだけで判断せず、oc describe podのEventsとPod Conditionを合わせて確認します。

見える状態

主に確認する場所

Pending / PodScheduled=False

CPU・メモリーのrequests、Nodeの配置条件、PVC、Events

ContainerCreating

Volume、Pod sandbox、OVN-Kubernetes、Events

ImagePullBackOff

イメージ名、imagePullSecret、レジストリ接続

Init:0/N、Init:Error

initコンテナのログ、終了コード、依存先

STATUS=Running、READY=0/1

Startup / Readiness Probe、アプリケーションの起動状態

CrashLoopBackOff

直前のログ、起動コマンド、環境変数、終了コード

5. まとめ

●  Schedulerは、Podを実行するNodeを決める

●  配置先Nodeのkubeletが、Volumeやネットワークなどの準備を調整する

●  CRI-Oが、Pod sandboxやコンテナの作成・起動を行う

●  通常のinitコンテナが完了した後、アプリケーションコンテナが起動する

●  RunningとReadyは同じではない

●  起動障害では、「配置先の決定 → 起動準備 → initコンテナ → アプリケーション → Ready判定」のどこで止まっているかを確認する

Podの起動を確認するときは、STATUS欄のRunningだけを見るのではなく、Readiness ProbeとReady Conditionまで確認することが重要です。

--------------------------------------------------------------------------------------------------------------------

参考文献

[1]https://docs.redhat.com/en/documentation/openshift_container_platform/4.22/

[2]https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

[3]https://kubernetes.io/docs/concepts/workloads/pods/probes/

[4]https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

xポスト ブックマークブックマーク lineLINE
一覧へ戻る

関連する記事

CONTACT

ご相談・お問い合わせ

NebulaShift®は、
柔軟でスピーディなアジャイル開発、システムの刷新、
そして先進的なインフラ運用を通じて、
貴社の可能性を無限に広げます。