Linuxの仮想化技術について
今回の内容
今回は、Linuxがゲストシステムとして使用された仮想化について見ていきたいと思います。
仮想化技術について
仮想化技術とは、ソフトウェアを利用して、物理的に1台のマシン上で複数のプラットフォームを提供する技術になります。
ここでいうプラットフォームというのは、時にOSであったり、時にアプリケーションであったりと様々です。
仮想化技術をしようすることにより、以下のメリットがあります。
・サーバ設置スペースの削減
・新しいサーバが必要になった際、物理サーバを調達せずに済む
・運用や管理の手間が省ける
・消費電力等のランニングコストが抑えられる
仮想化の種類として、ホストOS型、ハイパーバイザー型、コンテナ型の3つがあります。
ホストOS型とハイパーバイザー型
ホストOS型とハイパーバイザー型は、1台の物理マシン上に複数のOS環境を構築する技術となります。
ホストOS型としてよく利用される製品としては、VMware WorkstationやOracle VM Virtual Boxが挙げられます。
一方、ハイパーバイザー型はVMware vSphere ESX、Xen、KVM等が挙げられます。
両者の大きな違いは、デバイスドライバにあります。
ホストOS型は、ホストのOSがサポートしているハードウェアに関しては基本的に利用することができます。
ハイパーバイザー型は専用のデバイスドライバが必要になりますが、パフォーマンスはホストOS型よりも向上します。
個人で検証する程度であれば導入しやすいホストOS型を使用し、従来のサーバ用途として使用するのであればハイパーバイザー型を使用するのが無難です。
コンテナ型
コンテナ型は前述の仮想化とは違い、仮想マシンを作成するのではなく、OSが利用するリソース(CPUやメモリ、HDD等)を複数のコンテナで分配する仕組みになっています。
ホストOS型やハイパーバイザー型で作成される仮想マシンは、物理マシンと同様にハードウェアを持つ必要があります。仮想マシンに実態はないので、これらハードウェアをシミュレートすることで利用可能としています。
その分だけオーバーヘッド(処理を行うことでかかる負荷)が増えます。
一方で、コンテナ型はハードウェアは基盤となるOSのものを利用するため、このハードウェアシミュレート分のオーバーヘッドはかからないことになります。
特に、アプリケーション開発における環境の構築の際に利用されることが多いです。
コンテナ内にアプリケーションを動作させるのに必要なライブラリやファイルを配置し開発を行うことにより、開発環境と本番環境のアプリケーション構成における差を小さくし、本稼働環境へのデプロイを容易にできます。
また、特定用途のためのパッケージを含めて配布されている「アプライアンスコンテナ」というものもあり、開発環境構築立ち上げの簡便さに一躍買ってくれています。
Linuxコンテナ(LXC)は、cgroupというカーネルのリソース管理機構を用いて実装されています。
ゲストOSとしてのLinuxの使用
仮想マシン上で動作するOSのことを「ゲストOS」と呼びます。
仮想サーバと仮想OSをひとまとめにして「インスタンス」という単位で呼びます。
実運用では、インスタンスはOSイメージという設定データから作成されることになり、一からOSインストールを行うよりも手軽に立ち上げを行うことが可能です。
イメージとしては、テンプレートをもとにクローンを作成することで簡単にサーバを増やせるということです。
しかしながら、仮想マシンごとに異なる設定にしなければ正常に動作しない項目も存在します。
例えば以下のようなものです。
・ホスト名
・SSH公開鍵
・一般ユーザ情報
・インストールするパッケージ
テンプレートをもとにクローンを作成し、実稼働させる前にこれらを何らかの方法で設定してあげる必要があります。
数台程度であれば手動で設定しても良いのですが、同じ構成のマシンが数十台、数百台必要となったらひとつひとつを手動設定するのはあまりに大変だと思います。
そこで、Linuxにはインスタンスの初回起動時のみ設定を読み込んでくれる仕組みが用意されています。
これをCloud-initといいます。
Cloud-initで適切な設定を行っておくことにより、上述のようなマシン間で異なる設定にしなければならない項目を初期設定してくれるようになります。
また、Linuxインスタンスを個別管理するIDとして、「D-bus マシンID」があります。
ファイルとしては「/etc/machine-id」となり、このファイルに記載されている値は、インスタンスごとにユニークとなります。
まとめ
今回は、LPIC level1の試験に関連がありそうな部分のみ抽出してみましたが、これらは本当にごく一部の知識となります。
ひとまず今回の内容程度はインプットしておくと、後の学習が楽になるのでは?と思います。
確認問題
Cloud-initの機能により、インスタンス初回起動時に読み込まれる設定として正しいものを2つ選びなさい。
A) ホスト名
B) ドライバ設定
C) SSH秘密鍵
D) SSH公開鍵
D-bus マシンIDが記述されているファイルの絶対パスを答えなさい。