はじめに
Kubernetes(k8s)における用語として以下の記事にてクラスタとマニフェストについて解説しましたが
その中にてコンテナの集合を「Pod」と呼び、k8sではPodを最小単位として扱うと記載しました。が、具体的にPodとは何者なのか?IPアドレスはどうなっているのか?などの疑問点はあると思います。
本記事ではもう少し踏み込み、具体的なPodのイメージができるよう分かりやすく説明します。
Podとはコンテナの集合?
kubectlコマンドにてKubernetesクラスタに反映されて用意されるPodですが、
$ kubectl apply -f hoge.yaml
以下の図がクーバネテスの全体像です。
Nodeと呼ばれるサーバに対してコンテナを展開し、そのコンテナ群がPodとして一単位にまとまっています。
この集合で何が管理されているのかと言えば、同一のPodに属するコンテナは同一のマシンに起動し、ネットワークインターフェースやストレージ割り当てを共有します。
そしてPod内のコンテナではIPアドレスも共有するところが肝です。
仮想IPアドレスを共有する
Podには異なるサービスを提供するコンテナをまとめることができます。つまり、コンテナ毎にIPアドレスを持たせると思いがちですが、実際はそうではなくPodに対してIPアドレスを持たせます。もちろん、このIPアドレスはNodeが持つIPアドレスとは別なので仮想IPアドレスと呼んだりします。
他のコンテナやユーザはどのように同じポッド内にいるコンテナに接続するのでしょうか。
ポート番号で分けています。
例えばWebサーバとSYSLOGサーバを同じPodとした時、それぞれの受付ポートは80と514です。
コンテナ名をconAとconBとすると以下のようになります。二つのPod1、Pod2で展開すると以下のようになります。
Pod1 | conA | 80 |
Pod1 | conB | 514 |
Pod2 | conA | 80 |
Pod2 | conB | 514 |
ここでPod1の仮想IPをX.Y.Z.3、Pod2の仮想IPをX.Y.Z.4とすれば
Pod1のWebサーバにアクセスしたければX.Y.Z.3:80に対して接続を行います。
要は、PodがIPアドレスでコンテナがポート番号を担っているイメージです。
これはコンテナがプロセスであることを考えると、分かりやすいです。
逆に言えば、同一Pod内では同じポートを公開しているコンテナを作成できない、という点も重要なポイントです。
終わりに
ポッドと言えばPodはコンテナの集合という説明がされて分かりづらいですが、
コンテナではなくPodに対してIPは割り当てられ、そのPodの中にプロセス(コンテナ)が複数起動していると考えると一気にPodの理解が進むと思います。
以上、KubernetesにおけるPod入門でした。