Kubernetesの前に知っておきたいコンテナとクラスタリングとは?

本稿では、先日リリースした『WebARENA コンテナサービス』の基本的な使い方を紹介していきます。まずその前段階として、「コンテナ」と「クラスタリング」の基本を解説します。

 

 

■現在のサーバーを支える「仮想化」

■仮想化とコンテナ

■コンテナの主流「Docker」

■多数のサーバーで処理を行う「クラスタリング」

■クラスタリングでのコンテナの有効性

■オーケストレーションツール「Kubernetes」

 

 

■現在のサーバーを支える「仮想化」

インターネットでは様々なサービスが提供されています。Webサイトや電子メールをはじめとし、今ではインターネットのない生活は考えることができません。

こういったサービスは、インターネット上に存在する多数のサーバーによって提供されています。サーバーとは、各種のサービスを提供する働きをするハードウェア・ソフトウェアのことです。サーバーに適したOS(Linuxなど)をコンピュータにインストールし、さらに各種のソフトウェアをインストールして、サーバーとして動作させます。

 

かつてのサーバーは、物理的なコンピュータで提供することが一般的でした。データセンターや、企業のコンピュータルームなどにコンピュータを設置して、そこにソフトウェアをインストールして使っていました。

しかし、ハードウェアの性能が向上し、ソフトウェアの技術も高まったことで、ここ数年では「仮想化」を使う機会が多くなっています。仮想化とは、物理的なコンピュータの上に仮想化機能を提供するソフトウェアをインストールし、その上で複数の仮想的なマシンを動作させることです。

 

現在では一般化が進んでいる「クラウド」でも、仮想化が大きな役割を果たしています。クラウドは、インターネット上のコンピュータを利用して各種のサービスを提供する仕組みですが、そのコンピュータも仮想化されたものを使うことが一般的になっています。

 

 

■仮想化とコンテナ

VPSやクラウドでは、仮想化のソフトウェアによって、物理的なハードウェアと同じように動く仮想マシンを作り、そこにOSやアプリケーションをインストールするという仕組みがよく取られています。基本的に既存のOSがそのまま動作し、また異なるOS(例えばWindowsとLinux)を混在させることもできますので、不特定多数にサービスを提供するクラウドやVPSでは、仮想化が多用されています(図1)。

 

図2ハイパーバイザー型の仮想型の仕組み

図1 仮想化(ハイパーバイザー型)の仕組み

 

ただ、仮想化はハードウェアをエミュレーションするため、動作の際のオーバーヘッドが大きいことや、サーバーの資源(メモリやディスクなど)の利用効率が良くないといったデメリットがあります。

このような中で、「コンテナ」(Container)が注目されるようになりました。コンテナは、OSの上に独立した空間(コンテナ)を複数作り出し、その中でライブラリやソフトウェアを動作させる仕組みです(図2)。

仮想化だと、物理的なハードウェアの場合と同じようにOSの起動/終了を行いますので、起動や終了にはある程度時間がかかります。一方、コンテナはOS上のプロセスの1つとして起動するので、短時間で起動することができます。

また、コンテナではハードウェアのエミュレーションは行わないので、動作のパフォーマンスが良く、物理マシンの資源を効率的に利用できます。

 

 

図2 コンテナの仕組み

図2 コンテナの仕組み

 

 

■コンテナの主流「Docker」

コンテナ自体は以前からある技術で、コンテナ機能を提供するソフトもいろいろあります。それらの中で、近年では「Docker」がよく使われています。

Dockerは、米国Docker社が開発したコンテナ管理ソフトです。アプリケーションやライブラリなどを「コンテナイメージ」にまとめて、それを元に素早くコンテナを起動することができます。

また、作成済みのさまざまなコンテナイメージが、「Docker Hub」というサイトで配布されています。それを使えば、よくありそうな環境(例:WordPressインストール済み環境)を素早く作ることができます。

Dockerが出た当初は「開発用の使い捨て環境を素早く作ることができる」という点がよく取り上げられていました。しかし、現在では開発のためだけでなく、実運用のサーバーを構築するのに使用されています。

 

 

 

■多数のサーバーで処理を行う「クラスタリング」

大規模なWebサイトなど、多数のアクセスをさばく必要がある場合、1台のサーバーだけで運用しようとすると、負荷がかかりすぎてサーバーがダウンしてしまうことがあります。

また、1台のサーバーだけだと、そのサーバーが故障した際に、システムを止めざるを得なくなります。しかし、システムの運用を止めることができない場合も多く、1台のサーバーだけで運用するには問題があります。

そこで、多数のサーバーを組み合わせることがよく行われています。このような仕組みのことを、「クラスタリング」(Clustering)と呼びます。これにより、高い負荷がかかる処理を、複数のサーバーに分散することができ、システム全体の性能を高めることができます。また、多数のサーバーで同じ処理を実行できるようにしておけば、その中の1台のサーバーが故障などで停止したとしても、残りのサーバーで処理を続行することができ、システムを止めずに運用することができます。

 

 

■クラスタリングでのコンテナの有効性

クラスタリングが必要になるような負荷の高い処理を行う場合、負荷が大きく増減することもよくあります。例えば、ショッピングサイトを運用する場合、キャンペーンやセールの際には負荷が集中し、普段の何倍にもなります。

そのような高負荷の時のために、常に多数のサーバーを起動しておくと、低負荷の時にサーバーが無駄になってしまいます。そこで、負荷の変動が大きいシステムでは、負荷の状況に応じて動的にサーバーの数を増減させるような仕組みが取られています。動的にサーバーを増やすことを「スケールアウト」と呼び、減らすことを「スケールイン」と呼びます。

仮想化によって、サーバーを動的に増減させることは、以前よりも行いやすくなっています。しかし、仮想化ではサーバーの起動や終了にある程度時間がかかりますので、スムーズなスケールアウト/スケールインを行いにくいです。

 

 

■オーケストレーションツール「Kubernetes」

コンテナはクラスタリングに非常に役立ちますが、「多数のコンテナをどのようにうまく管理するか」という点が問題になってきます。手作業で管理するのは大変ですし、操作ミスなどを起こすこともあります。

そこで、多数のコンテナを管理するソフトが使われるようになりました。このようなソフトを総称して、「オーケストレーションツール」(Orchestration Tool)と呼びます。

オーケストレーションツールにもいろいろな製品がありますが、その中で「業界標準」と言えるソフトが、本連載で紹介する「Kubernetes」です。次回の記事では、Kubernetesの基本的な仕組みを解説します。

 

 

 

 

 

うちだ
サービスクリエーション本部所属        (監修:とみなが)       

オススメ記事