目次
Kubernetes Podの基本操作、よくあるエラーの解決方法も紹介
近年、コンテナ技術の進化により Docker の利用が広まり、オーケストレーションシステムを提供する Kubernetes が注目されています。
本記事では、 Kubernetes の最小管理単位である Pod について、概要、特徴、メリット、ベストプラクティス、セキュリティポリシーについて解説します。Pod の基本操作や、よくあるエラーの解決方法も紹介しますので参考にしてください。
1. Podとは
Pod とはアプリケーションが動作する Docker コンテナの集合体であり、 Kubernetes 上でデプロイするための最小単位です。 Pod 内では、コンテナが実行され、 Pod が作成されると Cluster 内の Node 上で実行されるように割り当てられます。
それぞれのコンポーネントの違いについて
Pod について理解するために、まず初めに混同されやすいCluster 、 Node との違いについて解説します。
Cluster
Cluster は、 Kubernetes でコンテナ化されたアプリケーションをデプロイ、管理、スケーリングするための複数の Node で構成された環境です。
※参考:Kubernetesクラスターの基礎知識と導入方法、運用を意識した設計のベストプラクティス
Node
それに対し Nodeは Kubernetes Cluster 内の物理または仮想のマシンを指し、コンテナが実際に実行される場所です。
Pod
Pod は Kubernetes 上の最小デプロイ単位であり、 1 つ以上のコンテナをまとめています。Pod ではコンテナ間で共通のボリュームや IP アドレスを共有することが可能です。

このように Pod は Kubernetes においてアプリケーションやサービスが実際に実行される最小単位であることがわかります。
2. Podの機能
Pod は、クラウドネイティブアプリケーションのデプロイと管理において中心的な役割を果たす機能を持っています。ここでは、Pod の主な機能を紹介します。
複数コンテナの相互通信
Pod 内には複数のコンテナが存在し、コンテナは同じ Pod 内で同じネットワーク名前空間、ストレージ名前空間、 IP アドレスを共有することが可能です。
リソースの共有
Pod 内のコンテナは同じホスト上で実行され、 CPU 、メモリ、ストレージ、ボリュームなどのリソースを共有します。
ネットワーキングでは、各 Pod には一意の IP アドレスが割り当てられ、 Pod のすべてのコンテナは、 ネットワーク名前空間を共有し、その中でIP アドレスとネットワークポートを共有します。
ストレージ共有では、 Pod は複数の共有ストレージボリュームを指定することが可能です。それにより Pod 内の全てのコンテナは、この共有ボリュームにアクセスし、データを共有できます。
アプリケーションのランタイム環境
Pod 内のランタイム環境は、 Linux ネームスペース、 cgroups (コントロールグループ)、共有ファイルシステムなどを利用してアプリケーションのプロセスを分離し、制御できます。
3. Podのメリット
ここでは、前項で解説した Pod の機能から得られるメリットについて解説します。
アプリケーションのグルーピングができる
同じ Pod 内に関連するアプリケーションコンポーネントをまとめられるため、これによりコンポーネント間の通信が簡単に実現できます。
柔軟性と拡張性
Pod はクラスタ内で、複数のコンテナが同時にスケジュールされ、共有されたリソースを利用することができ、リソースの利用を最適化できます。
さらに、それぞれが異なる役割や機能を担当できるため、柔軟でモジュラーなアーキテクチャを構築することも可能です。
障害耐性と自動修復
Pod はクラッシュした場合に自動的に再起動されるため、アプリケーションの障害耐性向上につながります。
ホストからの隔離
Pod 内のコンテナは同じホスト上で実行され、それぞれが独自のLinuxネームスペースとcgroupsを持ちます。 相互に隔離されていることで、互いに影響を受けることなく動作することが可能です。
4. Podの構成モデル
Pod の構成モデルには、シングルコンテナ Pod やマルチコンテナ Pod などがあります。ここでは、それぞれの特徴について解説します。
シングルコンテナPod
シングルコンテナ Pod は、1 Pod = 1 コンテナ構成のモデルです。 Kubernetes では最も一般的なユースケースであり、ユーザーは Pod を単一のコンテナとして考えることができるシンプルな構成モデルとなっています。
シングル Pod は、アプリケーションが複数のプロセスやコンポーネントで構成されている場合でも、それらを同じPod内で実行できます。そのため、デプロイ、スケーリング、トラブルシュートまで、一連の管理、運用を容易に行うことが可能です 。リソースを最適に利用し、コストパフォーマンスの向上が期待できます。
マルチコンテナPod
マルチコンテナ Pod は、複数のコンテナが同じ Pod 内に存在するモデルです。それぞれが独自のネットワーク名前空間およびストレージを持ち、通信はネットワークを介して行われます。
マルチコンテナPodでは、異なるプロセスやコンポーネントが協調して作業する場合において、共有のリソースを利用できます。共通のリソースの共有やマイクロサービスアーキテクチャのサポートにより、柔軟性と拡張性が向上するのがメリットです。
以上のように、シングルコンテナPodは通常 1 つのアプリケーションを実行する構成モデルとなっています。一方、マルチコンテナ Pod は関連するが異なるタスクやプロセスを持つ複数のコンテナを同じ Pod 内で実行することができる構成モデルです。それぞれメリットがあるため、環境に合わせた構成モデルを選定するようにしましょう。

