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の実践ステップ
- コンテナの基本(イメージ、コンテナ、ボリューム)を、先に理解する。
- 小さな検証環境で、公式の例の Pod を1つ動かしてみる。
- Pod を直接作る方法と、Deployment 経由で作る方法の違いを、体験する。
- Pod を1つ削除して、Deployment が補充する様子を確認する。
- 残したいデータの置き場所(ボリューム)を設計する。
- 設定ファイルを、バージョン管理に入れる。
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の関連項目
- Kubernetes
- Docker
- Dockerのボリューム
- コンテナと仮想マシンの違い
- AWS・Azure・Google Cloudの比較
出典(一次情報)
本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。