最近注目されているAWS , Docker, Kubernetesを学習する前に仮想化について学習をしたのでざっくりではありますがまとめて行きます。
※あくまで仮想化についての記事なのでAWS , Docker, Kubernetesについてのハンズオンや技術的な解説はしていません。
サーバーの仮想化とは
1台のサーバー上で複数OSを同時動作させることで、複数の業務システムの処理を可能にする技術です。物理的には1台のハードウェア(PC)ではあるものの、複数のサーバー(論理サーバー)が稼働する仮想的サーバー環境を構築でき、多くのアプリケーションにサーバーリソース(サーバー本体、外部記録装置など)を割り当てることができます。これによって、ひとつの業務システムがサーバーを独占してしまうような無駄がなくなり、サーバーリソースをより有効に活用することができます。
サーバーのハードウェア性能の向上に伴い、サーバー仮想化技術を用いることで、多くの業務処理を行えるようになるだけでなく、既存の複数のサーバーを1台の高性能サーバーに統合することも可能になります。
長い説明になってしまいましたが端的に言うと仮想化を実現するソフトウェアで物理的には一台のハードウェアにも関わらず複数の独立したサーバーとして機能させる技術です。
サーバー仮想化を実現させるソフトというのは**"ハイパーバイザー"**です。
サーバー仮想化の例
構成1
DBやWebなどのソフトウェアは一台のハードにインストールをして稼働させることは可能ですが、そのハードに障害が起きてマシンを停止した場合にはそのハード上で稼働しているサービス(DB/Webサーバーなど)を全て停止することになる。
また、悪意のある第三者にホストが侵入されroot権限を奪われた場合、全てのサービスに対して改竄などの不正行為が行われる可能性がある。
このために次の構成2に比べて、セキュリティは弱くなる。
構成2
1台のハードでありながら、仮想化技術を使い各サーバーを独立させて稼働している。
仮想化を実現するハイパーバイザー上に仮想マシンを構築しその上にゲストOS(CentOSやUbuntuなど)を稼働させます。
ゲストOSは仮想マシンごとに異なるOSを利用することが可能であり、そのゲストOSに対してDBやWebサーバーソフトフェアをインストールして利用することが可能。
ハイパーバイザー
ハイパーバイザーは、その上で仮想マシンを稼働させるソフトウェア。
典型的なハイパーバイザーには2種類のタイプがある。
1.ベアメタル型
ハイパーバイザーが直接ハードウェア上で動作し、全てのOSはそのハイパーバイザー上で動作する方式。 Xenがこの方式
2.ホスト型
ハードウェア上でOS(ホストOS)が動作し、その上でハイパーバイザーが動作する方式。
VMwarePlayerやVirtualBoxがこの方式
クラウドによる仮想環境
クラウドでは、ハイパーバイザーによる仮想環境の上で多数のVM(仮想マシン)インスタンス(AWSで言えばEC2インスタンス)を稼働させることができる。
クラウドのVMインスタンスは容易に作成と削除ができるので、負荷の状況に応じて手動あるいは自動でインスタンスの個数を増減することで処理能力を調整ができる。(AWSのELBやAutoScalingを用いる)
AWSでは、ハイパーバイザーとしてXenが使われており、最近ではKVMも導入がされたみたいです。
Googleが提供するクラウドのGCPではハイパーバイザーとしてKVMが使われている。
最後に
AWSやGCPなどのクラウド技術を使うにしてもそれを支えてる技術は仮想化の技術です。
クラウド技術だけを学ぶのではなく基盤となる技術を学習できてよかったですし、AZと呼ばれるAWSのデータセンターが存在する限りオンプレミスの知識も必要になってくると思いますしまだまだインフラについて学習すべきことが多いなと感じます。