はじめに
自宅サーバーやオンプレミス環境を構築する際によく登場するのがProxmox VEというソフトウェアです。「1台の物理サーバーの中に、複数の独立したサーバーを同居させる」ための基盤(ハイパーバイザー)ですが、その中でもLXCコンテナと仮想マシン(VM) という2つの方式があり、違いを理解しておくと構成の判断がしやすくなります。
本記事では、仮想化の基本概念から、Proxmox VEの位置づけ、LXCコンテナと仮想マシンの違いまでをまとめます。
ハイパーバイザーとは
ハイパーバイザーは、1台の物理マシンの上で複数の仮想マシンを動かすためのソフトウェア(またはファームウェア)です。大きく2種類に分類されます。
| 種別 | 特徴 | 例 |
|---|---|---|
| Type-1(ベアメタル型) | 物理ハードウェア上に直接インストールされ、ハイパーバイザー自体がOSの役割を兼ねる | Proxmox VE、VMware ESXi、Microsoft Hyper-V |
| Type-2(ホスト型) | 既存のOS(Windows/macOS等)の上にアプリケーションとしてインストールされる | VirtualBox、VMware Workstation |
Type-1はハードウェアに直接アクセスできるためオーバーヘッドが少なく、サーバー用途で広く使われます。Proxmox VEはこのType-1に分類されます。
Proxmox VEとは
Proxmox VE(Proxmox Virtual Environment) は、Debian Linuxをベースにしたオープンソースの仮想化プラットフォームです。次の2つの仮想化技術を1つの管理基盤の中に統合している点が特徴です。
- QEMU/KVM:完全な仮想マシン(VM)を動かすための技術。Linuxカーネルの機能であるKVM(Kernel-based Virtual Machine) を使い、ゲストOSのコードをほぼそのままホストCPU上で実行することで高いパフォーマンスを実現する。Linux以外の任意のOSをゲストとして動かせる
- LXC(Linux Containers):後述するコンテナ型の仮想化技術
これらに加えて、Webベースの管理画面、ソフトウェアデファインドストレージ・ネットワーキング、バックアップ、クラスタリングによる高可用性(HA)機能などが1つのプラットフォームにまとまっています。
LXCコンテナと仮想マシン(VM)の違い
Proxmox VEで新しいゲストを作る際、「VM(QEMU/KVM)」と「コンテナ(LXC)」のどちらかを選ぶことになります。両者の最大の違いは、カーネルを共有するかどうかです。
仮想マシン(VM)
VMは、ハードウェアそのものを仮想化し、その上でゲストOS自体のカーネルを独立して起動します。ホストと異なる種類のOS(例:ホストがLinuxでゲストがWindows)を動かせる柔軟性がある一方、ゲストOSの起動処理やカーネルの分だけリソース消費・起動時間のオーバーヘッドが発生します。
LXCコンテナ
LXCコンテナは、ホストのLinuxカーネルを複数のコンテナ間で共有しながら、プロセス空間・ファイルシステム・ネットワークなどをコンテナごとに隔離する技術です。ゲストOS自体のカーネルを個別に起動する必要がないため、次のような特徴があります。
- 起動が非常に高速(数秒程度)
- メモリ・ディスクのオーバーヘッドが小さい
- 同じ物理マシンでより多くのゲストを高密度に動かせる
- カーネルを共有するため、原則としてLinux系のゲストしか動かせない
比較表
| 項目 | LXCコンテナ | VM(QEMU/KVM) |
|---|---|---|
| カーネル | ホストと共有 | ゲストごとに独立 |
| 起動速度 | 高速(数秒) | 低速(OS起動が必要) |
| リソースオーバーヘッド | 小さい | 大きい |
| 動かせるOS | Linux系のみ | 任意のOS(Windows等も可) |
| 用途の目安 | Linuxサーバーアプリを多数・軽量に動かしたい場合 | 異なるOSが必要な場合、より強い隔離が必要な場合 |
Proxmox VE上のコンテナはpct(Proxmox Container Toolkit) というコマンドツールで管理されており、Proxmox VEのクラスタ構成・ストレージ・ネットワーク機能とも密に統合されています。
LXCコンテナ運用の基礎知識
CTテンプレート
LXCコンテナを新規作成する際は、ゼロからOSをインストールするのではなく、CTテンプレートと呼ばれる、あらかじめOSの初期状態がパッケージ化されたイメージを元に作成します(Debian・Ubuntu・AlmaLinux等、様々なディストリビューションのテンプレートが提供されています)。VMを作る際にインストールメディア(ISOイメージ)が必要なのと似た位置づけですが、LXCの場合はOS全体を含む圧縮済みのルートファイルシステムという形になります。
ネストとkeyctl
LXCコンテナの中でさらにDockerのようなコンテナ技術を動かしたい場合、通常のコンテナ隔離設定のままでは動作しないことがあります。これは、コンテナ内で別のコンテナ(いわゆるコンテナ・イン・コンテナ、DinD: Docker in Docker的な構成)を扱うために追加のカーネル機能へのアクセスが必要になるためです。Proxmox VEでは、コンテナのオプションでネスト(nesting)とkeyctlという機能を有効化することで、この制約を緩和し、LXCコンテナ内でのDocker実行を可能にしています。
ストレージ(LVM-thin)
Proxmox VEのストレージ管理でよく使われる方式の1つにLVM-thin(シンプロビジョニング) があります。これは、コンテナやVMに割り当てるディスク容量を「実際に使った分だけ」実容量から消費する方式で、あらかじめ大きな容量を確保していても、実データが少なければディスクの消費も少なく済みます。運用中は使用率を定期的に確認し、実容量を使い切らないよう注意する必要があります。
まとめ
| 用語 | 内容 |
|---|---|
| ハイパーバイザー | 1台の物理マシン上で複数の仮想マシンを動かすためのソフトウェア |
| Proxmox VE | QEMU/KVMとLXCを統合したオープンソースの仮想化プラットフォーム |
| VM(QEMU/KVM) | ゲストOSのカーネルを個別に起動する、完全仮想化のゲスト |
| LXCコンテナ | ホストのカーネルを共有し、軽量・高速に動作するコンテナ型のゲスト |
| CTテンプレート | LXCコンテナ作成のベースとなる、OSの初期状態を含むイメージ |
| LVM-thin | 実際に使った分だけ容量を消費するシンプロビジョニング方式のストレージ |