San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
DevSecOps

Kubernetes Podとは? ライフサイクルの解説

Kubernetesは複数の要素で構成され、その中の1つがPodです。Podは最も基本的で重要な要素とされ、Kubernetesの機能を支えています。本記事では、k8s Podに関する情報を詳しく解説します。

まずはPodの意味から理解し、次にその他の詳細に進みます。

Kubernetes Podとは? ライフサイクルの解説

Kubernetes Podとは何か?

Podとは、機能するKubernetesクラスターが持つ単一かつ独立したインスタンスを意味します。Kubernetesエコシステムにおける最小の実行可能単位です。

より広い意味では、Podは次のように説明できます: 

  • 自己完結型の実体 
  • 単一インスタンスの実行に欠かせないk8s要素
  • 対象アプリが求める特定の基本機能を備えた独立したローカルホスト 

用語

Containers

Podには1個または複数のコンテナが含まれることがあります。多くの場合、Pod内にはDockerコンテナが配置され、Pod起動時に複数のコンテナが動作し、一つのまとまりとして管理されます。

Resources 

Podが持つリソースは、その中のコンテナと共有されます。通常はPodには1個のコンテナのみが含まれますが、高度なユースケースでは1つのPodに複数のコンテナを実行する場合もあります。

引き継がれるコンテナの機能性を維持するため、k8s Podは共有ストレージやネットワークリソースを備えています。

ネットワークリソースについては、Podには自動割り当てされた固有のIPアドレスが付与され、すべてのコンテナは同一のネットワークポート、IP、namespaceを共有します。

各コンテナはlocalhostを通じて相互に通信します。そのため、必要に応じた共有ストレージボリュームがPod内で定義されます。

SSH in k8s

Podの重要性を理解するためには、Kubernetes PodにおけるSSHの役割も押さえる必要があります。SSHの利用は、パブリックおよびプライベートクラウド上でPodを安全に保つための簡単な方法です。SocketXPはk8s PodでSSHを利用するための認定ツールです。

Nodes

Podはクラスター内のノード上で動作します。プロセスが継続する限りPodはそのノードに留まり、削除されるまでノードから離れません。

リソース不足やノードの故障により、Podがノードから切り離される場合もあります。Podはノードに依存せず、ノードの故障が発生すると自動的にPodが削除されます。

Variables

Kubernetes Podの環境変数とは、設定ファイルで宣言される変数のことです(記事下部のPod作成のセクションを参照ください)。

Podの役割は?

Podの基本的な意味が理解できたら、その役割を見ていきます。コントローラーがPodを作成し、さまざまな用途に利用します。たとえば:

  • クラスター内のノードが故障すると、コントローラーは応答しないPodを監視し、その情報を基に正常なノードで新たなPodを展開し、ワークロードの継続性を維持します。
  • マルチコンテナ仕様の場合、Pod内のリソースが共有されます。このようなPodには、アプリのコンテナより先に起動する‘init’コンテナが含まれ、最適な環境を整えます。
  • コントローラーはPodテンプレートから情報を抽出し、さらにPodを生成する場合があります。
  • Podには固有のIPアドレス、ストレージボリューム、そして各コンテナの動作を決定するための設定情報が含まれます。

k8s Podの種類

1. シングルコンテナ

これは1つのPodに1つのコンテナのみを含む、最も単純なPodタイプです。ワークロード展開によく利用され、生成も簡単でkubectlコマンド1つで作成できます。以下は例です:

apiVersion: v1
kind: Pod
metadata:
 name: Tomcat
spec:
 containers:
 - name: Tomcat
   image: tomcat: 8.0
   ports:
     containerPort: 7500
   imagePullPolicy: Always

2. マルチコンテナ

その名の通り、このPodタイプは1つのPodに複数のコンテナを含みます。主にメインコンテナとサブコンテナを同時に展開する際に利用され、メインコンテナはアプリホスティングを、サブコンテナは監視やログ集約などの補助機能を担います。

複数のコンテナを扱うため、マルチコンテナPodの管理はやや複雑です。各Podは相互に通信可能です。以下はKubernetes PodのYAMLで作成した例です。 

apiVersion: v1
kind: Pod
metadata:
 name: Tomcat
spec:
 containers:
 - name: Tomcat
   image: tomcat: 8.0
   ports:
     containerPort: 7500
   imagePullPolicy: Always
 - name: Database
   image: mongoDB
   ports:
     containerPort: 7501
   imagePullPolicy: Always
kubernetes pod architecture
Kubernetes pod architecture

なぜKubernetesはPodを利用するのか?

Kubernetesは主にワークロード展開のためにPodを利用します。使用するPodの種類に応じ、さまざまな機能が提供されます。たとえば、スタティックPodはk8sのセルフホストのコントロールプレーンの実行に役立ちます。

マルチコンテナPodは、含まれる全コンテナを統一的に管理します。各Podは特定アプリの単一インスタンスの実行を担い、k8s環境ではアプリの水平スケールに利用されます。 

Podのライフサイクル

Podは短命であり、さまざまな理由により削除・無効化される場合があります。Podが終了すると、その存在は完全に消去されます。Podは利用者やコントローラーによって削除されるまで機能し続けます。

Podに問題が発生しても自己修復は行われず、コントローラーの介入が必要です。Podのライフサイクルはノードに依存しており、ノードが故障または削除されると、連動するPodも削除または停止します。PodStatus APIオブジェクトは各Podの一部で、statusフィールドでその詳細が示されます。

