手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 KVM の基本構築 – libvirt / OVS / OVN の土台を作る

Ubuntu 26.04 で KVM ホストを構築するための基本設定を整理します。この記事では、VM を動かすだけの最小構成ではなく、後続の Bridge ネットワーク、VM テンプレート、VM 作成、HugePages、性能確認へ進めるための土台として KVM / QEMU / libvirt / OVS / OVN を扱います。

実際の環境では構成管理で状態を収束させていますが、ここでは設定の意味を追いやすいように手動操作と確認手順として分解します。KVM は単体の機能ではなく、CPU 仮想化支援、仮想ディスク、仮想 NIC、仮想ネットワーク、管理 API が組み合わさって成立します。

参考
書籍
参考書籍

作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ

ハイパーバイザ、CPU 仮想化支援、メモリ仮想化、割り込み、仮想デバイスなど、VM の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

この記事で作る KVM ホストの位置づけ

この記事の目的は、VM を 1 台だけ起動することではなく、Ubuntu 26.04 を仮想化ホストとして扱える状態にすることです。後続の記事で VM テンプレートや VM インスタンスを作る前に、ホスト側の基盤を先に整えます。

  • KVM / QEMU / libvirt を導入し、VM を管理できる状態にする
  • ISO やイメージを置くディレクトリを用意する
  • Open vSwitch と OVN を使える状態にし、仮想ネットワークの入口を作る
  • Cockpit などから VM の状態を確認できるようにする
  • 後続の Bridge ネットワーク、VM テンプレート、VM 作成へ進める前提をそろえる

OVS / OVN は KVM の必須要素ではない

一般的に、KVM を使うだけであれば Open vSwitch や OVN は必須ではありません。単体ホストで VM を動かすだけなら、libvirt の default network、Linux bridge、または単純な NAT 構成でも十分です。

この記事で OVS / OVN まで扱っているのは、この環境では KVM ホストを単なる VM 実行基盤ではなく、仮想ネットワークを収容する基盤として設計しているためです。そのため、一般的な KVM 入門として見ると少し過剰で、やや変わった構成に見えるはずです。

まず KVM の動作確認だけをしたい場合は、libvirtqemu-system を導入し、default network や通常の bridge で VM を作成するところから始める方が自然です。OVS / OVN は、複数ネットワーク、VLAN、provider network、将来的な複数ホスト構成まで見据える場合に検討する層です。

仮想化支援を確認する

まず CPU が仮想化支援を提供しているかを確認します。KVM は CPU の仮想化支援を前提にするため、ここが無効だと libvirt や QEMU を導入しても実用的な KVM ホストにはなりません。

lscpu | grep -E 'Virtualization|Model name'
egrep -c '(vmx|svm)' /proc/cpuinfo
lsmod | grep '^kvm'

Intel では vmx、AMD では svm が見えます。物理サーバーで見えない場合は、BIOS / UEFI 側で仮想化支援が無効になっている可能性があります。VM 上にさらに KVM を構築する場合は、nested virtualization の設定も確認します。

KVM 関連パッケージを導入する

KVM ホストとして最低限必要な QEMU / libvirt に加えて、VM 作成、UEFI 起動、cloud-init 用イメージ生成、Cockpit、OVS / OVN をまとめて導入します。

sudo apt update
sudo apt install -y \
  qemu-system \
  qemu-utils \
  libvirt-daemon-system \
  libvirt-clients \
  libosinfo-bin \
  virtinst \
  ovmf \
  cockpit-machines \
  cloud-image-utils \
  openvswitch-switch \
  ovn-common \
  ovn-host \
  ovn-central

qemu-systemlibvirt-daemon-system だけでも VM は動かせます。ただし、実運用で VM テンプレート、UEFI 起動、仮想ネットワーク、Web UI 確認まで扱うなら、最初から周辺パッケージも含めておく方が後続作業が分かりやすくなります。

サービスを有効化する

KVM ホストでは、libvirt だけでなく OVS / OVN も起動しておきます。OVS / OVN を使わない単純な bridge 構成なら不要な場合もありますが、仮想ネットワークを設計する前提ではここで土台を作ります。

sudo systemctl enable --now libvirtd.service
sudo systemctl enable --now openvswitch-switch.service
sudo systemctl enable --now ovn-central.service
sudo systemctl enable --now ovn-host.service

systemctl --no-pager --full status libvirtd.service
systemctl --no-pager --full status openvswitch-switch.service
systemctl --no-pager --full status ovn-central.service
systemctl --no-pager --full status ovn-host.service

OVN を 1 台の検証ホスト内で使う場合は、OVN southbound database をローカルの UNIX socket として参照する構成にできます。複数ホストで OVN を使う場合は、ここで指定する remote や encapsulation IP の考え方が変わります。

管理ユーザーを libvirt グループへ追加する

管理ユーザーから virsh や Cockpit で VM を扱う場合、必要に応じて libvirt グループへ追加します。追加後は再ログインしてグループ情報を反映します。

sudo usermod -aG libvirt "$USER"
id "$USER"

サーバー管理では、全員に広く VM 操作権限を渡すのではなく、誰が libvirt を操作できるのかを明確にしておくことが重要です。VM 作成や仮想 NIC 接続は、実質的にホストのネットワークやストレージへ影響します。

ISO とイメージの置き場を用意する

