Linux
 Computer >> コンピューター >  >> システム >> Linux

Kubernetes Pod(ポッド)とは?基本概念と管理方法を徹底解説

KubernetesのPod(ポッド)は、オープンソースのコンテナスケジューリング・オーケストレーション環境であるKubernetesにおいて、デプロイ可能な最小のコンピューティング単位です。

Podは、連携して動作する1つ以上のコンテナをグループ化したものです。PodはNode(ノード)上に配置され、複数のPodが同じNodeを共有することもあります。各Pod内のコンテナは、ホストとなるNodeのネットワークやストレージなどのリソースを共有するとともに、コンテナの実行方法を定める仕様も共通化されます。「Pod」という名称は、エンドウ豆のさやなど自然界の「莢(さや)」になぞらえた、分かりやすい名前です。1つのPodは多数のコンテナを格納できますが、通常は1つのコンテナ、あるいは密接に統合された少数のコンテナのみで構成されるのが一般的です。

Podの中身はまとめてスケジューリングされ、同じ場所に配置されます。これは、アプリケーション固有の論理ホストをモデル化したものと言えます。Kubernetesユーザーは、密接に統合されたアプリケーションコンテナ同士を同じPodに配置すべきです。Podを使わなければ、こうしたアプリケーションやサービスは同一の仮想マシンまたは物理マシン上で動作させる必要があります。

Podの共有コンテキストは、Linux Namespaceやcgroupといった分離機能によって設定されます。さらに、個々のPodに対してはアプリケーション単位での追加的な分離も可能です。

運用者は環境変数を使って、Pod、Node、コンテナに関する情報を公開できます。Podの環境変数は、Pod内のコンテナで動作するアプリケーションに対し、必要なリソースの場所やコンポーネントの設定方法を伝える役割を果たします。この情報は実行時にコンテナへと注入されます。Nodeにも環境変数は存在しますが、これらはコンテナには公開されません。なお、Kubernetesの環境変数は静的に定義されるか、ユーザーによって記述されます。

Kubernetes Podの管理

Kubernetesは、Dockerコンテナランタイムに加えて、CoreOS rktやCRI-O(Open Container Initiativeに準拠したランタイムを使用するKubelet Container Runtime Interface)もサポートしています。

ユーザーが直接Podを作成することもできますが、実際にはKubernetes Controllerが高可用性や水平スケーリングのためにPodとそのレプリカを作成するケースがほとんどです。たとえば、ユーザーが新しいPodインスタンスを3つ要求すると、KubernetesはAPIレベルのリソースとして3つのPodを生成します。続いてスケジューラが、Kubernetesユーザーのポリシーに基づいて各Podに適切なNodeを見つけ出し、そこへPodを配置します。

同じPod内のコンテナは、IPアドレスとポート空間を共有します。そのため、コンテナ同士はlocalhostを通じて互いを検出できます。また、同じPodに割り当てられたアプリケーションは、Podにアタッチされた共有ボリュームへアクセスできます。

さらにPodでは、POSIX共有メモリやSystemVセマフォといった標準的な通信手段を利用したコンテナ間通信も可能です。一方、異なるPodに属するコンテナ同士はIPアドレスが異なるため、IPCプロトコルを使うことはできません。ただし、Kubernetesではサービス(Service)を介してPod間通信を簡単に実現できます。たとえば、アプリケーションのフロントエンドがあるNode上のPodで稼働している場合、バックエンドは同じNode上にあっても、別のNode上にあっても、さらには複数のNodeに分散した10インスタンスであっても問題ありません。フロントエンドのPodは、バックエンドのPod(群)を表すサービスに接続するだけで済みます。

Kubernetes Pod(ポッド)とは?基本概念と管理方法を徹底解説
  1. Kubernetes(クバネティス)とは?基本概念から仕組み、活用例まで徹底解説

    Kubernetes(クバネティス)は、Dockerなどのコンテナアプリケーションを管理するためのオープンソースプラットフォームです。複数のホストにまたがるコンテナの自動化やスケーリングを実現し、デプロイ作業を大幅に高速化します。これを実現するために、Kubernetes APIなどの内部コンポーネントや、Kubernetes上で動作するサードパーティ製の拡張機能が活用されます。 本記事では、Kubernetesの基本的な概念とともに、AzureやGoogle Cloudといった大手クラウドプロバイダーがこぞってKubernetesサービスを提供するなど、サーバーマーケットに大きな変革をもた

  2. クラウド移植性は本当に実現できるのか?コンテナの役割と限界を徹底解説

    クラウド移植性(ポータビリティ)とは、文字どおり、あるクラウド環境から別のクラウド環境へ移行することを指します。例えば、Microsoft AzureからAWS(Amazon Web Services)への移行などがその代表例です。ただし、移行プロセスそのものは、状況やコンテナの活用方法によって大きく左右されます。コンテナとは何か?コンテナとは、さまざまなアプリケーションをある環境から別の環境へ移動させるための仕組みです。開発者は、KubernetesやDockerといったコンテナ標準をサポートするプラットフォーム上で展開できるよう、ソフトウェアをパッケージとしてカプセル化するためにコンテナを