技術メモ

技術メモ

ラフなメモ

仮想化とは

仮想化とは?

Dockerにふれる機会があったので、そもそもサーバの仮想化とはどのような仕組みがあるか整理しておきます。

サーバ仮想化技術

ホストOS型

  • OS 上に土台となるソフトウェアをインストールし、そのソフトウェア上で仮想マシンを稼働させる方式
  • ソフトウェアをインストールすれば使えるようになるので、導入は楽
  • ハードウェアにアクセスする場合に、ホストOSを経由することになるのでパフォーマンスとしては余計はオーバヘッドが発生する
  • 代表的なソフトウェア

ハイパーバイザー型

  • 物理サーバに直接ハイパーバイザ型仮想化ソフトをインストールする
  • ホストOS型の仮想化と比較
    • 動作速度が早い
    • ハイパーバイザ型仮想化ソフトを稼働させるための物理マシンが必要になる
    • 仮想化ソフトが対応していないハードウェアにはインストールできない
  • 個別のOSを構成できるので自由度が高い
    • 仮想マシンに関してはOSをはじめ、ハードウェアのリソースを個別に割り当てることができる
  • ハイパーバイザ自体はハードウェアのCPU仮想化支援機構を利用している
    • Intel-VT、AMD-V など
    • ハイパーバイザには完全仮想化式と準仮想化式の2パターンがある
  • 代表的なソフトウェア

コンテナ型

  • OS上に「コンテナ」と呼ばれる隔離されたアプリケーションの実行環境を作成し、一台のマイン上で複数のマシンが稼働しているように見える環境を作る
  • コンテナ=プロセス
  • OS上にコンテナを複数作成し、各コンテナにサービスを割り当てる(コンテナが何かは別途まとめたい)
  • OS上の実行環境を仮想化するため、コンテナのホストとなるOSに依存する
    • すべてのコンテナは同じOSしか使えない
    • 一つのカーネル空間に異なるユーザ空間を作成できる
      • 実行環境は各コンテナで分離されている
      • コンテナ内部からは同じコンテナ内のプロセスだけが見える
      • コンテナのサイズが小さくなるので起動が早い
        • ハイパーバイザ型仮想化よりも高密度な集約が可能になる
  • システム資源割当によるオーバヘッドが少ない
  • 仮想マシンごとにOSを用意する必要がない
    • ディスク使用量が少なくて済む
  • 代表的なソフトウェア

参考

*1:chrootは正確にはソフトウェアではなくシステムコール