Skip to content
Latchkey

Kubernetes の pod とは?最小のデプロイ可能な単位

pod は Kubernetes の最小のデプロイ可能な単位です: ネットワーク名前空間とストレージを共有し、一緒にスケジュールされる、密結合な 1 つ以上のコンテナです。

Kubernetes はコンテナを直接スケジュールしません - pod をスケジュールします。通常 pod は単一のコンテナを保持しますが、並んで実行しリソースを共有する必要のある複数を保持することもできます。pod は意図的にエフェメラルであり、それがその周囲のすべての設計の仕方を形づくります。

pod が共有するもの

pod 内のコンテナは同じネットワーク名前空間を共有し - localhost で互いに到達し IP を共有します - マウントされたボリュームを共有できます。これにより pod は、本当に 1 つの論理単位であるコンテナのための正しいグルーピングになります。

1 つのコンテナか複数か

ほとんどの pod は単一のアプリコンテナを持ちます。複数コンテナの pod は、sidecar(ログシッパーや proxy)や最初に実行される init container のようなヘルパーを追加します。経験則: ライフサイクルを共有しなければならないコンテナだけを co-locate しましょう。

pod はエフェメラル

pod はペットではなく家畜です。node が故障したりスケールダウンしたりすると、pod は削除され、新しいものが別の場所に - 新しい IP で - 作成されます。特定の pod が生き残ることに依存することは決してなく、controller が正しい数を維持することに依存します。

pod を直接作ることはめったにない

  • Deployment は stateless なアプリのために pod を作成・管理する。
  • StatefulSet は安定した識別子を必要とする pod を管理する。
  • Job はバッチ作業のために pod を完了まで実行する。

pod と CI/CD

CI pipeline は pod を所有する controller(例: Deployment)を更新することで deploy し、Kubernetes は新しくビルドされたイメージを実行する新しい pod を展開します。一部の CI システムは、各 job をクラスタ上の pod で実行することさえあります。

重要なポイント

  • pod は最小のデプロイ可能な単位です - ネットワークとストレージを共有する 1 つ以上のコンテナ。
  • pod はエフェメラルです。直接ではなく controller を通じて管理します。
  • ライフサイクルを共有する場合にのみ、コンテナを 1 つの pod に co-locate しましょう。

関連ガイド