Podはそのライフサイクルの間、以下のフェーズのいずれかに存在します。

  • Pendingフェーズ

このフェーズでは、Podは完全に作成されクラスターに追加されますが、1つ以上のコンテナが動作を開始していないため、完全な稼働状態には至りません。加えて、ノード上での待機時間やイメージのダウンロード時間もこのフェーズに含まれます。

  • Runningフェーズ

Podがノードに接続され、全てのコンテナが動作していれば、Runningフェーズにあるとされます。

  • Succeededフェーズ

Pod内のすべてのコンテナが正常に終了すると、Succeededフェーズとなります。

  • Failedフェーズ

ノード故障などにより、1つまたは複数のコンテナが終了するとFailedフェーズになります。

  • Unknown

Podの状態が不明な場合はUnknownフェーズにあるとされます。

Podの作成

KubernetesにおけるPodの基本的な意味を理解するために、別々のPodを生成することは推奨されません。むしろ、複数の同一Pod(レプリカ)を生成する方法が推奨されます。

これらのPodの管理(ライフサイクル管理、Pod数の変更、水平スケーリングなど)はコントローラーによって行われます。デバッグや検査、トラブルシューティングの際も、コントローラーを経由する必要があります。

次に、YAMLを利用してPodを作成するためのファイルを開くか、CLIコマンドを実行してPodを作成できます。YAML構成の場合、構文は以下の通りです:

apiVersion: v1
kind: Pod
metadata:
…
…
…
spec:
…
…
…

一方、Pod作成用CLIコマンドの構文は以下の通りです:

kubectl run pod_name --image name_of_image:tag

Podリクエスト

各Podは、機能を維持するために一定のCPU、ストレージ、メモリを要求します。Podが起動すると、これらのリソース確保のためのリクエストがKubernetesに送信され、適切なノード上の領域が確保されます。

リクエストに応答が得られない場合、ノードのリソースが不足していることを意味し、Podが正常に動作しなくなります。Podリクエストを設定する際は、以下の点に注意してください。

  • デフォルトのCPUリクエストがない場合、十分なCPUを持たないノードに割り当てられる可能性があります。
  • デフォルトのメモリリクエストがないPodは、十分なメモリがないノードに割り当てられる恐れがあります。
  • Podリクエストの値が小さいと、1つのノードに多数のPodが配置され、ノード性能が低下する可能性があります。
  • Podリクエストの値が大きいと、Podがスケジュールされず、結果としてクラスターリソースが無駄になる場合があります。

Podリミット

前述の通り、Podはノード上で動作します。Podリミットとは、Podがノード上で消費できるCPUやメモリの量を指します。通常はリミットは設定されませんが、リソースの効率的な配分のため、Podリミットを設定することが推奨されます。

また、Podリミットに加えて、1つのPodに含まれるコンテナ数を制限することも可能です。コンテナリミットのみの場合、Podリミットは各コンテナリミットの合計となります。Podリミットとコンテナリミットの両方を設定する場合は、コンテナリミットの合計がPodリミットを超えないようにしてください。

Podの削除

不要になったPodを削除するには、$ kubectl delete pods <pod-name> コマンドを使用してください。Podの存在は完全に消去されます。

共有PodやレプリカPodを利用している場合は、先にレプリカPodを削除するようご注意ください。

K8s Podとコンテナの違い

前述の通り、コンテナはPod内に存在し、Podは1個または複数のコンテナを内包します。

コンテナは、アプリ開発を支えるためのアプリや実行環境の集合体として機能的な存在です。基本的には、Podが動作する際にKubernetesが利用するネットワークやストレージの構成を備えています。

Podは自律的な上位構造であり、コンテナは独立した下位構造です。Podはコンテナを内包できますが、コンテナ単体では動作せず、Podに含まれて初めて機能します。

一方、Podは独立した単位としてノード上で直接動作します。コンテナは、大量の貨物であるPodの一部とみなすことができ、Podから切り離されると目的地に到達できなくなります。

KubernetesノードとPodの違い

Kubernetesはコンテナ、Pod、ノードで構成されています。先ほどのコンテナとPodの違いに続き、今回はノードとPodの違いを見てみます。Podが貨物なら、ノードはその貨物を運ぶ運送パートナーに相当します。

ノードは、物理機または仮想マシンとして存在するk8sクラスター内の要素です。ノードの役割は、Podを動作させるための環境を提供することです。

各Podはノード上で特定のメモリを要求します。ノードはアプリが動作するための理想的なホスティング環境を提供し、Podはアプリの定義や展開において重要な役割を果たします。

PodはKubernetesのワークロードにとって欠かせない存在であり、ノードはKubernetesインフラの根幹となります。ノードはPodのホスティングに必要ですが、ノード自体はPodに依存しません。

結論

Podはシームレスなワークロード展開を可能にするため、Kubernetesにおいて重要な役割を担っています。本記事では、Podについて詳しく解説しました。主なポイントは以下の通りです:

  • Podは実行可能な最小のk8s単位である
  • コンテナを内包し、ノード上で動作する
  • 1個または複数のコンテナを含めることができる
  • Podリミットや制約を定義することで、適切な利用が保証される

Kubernetesを利用する際には、Podの理解とその処理について知識を深めることが重要です。

FAQ

参考資料

最新情報を購読

更新日:
February 27, 2025
学習目標
最新情報を購読
購読
関連トピック