5. Podを起動する方法
Podを起動する方法は、 GUI (Azure Portal)を使う方法と CLI (kubectl)を使う方法の大きく2つです。ここでは、それぞれの起動方法を紹介します。
GUI(Azure Portal)を使う方法
GUI ( Azure Portal )の場合、下記の流れで Pod を起動できます。
- Azure Portal にサインインする
- AKS クラスターのリソースに移動する
- サービスメニューから「 Kubernetes リソース」を選択する
- 「ワークロード」タブで、クラスターにデプロイされているポッドに関する情報を確認する
CLI(kubectl)を使う方法
kubectl は、 Kubernetes クラスターを管理するツールです。Pod の作成や管理、削除、ログ確認など、さまざまな操作を実施できます。
kubectl で Pod を起動させる方法は「 kubectl run コマンドを使用する方法」と「 YAML ファイルを使って起動する方法」の2つです。kubectl のインストール方法については下記の公式ドキュメントを参考にしてください。
GUI ( Azure Portal )は直感的な操作が可能であり、 Pod の状態を視覚的に確認できるのがメリットです。CLI ( kubectl )は高速な操作が可能であり、スクリプト化や自動化なども行えます。
初心者で Kubernetes の操作に慣れていない場合は、 GUI ( Azure Portal )がおすすめです。Pod の作成・削除・スケールを素早く実行したい場合、複数の Pod や大規模なクラスターを運用している場合は、 CLI ( kubectl )が適しています。
6. Podの基本操作
ここでは、 Pod の基本操作を紹介します。よく使うコマンドをまとめましたので、ぜひ参考にしてください。
Podの一覧を取得する
Pod の一覧を表示させるには、基本的に「kubectl get」のコマンドを使用します。以下のコマンドを入力することで、さまざまな情報を一覧として表示させることが可能です。
コマンド | 目的 |
---|---|
kubectl get pods |
Pod一覧を表示 |
kubectl get pods -o wide |
ノード名などの追加情報を含めてPod一覧を表示 |
kubectl get replicationcontroller <rc-name> |
指定した名前のReplicationControllerの一覧を表示 |
kubectl get ds |
DaemonSet一覧を表示 |
kubectl get pods --field-selector=spec.nodeName=server01 |
server01ノードで実行中のPod一覧を表示 |
Podの詳細情報を確認する
Pod の詳細情報を確認する際は「 kubectl describe pods 」のコマンドを使用します。コマンド例は下記のとおりです。
コマンド | 目的 |
---|---|
kubectl describe nodes <node-name> |
Node <node-name> の詳細を表示 |
kubectl describe pods/<pod-name> |
Pod <pod-name> の詳細を表示 |
kubectl describe pods <rc-name> |
ReplicationController <rc-name> が管理しているすべてのPodの詳細を表示 |
kubectl describe pods |
すべてのPodの詳細を表示 |
Pod内のコンテナにアクセスする
Pod 内のコンテナにアクセスするには「 kubectl exec 」のコマンドを使用します。コマンド例は下記のとおりです。
コマンド | 目的 |
---|---|
kubectl exec <pod-name> -- date |
Pod <pod-name> から、'date' を実行している時の出力を取得 |
kubectl exec <pod-name> -c <container-name> -- date |
Pod <pod-name> のコンテナ <container-name> から、'date' を実行している時の出力を取得 |
kubectl exec -ti <pod-name> -- /bin/bash |
TTYを取得し、Pod <pod-name> から/bin/bash を実行 |
Pod 内のログを確認する
Pod 内のログを確認する際は「kubectl logs」のコマンドを使用します。コマンド例は下記のとおりです。
コマンド | 目的 |
---|---|
kubectl logs <pod-name> |
Pod <pod-name> のログのスナップショットを表示 |
kubectl logs -f <pod-name> |
Pod <pod-name> から、ログのストリーミングをスタート |
リソース使用状況を確認する
リソース(CPU やメモリー、ストレージなど)の使用量を確認する際は「kubectl top [flags] [options]」のコマンドを使用します。
7. Podでよくあるエラーと解決方法
続いて、 Pod でよくあるエラーと解決方法を紹介します。トラブルシューティングの際に参考にしてください。
Podが何度もクラッシュする
一つ目の紹介するエラーは、 Pod 内のコンテナが起動直後に異常終了し、 Kubernetes が自動的に再起動を繰り返す状態です。この状態は「 CrashLoopBackOff 」とも呼ばれています。
【解決方法】
- まずはログを確認しましょう。「kubectl logs <Pod名>」のコマンドでコンテナのログを確認し、エラーの詳細を特定します。
- 続いて、詳細情報を取得します。「kubectl describe pod <Pod名>」のコマンドでPodのイベントや状態を確認してください。
- 次に、 periodSeconds 、または timeoutSeconds のパラメータを調整します。
コンテナイメージが取得できない
二つ目が、指定されたコンテナイメージが取得できず、 Pod の起動が遅延している状態です。この状態は「 ImagePullBackOff 」とも呼ばれています。
【解決方法】
- まずは「 kubectl get pods 」のコマンドを実行して、ポッドのステータスが ImagePullBackOff エラーとなっているかを確認しましょう。
- 次に「 kubectl describe 」を実行して、イベント下で特定のエラーがないかを確認します。
- 「 Repository does not exist or no pull access 」と表示されている場合、イメージ名が正しいかを「kubectl describe pod <pod-name>」で確認します。確認したらイメージ名・タグを明示的に指定しましょう。
Q&A
A1:まずは「kubectl get pods」でPodのステータスを確認しましょう。
A2:「kubectl logs <pod-name>」でPodのログを確認します。
8. Podに関するベストプラクティス
続いて、Pod内のコンテナの配置やセキュリティに関するベストプラクティスを紹介します。
Single Responsibility Principle(単一責任の原則)
Single Responsibility Principle(単一責任の原則)は、各コンテナに、1つの役割や責任を持たせる責任の原則です。これを適用することで、コンテナがシンプルで運用・保守の負担を減らせます。
相互に関連するコンテナを同じPodに配置する
一緒に動作するコンテナを同じPod内に配置することで、高いパフォーマンスと低いレイテンシを確保できます。通信のオーバーヘッドを最小限に抑えられるのもメリットです。
サイドカーコンテナを使用する
サイドカーコンテナは、メインアプリケーションコンテナをサポートするために追加される小さなコンテナです。ログの収集や監視用などに向いており、Podのメリットを最大限に活かせます。
Health Checksを実装する
各コンテナに適切なHealth Checksを実装することで、Kubernetesがコンテナの状態を把握し、必要に応じてリスタートや別のノードへの移動を行えます。
Transport Layer Security (TLS)の利用
データの暗号化にはTLSを利用することが推奨されます。TLSを利用すれば、 Pod 間通信が行われる際に 通信内容が暗号化され、中間者攻撃やデータの盗聴を防ぐことが可能です。
RBACの使用

Role-Based Access Control( RBAC )を使用すれば、Podやサービスに対するアクセス権を制御でき、不正なアクセスや権限の乱用を防止できます。
これらのベストプラクティスは、アプリケーションの性質や要件によって異なる場合があります。適切に設計するためには、実際のユースケースに合わせて行うことが重要です。
9. まとめ
Pod は、コンテナ化されたアプリケーションの基本単位であり、複数のコンテナが協調して動作する仕組みを提供します。 Pod の利点は、柔軟性と拡張性の高さです。異なる役割を果たすコンテナを同じ Pod にまとめることで、コミュニケーションやリソースの共有を円滑に行えます。このように Pod は、コンテナオーケストレーションの進化において重要な役割を担っています。
Kubernetes の運用を相談したい

Tag: Kubernetes Pod
Contactお問い合わせ
お見積もり・ご相談など、お気軽にお問い合わせください。