UbuntuにKVMをインストール・活用する:本番サーバーのためのカーネルレベル仮想化

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

VirtualBox、VMware、Vagrant、KVM — どれを選ぶ?

Linuxで仮想化をはじめたとき、まずVirtualBox、次にdev用VM管理のためのVagrant、そしてKVMへと順番に試してきた。それぞれに適した用途がある——でも、実際のUbuntuサーバーで安定してVMを動かしたいなら、長期的に使い続ける価値があるのはKVMだけだ。

各ツールを簡単にまとめると:

  • VirtualBox:使いやすく、GUIもあるが、パフォーマンスが劣り、本番環境には向かない
  • Vagrant:VMを管理するためのツールであり、ハイパーバイザーではない——内部でVirtualBoxかKVMを呼び出す。開発ワークフローには便利だが、本番サーバーには向かない
  • VMware Workstation/ESXi:高性能だが、ライセンス費用がかかる
  • KVM:Linuxカーネルに直接組み込まれたType-1ハイパーバイザー。ベアメタルに近いパフォーマンスで、完全無料

このブログにはVagrantの記事もある——開発環境をすばやく立ち上げたいときに役立つ。今回は全く別の話だ:本番ワークロードを動かすための、本格的な仮想化基盤としてのKVMを紹介する。

KVMの実際のメリットとデメリット

メリット

  • 高パフォーマンス:KVMはType-1ハイパーバイザー——VMはCPU仮想化拡張(Intel VT-x / AMD-V)を通じてハードウェア上で直接動作する。実測値:オーバーヘッドはベアメタル比で通常5%未満
  • カーネル統合:Linux 2.6.20からKVMは公式カーネルの一部になっている。外部ドライバーのインストールは不要で、細かい互換性の心配もない
  • 充実したエコシステム:libvirt、virt-manager、virsh——そしてProxmox VE(多くのホームラボや中小企業データセンターでデフォルトのハイパーバイザー)もすべてKVM上に構築されている
  • ライブマイグレーション:実行中のVMをダウンタイムなしで別のホストに移動できる——エンタープライズ機能が完全無料で使える

デメリット

  • 標準ではGUIが使えない(ヘッドレスサーバーの場合):CLIからvirshを使うか、リモート接続用クライアントマシンにvirt-managerを別途インストールする必要がある
  • 仮想化対応ハードウェアが必要:CPUにIntel VT-xまたはAMD-Vが必要。最近のマシンのほとんどは対応しているが、無効の場合はBIOSで有効にする必要がある
  • ネットワークブリッジの初期設定が複雑:はじめてセットアップしたとき、VMがインターネットに出られない原因を理解するのに約2時間かかった——鍵はブリッジとphysicalインターフェースの設定順序だった

KVMを選ぶべきタイミングは?

現在、Proxmox VE(KVM上に構築)でホームラボを運用している——12台のVMとコンテナを動かし、本番環境に移す前に何でもテストするプレイグラウンドとして使っている。KVMが正しい選択になるのは:

  • UbuntuサーバーでVMを24/7稼働させたい場合(VPS、専用サーバー、ホームラボ)
  • 本物のパフォーマンスが必要なワークロード——データベース、コンパイルサーバー、CI/CDランナー
  • クラウドプロバイダーに依存せず自己管理したい場合
  • Dockerより強い分離が必要な場合(各VMが独自のカーネルを持ち、完全に分離されている)

コードをテストするためのローカル開発環境が必要なだけ?Vagrant + VirtualBoxで十分で、セットアップも速い。

UbuntuへのKVMインストール手順

ステップ1:CPUが仮想化に対応しているか確認する

何かインストールする前に、まずCPUを確認しよう:

# Kiểm tra Intel VT-x hoặc AMD-V
egrep -c '(vmx|svm)' /proc/cpuinfo

# Nếu output > 0 là OK
# vmx = Intel VT-x, svm = AMD-V

結果が0だった場合は、BIOSでIntel Virtualization Technology(またはAMD-V/SVM)を有効にしよう。別のVM内で動作している場合(ネステッド仮想化)は、先にホスト側でネステッドVM対応を有効にする必要がある。

kvm-okでさらに確認:

sudo apt install -y cpu-checker
sudo kvm-ok

# Output mong đợi:
# INFO: /dev/kvm exists
# KVM acceleration can be used

ステップ2:KVMと必要なパッケージをインストールする

sudo apt update
sudo apt install -y \
  qemu-kvm \
  libvirt-daemon-system \
  libvirt-clients \
  bridge-utils \
  virtinst \
  virt-manager

