K8s 5分講座#10 マルチコンテナPod

Monta

今回は「マルチコンテナPod」について話す。

はかせ
はかせ

通常Podはコンテナと1対1の関係にある、と前回の講義で仰ってませんでしたっけ?

もんた
もんた

あぁその通りだ。だから今回のはあくまで例外のユースケースとして捉えてくれ。

はかせ
はかせ

利用用途によってはこんなのもアリよ、という前回の補足という位置づけですね

もんた
もんた
1

マルチコンテナが有用なケース

結論から言うと、ヘルパーコンテナを用いる場合はマルチコンテナが良いと考えている。

はかせ
はかせ

ヘルパーコンテナ…?アプリケーションを乗せている通常のコンテナを助けるみたいな感じですかね?

もんた
もんた

具体的には、データの保存やバックアップ、ログの集約、監視などの機能を提供し、メインのアプリケーションコンテナを補完する役割を果たす。

はかせ
はかせ

確かにアプリと一緒のコンテナだと管理もごちゃごちゃしそうだし、開発者が分かれている場合は別に作りたいというケースもありそうですね。

もんた
もんた

そうだな。システムのより効率的な運用を求める場合や、管理の簡素化を意図する場合に、ヘルパーコンテナをアプリケーションコンテナと別に置くケースがある。

はかせ
はかせ
2

マルチコンテナを用いない場合の構成

説明を分かりやすくするため、一旦K8sから離れてPodの無い世界、シンプルなDockerコンテナの場合どうなるかを解説する。

はかせ
はかせ

Podでカプセル化するのではなく、コンテナ単体で稼働させる世界ですね。

もんた
もんた

まずdocker run appコマンドでアプリケーションをデプロイする。負荷が高まると更に、docker runコマンドを実行して同じアプリケーションインスタンスをデプロイする。

はかせ
はかせ
$ docker run app
$ docker run app
$ docker run app
$ docker run app

手動でスケーリングしていくイメージですね。現状は特に問題なさそうです。

もんた
もんた

その後、アーキテクチャが変更され、外部からデータを処理したりフェッチしたりすることでWebアプリケーションを支援する、新しいヘルパーコンテナができたとする。

はかせ
はかせ

メインのアプリケーション用コンテナとは別にヘルパーコンテナを作るんですね。

もんた
もんた

ヘルパーコンテナはアプリケーションコンテナと1対1の関係を維持し、直接通信させるために、関連情報を整理する必要がある。例えば下記のようなイメージだ。

はかせ
はかせ
$ docker run helper -link app1
$ docker run helper -link app2
$ docker run helper -link app3
$ docker run helper -link app4

app1のコンテナ用のヘルパーコンテナを立ち上げる、と言う形で1つずつ関連付けするんですね。

もんた
もんた

そうだ。リンクやカスタムネットワークを使って、これらのコンテナ間のネットワーク接続も自分で確立する必要があるということだ。

はかせ
はかせ

データを保存するストレージ領域を置く場合は、共有可能なボリュームを作成し、コンテナ間で共有する必要がありそうですね。

もんた
もんた

あぁ、規模が大きくなればそれらの設計を管理するのも一苦労だ。更にアプリケーションコンテナがダウンしたら、ヘルパーも削除してあげる必要がある。

はかせ
はかせ

逆もまた然りですね。新しいアプリケーションコンテナを作ったら、関連付けたヘルパーコンテナを都度立ち上げることになりますね。

もんた
もんた
3

Podがある世界

再びK8sの世界に戻ってこよう。K8sは、Podを使うことで今説明したことを全て自動的に行ってくれる。

はかせ
はかせ

アプリコンテナ作って、ヘルパーコンテナ関連付けて、設計を書き直して…ということから解放されますね。

もんた
もんた

Podがどのようなコンテナで構成されているかをマニフェストに定義するだけで、デフォルトでPod内のコンテナは同じストレージ、同じネットワーク空間にアクセスすることができ、作成・破棄も連動して行われる。

はかせ
はかせ

Pod内の同じネットワーク空間を共有しているから、互いをローカルホストとして直接通信でき、同じストレージスペースも共有できるんですね。

もんた
もんた

仮にアプリケーションがそれほど複雑で無く単一のコンテナで事足りたとしても、K8sではPodを作成する必要がある。

はかせ
はかせ

コンテナとPodは1対1が原則ですからね。

もんた
もんた

しかしこれは長い目で見れば、アプリケーションが将来的なアーキテクチャの変更やスケールに対応できるようになった、とも言える。

はかせ
はかせ

おおぉ、良いじゃないですかK8s。魅力が少し分かってきました。

もんた
もんた

あぁ。但しマルチコンテナは稀なユースケースであり、原則はコンテナとPodは1対1ということは念頭に置いといてくれ。

はかせ
はかせ
今日のポイント
  • 1つのPod内に、通常は同じ種類のコンテナを複数置くことはしない。
  • 但し、アプリケーションコンテナとは別にヘルパーコンテナを用いる場合、マルチコンテナが有用。
  • Pod内は同じネットワーク空間を共有するため、互いにローカル通信でき、ストレージも共有できる。
Coffee Break

放課後

単にカッコイイからPodでカプセル化したわけでは無かったのですねー

もんた
もんた

そんな見た目の趣味嗜好ではなく、機能美を追求した形と言えるかもしれないな。

はかせ
はかせ

Podの定義をマニフェストに書くだけで、その通りに構築・維持してくれるK8sが求められる理由も分かってきました。

もんた
もんた
次の講義はこちら
K8s 5分講座#11 Podのデプロイ 
K8s 5分講座#11 Podのデプロイ 
ABOUT ME
もんた
もんた
システムエンジニア歴15年、2児の父。
ITの世界に飛び込んで以来、仮想サーバ・ネットワーク・データベース・クラウド・コンテナ等、
様々な分野の業務に携わりながら、異動のたびに何度も”初心者”になり、学習を繰り返す。

会話形式でサラッと読み進められるIT技術講座を展開中。
読みやすいのに気づいたら基礎から応用まで身に付いている!そんな記事が目標です。
記事URLをコピーしました