コンテナ・クラウド基盤

Kubernetesのpodとはコンテナとの関係とDeploymentの役割

Kubernetesのpod(ポッド)とは、1つ以上のコンテナをまとめた最小のデプロイ単位です。コンテナとの違い、Podを直接作らない理由、Deploymentなどとの関係を公式ドキュメントから整理します。

公的機関・公式資料などの一次情報と照合して作成しています。このサイトについて

Kubernetesのpodとは

Kubernetes の Pod(ポッド)とは、Kubernetes で作成・管理できる、最小のデプロイ単位です。Kubernetes の公式ドキュメントでは、Pod は1つ以上のコンテナを含み、ストレージとネットワークを共有し、同じ場所(同じノード)で一緒に動かされるもの、と説明されています。アプリ固有の「論理的なホスト」のようなものと考えると、分かりやすいです。

Docker を使っていた人は、「Kubernetes で動かす単位はコンテナだ」と考えがちですが、Kubernetes が直接扱う単位はコンテナではなく Pod です。コンテナは、Pod の中に入って動きます。この違いが、Kubernetes の最初の分かりにくさです。

基本(Podの特徴)

公式ドキュメントに記載されている、Pod の特徴を整理します。

特徴 内容
1つ以上のコンテナ 通常は1つ。密接に連携する複数のコンテナを入れる場合もある
共有する資源 ネットワーク(共有のIPアドレス)とストレージ(共有のボリューム)
同じ場所で動く 同じ Pod のコンテナは、常に同じノードに一緒に配置される
使い捨て 削除されるまで動く一時的な存在。壊れたら、作り直される

公式ドキュメントの Pod の定義の例です。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

使うパターンは、主に2つです。最も一般的なのは、1つの Pod に1つのコンテナを入れる形です。もう1つは、密接に結びついた複数のコンテナを、1つの Pod に入れる形で、たとえば、アプリと、そのログを集める補助のコンテナを組み合わせる場合などです。

Kubernetesのpodの具体例

公式ドキュメントでは、Pod を直接作ることは、通常、推奨されないとされています。通常は、次のような、ワークロードを管理するリソースを使って Pod を作ります。

リソース 用途
Deployment 複製されたアプリケーションの管理(同じ Pod を複数動かす、更新する)
StatefulSet 状態を持つアプリケーション用
Job 一度きり、または定期のバッチ処理用
DaemonSet すべてのノードで1つずつ動かしたいもの用

たとえば、Webアプリを3つ並べて動かしたいときは、Pod を3つ手で作るのではなく、Deployment に「この Pod を3つ動かす」と指定します。1つの Pod が故障すると、コントローラーが、新しい Pod を作って補います。Pod は使い捨てなので、特定の Pod を、大切に守るのではなく、壊れたら入れ替える前提で設計します。

この前提から、Pod の中に保存したデータは、Pod が消えると失われます。残したいデータは、ボリュームなど、Pod の外に保存する設計が必要です。

Kubernetesのpodの実践ステップ

  1. コンテナの基本(イメージ、コンテナ、ボリューム)を、先に理解する。
  2. 小さな検証環境で、公式の例の Pod を1つ動かしてみる。
  3. Pod を直接作る方法と、Deployment 経由で作る方法の違いを、体験する。
  4. Pod を1つ削除して、Deployment が補充する様子を確認する。
  5. 残したいデータの置き場所(ボリューム)を設計する。
  6. 設定ファイルを、バージョン管理に入れる。

Kubernetesのpodの注意点

  • Pod は使い捨てです。Pod の名前や IP アドレスは、作り直しで変わる場合があるため、固定のものとして扱いません。
  • Pod を直接作ると、故障時に自動で補充されません。通常は、Deployment などを使います。
  • 1つの Pod に、無関係なコンテナを詰め込まないでください。密接に結合したものだけにします。
  • Kubernetes は、運用の知識が必要です。小規模なシステムでは、より簡単な方法も検討します。
  • 仕様は更新されます。最新の公式ドキュメントを確認してください。

Kubernetesのpodでよくあるミス

  • Pod を直接作り、故障時に復旧しない。
  • Pod の中にデータを保存して、作り直しで失う。
  • Pod の IP アドレスを、固定のものとして設定に書く。
  • 複数のアプリを、1つの Pod に詰め込む。

Kubernetesのpodのチェックリスト

  • Pod とコンテナの違いを説明できるか。
  • Deployment などの管理リソースを通じて作っているか。
  • 残したいデータを、Pod の外に保存しているか。
  • IP アドレスなどを、固定のものとして扱っていないか。
  • 運用の体制と学習の計画があるか。

KubernetesのpodのFAQ(よくある質問)

Q. Pod とコンテナは、何が違いますか。
A. コンテナは1つのアプリを動かす単位で、Pod は、1つ以上のコンテナをまとめて、Kubernetes が管理する単位です。

Q. 1つの Pod に、複数のコンテナを入れるのは、普通ですか。
A. 公式ドキュメントでは、1つの Pod に1つのコンテナが最も一般的で、複数は密接に結合した場合に使うと説明されています。

Q. Pod は、いつまで動きますか。
A. 削除されるまで動く一時的なものです。壊れた場合は、管理リソースが、新しい Pod を作ります。

筆者の見解(Kubernetesのpod)

Pod の理解で大切なのは、壊れて当たり前、入れ替えて当たり前という前提に、考え方を切り替えることだと考えます。従来のサーバーのように、特定の1台を守る発想のままでは、Kubernetes の利点が活きず、データの消失などの事故も招きやすいためです。私見では、最初の検証では、Pod を1つ削除して、自動で補充される様子を実際に見ておくと、この前提が、実感として理解できます。

Kubernetesのpodの関連項目

出典(一次情報)

本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。