1. 仮想化の基礎
1.1. 仮想化とは
仮想化とは1台の物理的なハードウェアの中に仮想化ソフトウェアを稼働させることで複数の仮想的なハードウェアを隔離し、個別のOSを動作させることを指す。
仮想化のメリットは以下の通り。
- 用意する物理マシンを減らすことができる
- 物理的資源の管理にかかる手間が省ける
- リソースの配分も状況に応じて柔軟に設定できる
1.1.1. ホストOSとゲストOS
ホストOSは仮想環境を提供するプログラムを動作させる基盤のことで、ゲストOSは仮想環境上で動作するOSのことを言う。 ホストOSはハイパーバイザーとも呼ばれる場合がある。
1.1.2. 仮想化基盤の種類
仮想サーバは仮想化基盤により仮想化されたサーバのことを言う。 仮想化されたサーバでは1つの物理サーバ上に複数の異なるOSを動かすことができる。
仮想化基盤にはハイパーバイザ型、ホスト型、コンテナ型がある。
ハイパーバイザ型
ハイパーバイザは仮想化のためのOSのようなものを指し、サーバにインストールし、そのOSの上で仮想マシンを稼働させるのが特徴となる。 ハイパーバイザー型はホストOSが不要な仮想化基盤であり、現在は主流の基盤となっている。
ホストOSを必要としないためハードウェアを直接制御することができ仮想マシンの速度低下を最小限に抑えることができる。 また特徴としてはライブマイグレーションが可能なことがある。(他のハイパーバイザーで稼働している仮想サーバに瞬時に機能を移動させる機能)が
有名なものにはVMware ESXI、KVM、XeN、Hyper-Vなどがある。
- メリット
- ホストOSが不要でハードウェアの直接制御が可能
- システム全体から見るとリソース使用効率が良い
- 管理サーバの台数の削減が見込める
- デメリット
- 仮想化環境の高度な管理を実現するツールが標準でない場合がある
- ハードウェアのスペックが低かった場合は処理能力不足となる
ホスト型
ホスト型はハードウェアの中にOS上に土台となる仮想化ソフトウェアをインストールし仮想化ソフトウェアで仮想マシンを稼働させるのが特徴。 この環境では仮想化ソフトウェアを動作させるのでハードウェアにかかるリソースは余計に消費をしやすい。 そのため本番環境には適していないため、検証環境/実験環境によく使用される。
ホスト型の仮想化ソフトウェアにはVMware Workstation Player、VirualBoxなどがある。
- メリット
- 既存マシンを維持したまま仮想化ができる
- テスト環境の作成に便利
- デメリット
- 仮想マシンの実行速度がほかの方式より遅い
- ホストOSに物理リソースが必要
- ゲストOSの本格運用には処理速度が限定的
コンテナ型
コンテナ型では「アプリケーションを実行するための領域」であるコンテナの実行環境を仮想化するのが特徴。 つまりコンテナ型ではアプリケーション実行環境を仮想化していると言える。
有名なものにはDocker、LXCがある。
- メリット
- 必要最小限のCPUやメモリしか使用しないので負荷が小さく高速な動作が実現可能
- コピーも簡単なので作業時間の大幅な短縮が可能
- 開発と運用の相性がよい
- デメリット
- 複数のホストでのコンテナ運用が煩雑になる
- カーネルを他のコンテナと共有するため個別に変更できない
1.2. 仮想化基盤のプラットフォーム/製品
1.2.1. ハイパーバイザ型
VMware vSphere/ESXI
VMware vSphere/ESXIはVMware社が提供するハイパーバイザ型仮想化プラットフォーム。 vSphereにより、大規模な仮想化環境の管理が容易になり、冗長性や拡張性が向上する。
項目 | VMware ESXI | VMware vSphere |
---|---|---|
役割 | ハイパーバイザー型仮想化プラットフォーム。仮想マシンの作成、実行、管理を担当する。 | VMware ESXiハイパーバイザーを基盤にした仮想化プラットフォームの管理および拡張機能を提供する |
概要 | ESXiは高いパフォーマンスとセキュリティを提供し、さまざまなオペレーティングシステムをサポートしている | 仮想化環境の中央管理、クラスタリング、バックアップ、監視、セキュリティ、およびリソース管理などの高度な機能を提供する管理ツール |
Proxmox VE
Proxmox VEはの仮想化とコンテナ仮想化を統合したOSSのハイパーバイザ型仮想化プラットフォーム 中小規模から大規模な仮想化環境を構築し、管理するのに適している。
特徴は以下の通り。
- KVMハイパーバイザーベース
- LXCコンテナのサポート
- Webベースの管理インターフェイス
- コミュニティバージョンあり
Hyper-V
Hyper-VはMicrosoftのハイパーバイザ型仮想化プラットフォームでWindows上で動作する。 またHyper-Vはサーバー仮想化のために設計されている。
特徴は以下の通り。
- Hyper-Vマネージャーを使用して仮想マシンの管理が行える
- スナップショット機能
XenServer
XenServerはOSSの仮想化プラットフォームであるXenをベースにしたハイパーバイザ型仮想化プラットフォーム。 クラウド環境での使用に適しているためクラウドプロバイダーやデータセンター環境で使用される。
特徴は以下の通り。
- Xenハイパーバイザーベース
- 高可用性とクラスタリング
- コミュニティバージョンあり
- クラウド基盤への対応
KVM
KVM(Kernel-based Virtual Machine)はLinuxカーネルをハイパーバイザーとして動作させるハイパーバイザ型仮想化プラットフォーム。 動作にはIntel VT や AMD-V のようなハードウェア仮想化拡張を持つプロセッサが必要という特徴がある。 またフルバーチャル化とパラバーチャル化の両方の仮想マシンを実行可能。
KVMはLinux、Windows、Haiku、OS Xなど多くのゲストOSにハードウェア支援型の仮想化を提供している。
Xen
XenはLinux FoundationとIntelにより開発されたハードウェア上で直接実行されるタイプの仮想化技術。 XenではゲストOSをパラバーチャル化することができるため、ゲストOSがハードウェアリソースに直接アクセスできる。 そのためパフォーマンスが高い。
1.2.2. ホスト型
VirtualBox
OSSのホスト型の仮想化ソフトウェア。 Windows、Linux、macOSなどのホストOSで動作し、さまざまなゲストOSをサポートする。
以下の機能をサポートしている。
- 仮想ディスクイメージのサポート
- スナップショット機能
- 仮想ネットワーク機能
VMware Player
VMwareが提供するホスト型の仮想化ソフトウェア。 Windows、Linux、macOSなどのホストOSで動作し、さまざまなゲストOSをサポートする。
1.2.3. コンテナ型
Docker
Dockerはアプリケーションコンテナを作成、管理、およびデプロイするためのOSSのプラットフォーム。 DockerではDockerイメージと呼ばれる再利用可能なコンテナテンプレートを使用し、これらのイメージをコンテナとして実行する。
コンテナは非常に軽量で、高速に起動でき、オーバーヘッドが少ないため、開発、テスト、デプロイメントなどに使用できる。 またDockerコンテナはLinuxおよびWindowsベースのホストOSで実行できる。
Dockerはアプリケーションコンテナを中心に設計されている。
LXC
LXC(Linux Containers)はプロセス間の仮想化技術を使用して軽量な仮想環境を提供するOSSプラットフォーム。 LXCコンテナは、ホストOSのリソースを共有し、カーネルを共用するため、他のコンテナに比べて比較的軽量となる。
またLXCはアプリケーションを隔離し、リソースを分割するための環境を提供し、システムレベルの仮想化を実現している。 LXCはOSレベルでの分離に使用される。
1.3. その他の仮想化ツール
1.3.1. コンテナ管理/オーケストレーションツール
Kubernetes
Kubernetes(k8s)はコンテナ化されたアプリケーションのデプロイ、スケーリング、管理、およびオーケストレーションするためのOSSプラットフォーム。 アプリケーションコンテナを効果的に管理するために、クラスタリング、自動スケーリング、セルフヒーリング、サービスディスカバリ、ロードバランシングなどの機能を提供する。
Kubernetesのマニフェストファイル(YAML形式)を使用して、アプリケーションのデプロイと管理を定義する。 Kubernetesは大規模なコンテナオーケストレーション環境/複雑なマイクロサービスアーキテクチャを構築するために使用される。
Podman
Podmanはコンテナを管理するためのCLIツール。 PodmanはシンプルでDockerと互換性があり、コンテナをビルド、実行、管理するためのコマンドを提供している。
Podmanはよりシンプルで個別のコンテナの管理に適している。
1.3.2. クラウド基盤構築ツール
OpenStack
OpenStackはOSSのクラウド基盤を構築するためのツールとプロジェクト。 具体的には各種ハイパーバイザ(KVM/Xen/VMware Serverの無償製品版であるESXi/Hyper-Vなど)と組み合わせ、クラウドサービスの環境を構築することができる。
OpenStackを用いることでプライベートクラウド、パブリッククラウド、ハイブリッドクラウドなどが構築できる。
CloudStack
CloudStackはOSSのクラウド基盤を構築するためのツールとプロジェクト。 シンプルな構成のクラウド環境の構築に適している。