libvirt の標準イメージ置き場は /var/lib/libvirt/images です。ISO ファイルは別ディレクトリに分けておくと、VM イメージとインストールメディアを区別しやすくなります。

sudo mkdir -p /var/lib/libvirt/images/iso
sudo chown root:root /var/lib/libvirt/images/iso
sudo chmod 0755 /var/lib/libvirt/images/iso

ls -ld /var/lib/libvirt/images /var/lib/libvirt/images/iso

テンプレート方式で VM を増やす場合、後続の記事では cloud image や qcow2 の配置も扱います。ここでは、まず KVM ホストとして標準的な保存先を用意するところまでにします。

OVS / OVN の基本設定を確認する

OVS / OVN を使う場合、OVSDB に OVN の接続先と encapsulation 情報を設定します。単一ホストでの確認では ovn-remote にローカル socket を使い、encapsulation IP には 127.0.0.1 を指定できます。

sudo ovs-vsctl set Open_vSwitch . \
  external_ids:ovn-remote=unix:/var/run/ovn/ovnsb_db.sock \
  external_ids:ovn-encap-type=geneve \
  external_ids:ovn-encap-ip=127.0.0.1

sudo ovs-vsctl get Open_vSwitch . external_ids

複数 KVM ホストで OVN を使う場合、ovn-encap-ip はホスト間で到達可能なアンダーレイ IP にします。ここを曖昧にすると、OVN の論理ネットワークは作れても、実際の VM 間通信が成立しません。

provider bridge を作る場合

VM を物理ネットワークや VLAN に接続する場合、provider bridge を作り、物理 NIC を OVS bridge に収容します。以下は brphys0enp3s0 を追加し、trunk VLAN を許可する例です。実際の NIC 名や VLAN ID は環境に合わせます。

sudo ovs-vsctl --may-exist add-br brphys0
sudo ovs-vsctl --may-exist add-port brphys0 enp3s0
sudo ovs-vsctl set Interface brphys0 mtu_request=9000
sudo ovs-vsctl set Interface enp3s0 mtu_request=9000
sudo ovs-vsctl set Port enp3s0 trunks=2001,2256

sudo ovs-vsctl show

物理 NIC を OVS に収容すると、その NIC を通常の Netplan 管理インターフェースとして直接使う構成とは意味が変わります。作業前に管理用 NIC と provider 用 NIC を分け、SSH 接続を失わないようにします。

OVN logical switch と localnet を作る場合

OVN では logical switch を作り、必要に応じて localnet port を使って物理ネットワークへ接続します。ここでは VLAN 2001 を phys0 という bridge mapping に接続する例を示します。

sudo ovs-vsctl set Open_vSwitch . external_ids:ovn-bridge-mappings=phys0:brphys0

sudo ovn-nbctl --may-exist ls-add ls2001
sudo ovn-nbctl --may-exist lsp-add ls2001 ln2001
sudo ovn-nbctl lsp-set-type ln2001 localnet
sudo ovn-nbctl lsp-set-options ln2001 network_name=phys0
sudo ovn-nbctl set Logical_Switch_Port ln2001 tag=2001
sudo ovn-nbctl lsp-set-addresses ln2001 unknown

sudo ovn-nbctl show

このあたりから先は、単なる KVM 導入ではなく仮想ネットワーク設計になります。KVM の基本構築記事では、OVS / OVN が起動し、bridge mapping と logical switch の入口が理解できるところまでを範囲にします。

libvirt の状態を確認する

KVM / libvirt / OVS / OVN を導入したら、VM を作る前にホストの状態を確認します。ここで問題がある状態のまま VM 作成へ進むと、原因が VM 側なのかホスト側なのか分かりにくくなります。

virsh version
virsh nodeinfo
virsh list --all

sudo ovs-vsctl show
sudo ovn-nbctl show

virsh nodeinfo で CPU やメモリが見え、virsh list --all が実行できれば libvirt の入口は確認できます。OVS / OVN を使う構成では、ovs-vsctl showovn-nbctl show もあわせて確認します。

Cockpit から確認する

cockpit-machines を導入している場合、Cockpit から VM の状態を確認できます。Web UI は便利ですが、最初の切り分けでは CLI でも同じ状態を確認できるようにしておく方が安全です。

sudo systemctl enable --now cockpit.socket
systemctl --no-pager --full status cockpit.socket

Cockpit で VM が見えない場合でも、先に virsh で libvirt の状態を確認します。Web UI の問題と libvirt の問題を分けて見ることが重要です。

この段階で確認しておくこと

  • lscpu で CPU 仮想化支援が見えている
  • libvirtd.service が起動している
  • 管理ユーザーが必要な libvirt 操作権限を持っている
  • /var/lib/libvirt/images/iso が作成されている
  • OVS / OVN を使う場合、各サービスと external_ids が確認できる
  • provider bridge を作る場合、物理 NIC の役割と VLAN trunk を事前に決めている

まとめ

Ubuntu 26.04 の KVM 基本構築では、KVM / QEMU / libvirt を入れるだけでなく、VM を継続的に作成・管理するためのホスト基盤を整えることが重要です。特に OVS / OVN を使う場合、仮想化ホストは単なる計算資源ではなく、ネットワーク設計の一部になります。

次は、KVM ホスト上で VM をどのネットワークへ接続するかを整理するために、KVM Bridge ネットワークの基本設定へ進みます。

関連記事

Ubuntu 26.04 KVM の基本構築 – libvirt / OVS / OVN の土台を作る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る