Member-only story

Kubernetes: An Introduction Part II

gavin.zhou
Dec 6, 2022

--

Kubernetesとは何か、どのような目的で使用され、どのような特徴があるのかを学びました。また、ノードとは何か、K8sの基本単位であるPodsについて説明しました。そして、それらがどのように互いに通信するのかを学びました。今回の記事では、さらにいくつかのKubernetesコンポーネントについて説明します。

改めて画像を見ると、NodeJSアプリケーションはMongoDBサーバーと通信していることがわかります。もしMongoDBサーバーが何らかの理由でクラッシュしたらどうなるでしょうか?言うまでもなく、NodeJSはサーバーに接続できなくなります。管理者として最初の仕事は、それを元に戻すことでしょう。

以前のMongoDBインスタンスのプライベートIPは172.16.0.4でした。しかし今回ポッドを再起動すると、新しいプライベート IP アドレスが割り当てられます。例えば 172.16.0.5 という IP を取得するとします。すべてが正しく機能するように、NodeJSのmain.js(またはindex.js)ファイルでIPを変更する必要があります。

そこで、NodeJSアプリケーションを一時的にシャットダウンして IPアドレスを変更して、再度ビルドする必要があります。これは、みなさんのご想像通り、かなり時間がかかり、アプリケーションのダウンタイムを増やすことになります。

同じMongoDBサーバーに依存するNodeJSアプリケーションが5個、10個、20個あったとしたらどうでしょう?すべて停止して、コンフィグレーションファイルに必要な調整をしてから再度構築する必要があります。これで、どれだけの作業負荷がかかるか想像がつくはずです。

サービス

Kubernetesでは、ServiceはPodの論理的な集合と、それらにアクセスするためのポリシーを定義するアブストラクションです。Dependent Podは、サービスのおかげで*疎結合されます。サービスはk8sのコンポーネントで、サービスを提供するためにPodに静的または固定のIPアドレスを割り当てます。一方、Podとサービスのライフサイクルは結合されていません。コンテナがクラッシュしてポッドを再起動しなければならない場合でも、サービスは動作し続けます。これは、IPアドレスが変わらないことを意味します。その結果、NodeJS のコンフィグレーションファイルに新たな変更を加える必要はなくなります。

サービスのタイプ

--

--

No responses yet