なにかの技術メモ置き場

なにかの技術メモ置き場

@インフラエンジニア

iSCSI boot on QEMU+KVM case1

概要

QEMU+KVM環境でゲストマシンをiSCSIブートする。

case1とcase2の比較

総括すると、case1はメンテナンス性に優れ、case2は構成・設定のシンプルさに優れる。

比較項目 case1 case2 備考
DHCPサーバ 必要 必要 case1のほうがやや設定が多い
HTTPサーバ 必要 不要 -
iPXEスクリプト 必要 不要 -
メンテナンス性 良い 悪い ※1

※1:case1ではiSCSIディスクの変更時などはiPXEスクリプトを修正するだけで済み、dhcpd.serviceの再起動が不要。

case2の詳細は以下を参照。
none06.hatenadiary.org

経緯

  • KVMホストのローカルディスクの容量が逼迫してきた。恒久対処としてゲストマシンのイメージファイルをKVMホストの外で管理することにした。
  • データの管理場所はNASとした。
  • 接続インターフェース(プロトコル)はiSCSIとした。
    • 他にはNFS、FCが有力な候補として挙げられる。
    • 当初はNFSを検討していたがトラブルにより断念。後日記事にするかもしれない。
    • FCはH/W調達の手間を惜しんで保留。いつか試したい。

環境

概念図

f:id:none06:20201013012626p:plain

シーケンス図

f:id:none06:20201011010530p:plain

構成

ホスト名 管理NWのIP ストレージNWのIP OS H/W 備考
file01 172.16.0.5 172.16.1.5 RAIDiator 4.2.31 NETGEAR ReadyNAS Pro 2 iSCSIターゲット
kvm01 (割愛) (割愛) CentOS 8.1.1911 HP Z600 KVMホスト
pxe01 172.16.0.21 (割愛) CentOS 8.1.1911 - PXEサーバ(DHCP/HTTP)
guest02 172.16.0.253 172.16.1.253 CentOS 8.2.2004 - KVMゲスト

NWアドレス NW名 用途
172.16.0.0/24 管理NW ssh接続、Web管理画面接続、PXEブート
172.16.1.0/24 ストレージNW ストレージ接続(iSCSI/NFS/CIFS)

※今回の作業を通して、PXEブートはストレージNWのほうが良いかもしれないと気づいた。

前提

  • iSCSIターゲットの作成手順は各自確認のこと。
    • 一応NETGEARの手順を記載するが、古い機種のため需要はないかと・・・
  • ゲストマシンのOSは新規インストールする。
    • 稼働しているゲストマシンの移行もやりたいが、そこまで手が届いていない。
  • ゲストマシンのOSインストールにはPXEサーバを使用する。

手順

1.iSCSIターゲット/LUNの作成

1-1.以下の要領で作成する。

ターゲット名 LUN番号 ディスク容量
guest02 0 20GB

f:id:none06:20201007025632p:plain
f:id:none06:20201007025657p:plain
f:id:none06:20201007025713p:plain

2.ゲストマシンの構築

2-1.ゲストマシンを作成する。
※ディスクなしとしているのがポイント(--disk none)。
※当環境ではPXEサーバからOSをインストールするが、手順は問わない。

[root@kvm01 ~]# virt-install \
> --hvm \
> --name guest02 \
> --ram 2048 \
> --vcpus 2 \
> --disk none \
> --os-type linux \
> --network bridge=br0,link.state=up \
> --network bridge=br1,link.state=up \
> --network bridge=br2,link.state=down \
> --graphics vnc,listen=0.0.0.0 \
> --console pty,target_type=serial \
> --pxe
WARNING  OS name 'linux' is deprecated, using 'generic' instead. This alias will be removed in the future.
WARNING  グラフィカルコンソールに接続できません: virt-viewer がインストールされていません。'virt-viewer' パッケージをインストールしてください。
WARNING  ゲストのコンソールがないため、デフォルト値 --wait -1 を適用します。

インストールの開始中...
Domain installation still in progress.
Waiting for installation to complete.

2-2.CentOS8のインストーラを起動する。
※当環境ではPXEサーバからOSをインストールするが、手順は問わない。
※以降、今回の設定で最低限必要な項目のみ記載する。それ以外の項目は任意に設定すること。

2-3.IPを固定する。
f:id:none06:20201007025850p:plain
f:id:none06:20201007025853p:plain

2-4.インストール先のディスクを選択する。デフォルトでは認識されないため、iSCSIターゲットにログインする必要がある。なお、ここでのログイン設定はOSインストール後も保持される。
f:id:none06:20201007030013p:plain
f:id:none06:20201007030020p:plain
f:id:none06:20201007030029p:plain
f:id:none06:20201007030033p:plain
f:id:none06:20201007030038p:plain
f:id:none06:20201007030044p:plain
f:id:none06:20201007030048p:plain

2-5.OSインストールを完了させる。

2-6.ゲストマシンのMACアドレスを調べておく。

[root@kvm01 ~]# virsh dumpxml guest02 | grep "mac address"
      <mac address='52:54:00:71:aa:76'/>
      <mac address='52:54:00:91:be:66'/>
      <mac address='52:54:00:66:9a:e2'/>

3.DHCPサーバの設定

3-1.dhcpd.confに以下を設定する。
・iPXEのサポート
MACアドレスとiPXEスクリプトの関連付け

[root@pxe01 ~]# cat /etc/dhcp/dhcpd.conf
・・・
# ipxe
option space ipxe;
option ipxe-encap-opts code 175 = encapsulate ipxe;
option ipxe.keep-san code 8 = unsigned integer 8;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
option ipxe.username code 190 = string;
option ipxe.password code 191 = string;

host guest02 {
  hardware ethernet 52:54:00:71:aa:76;
  filename "http://172.16.0.21/pxe/ipxe/guest02-lun0.ipxe";
  option ipxe.keep-san 1;
  option ipxe.no-pxedhcp 1;
  next-server 0.0.0.0;
}
・・・

3-2.dhcpdサービスを再起動し設定を反映する。

[root@pxe01 ~]# systemctl restart dhcpd.service

3-3.iPXEスクリプトを作成する。

[root@pxe01 ~]# cat << EOF > /tftpboot/pxe/ipxe/guest02-lun0.ipxe
> #!ipxe
>
> ifopen net1
> set net1/ip 172.16.1.253
> set net1/netmask 255.255.255.0
> sanboot iscsi:172.16.1.5:::0:iqn.2020-09.file01:guest02
> EOF
[root@pxe01 ~]# cat /tftpboot/pxe/ipxe/guest02-lun0.ipxe
#!ipxe

ifopen net1
set net1/ip 172.16.1.253
set net1/netmask 255.255.255.0
sanboot iscsi:172.16.1.5:::0:iqn.2020-09.file01:guest02

4.ゲストマシンの起動(再起動)

4-1.ゲストマシンを再起動する。
※先ほどのOSインストールの最後に再起動しており、その後ディスクがなくOS起動に失敗しているため、強制再起動する。

[root@kvm01 ~]# virsh reset guest02
ドメイン guest02 がリセットされました

f:id:none06:20201007030348p:plainBIOS→ネットワークブート→iPXEブートと遷移している。

f:id:none06:20201007030430p:plain※作成したiPXEスクリプトが実行されていることがわかる。

f:id:none06:20201007030448p:plainiSCSIブートが成功し、ディスクの中のOSが見えている。

4-2.ゲストマシンの状態を確認する。

[root@localhost ~]# iscsiadm -m session
tcp: [1] 172.16.1.5:3260,1 iqn.2020-09.file01:guest02 (non-flash)

OS起動時にiSCSIターゲットに自動ログインしている。これは、OSインストール時にiSCSIターゲットにログインした際の設定が保持されているため。

[root@localhost ~]# parted -l
モデル: LIO-ORG FILEIO (scsi)
ディスク /dev/sda: 21.5GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  ext4              boot
 2    1075MB  21.5GB  20.4GB  primary                    lvm

iSCSIターゲットで作成した20GBのディスクが認識されていることがわかる。