各パッケージの説明:

  • qemu-kvm:KVMアクセラレーション付きQEMU——VMを実際に動かすエンジン
  • libvirt-daemon-system:VM管理デーモン(libvirtd)
  • libvirt-clients:CLIツール群(virsh、virsh-listなど)
  • bridge-utils:VM用のブリッジネットワークを作成する
  • virtinst:CLIからVMを作成するvirt-installコマンドを提供する
  • virt-manager:VM管理GUI(オプション、デスクトップ環境がある場合に使用)

ステップ3:ユーザーをlibvirtグループに追加する

sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)

# Logout và login lại để group có hiệu lực
# Hoặc dùng lệnh này để apply ngay mà không cần logout:
newgrp libvirt

libvirtdの動作確認:

sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd

# Kiểm tra connection
virsh -c qemu:///system list

ステップ4:virt-installではじめてのVMを作成する

ISOをダウンロードしたら、virt-installを使ってコマンドラインからVMを初期化しよう:

# Download ISO Ubuntu 22.04 LTS (kiểm tra version mới nhất tại releases.ubuntu.com)
wget -P /var/lib/libvirt/images/ \
  https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso

# Tạo VM với virt-install
sudo virt-install \
  --name ubuntu-test \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/ubuntu-test.qcow2,size=20,format=qcow2 \
  --cdrom /var/lib/libvirt/images/ubuntu-22.04.5-live-server-amd64.iso \
  --network network=default \
  --os-variant ubuntu22.04 \
  --graphics vnc,listen=0.0.0.0 \
  --noautoconsole

VMはISOから起動する。VNCクライアントでインストール画面に接続しよう(デフォルトはポート5900):

# Xem port VNC của VM
virsh vncdisplay ubuntu-test
# Ví dụ output: :0 (tức là port 5900)

毎日使うvirshコマンド集

ほぼ毎日使うコマンド集だ——ブックマークしておくと便利。複数のVMを並行して操作する場合は、tmuxで複数ターミナルを一元管理しておくと作業効率が格段に上がる:

# Liệt kê tất cả VM (đang chạy và đã tắt)
virsh list --all

# Bật / tắt / restart VM
virsh start ubuntu-test
virsh shutdown ubuntu-test    # graceful shutdown
virsh destroy ubuntu-test     # force stop (tương đương rút điện)
virsh reboot ubuntu-test

# Xem thông tin chi tiết VM
virsh dominfo ubuntu-test

# Snapshot — cực kỳ hữu ích trước khi thử nghiệm gì đó
virsh snapshot-create-as ubuntu-test snap-before-update
virsh snapshot-list ubuntu-test
virsh snapshot-revert ubuntu-test snap-before-update

# Clone VM
virt-clone \
  --original ubuntu-test \
  --name ubuntu-clone \
  --file /var/lib/libvirt/images/ubuntu-clone.qcow2

# Xóa VM hoàn toàn (bao gồm disk)
virsh undefine ubuntu-test --remove-all-storage

ネットワーク設定:ブリッジ vs NAT

KVMはデフォルトでNATネットワーク(virbr0)を使用する——VMはインターネットに出られるが、外部からはアクセスできない。ホームラボや本番サーバーでは、物理マシンと同様にVMがLAN上で直接IPを持つ必要がある場合が多い。そのときにブリッジネットワークが必要になる。

Ubuntu 22.04のNetplanでブリッジを作成する:

# /etc/netplan/01-bridge.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: false
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: true
      parameters:
        stp: false
        forward-delay: 0
sudo netplan apply

# Tạo VM dùng bridge network
sudo virt-install \
  --name ubuntu-prod \
  --network bridge=br0 \
  # ... các option khác

実体験からの警告:このステップをはじめてやったとき、ブリッジの設定ミスでサーバーへのSSH接続を失った。高い授業料になった——重要ではないVMで先にテストするか、ネットワーク設定を触る前にサーバーへの直接コンソールアクセスを確保しておこう。

まとめ

KVMはセットアップが一番簡単なツールではない——その点ではVirtualBoxが勝る。でも、それは本番環境でのハイパーバイザー選びの基準にはならない。12台VMのホームラボから実際のVPSまで、6ヶ月KVMを動かしてきて、パフォーマンスが問題になったことは一度もない。

virshに慣れたら、次のステップはWeb UIを選ぶことだ。Cockpit + 仮想マシンプラグインは単体サーバーに軽量で十分な選択肢だ。VMの稼働状況を継続的に把握したいなら、Uptime Kumaでサイトの稼働状況を監視するのがシンプルで効果的だ。完全なクラスター管理が必要なら——Proxmox VEが答えになるが、それはまた別の記事のテーマだ。

Share: