なにかの技術メモ置き場

なにかの技術メモ置き場

@インフラエンジニア

iSCSI boot on QEMU+KVM case3

f:id:none06:20211007000548p:plain

目次

概要

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

case1,case2との違い

case1,cese2は結局のところPXE+DHCPで頑張っていたに過ぎず、QEMU+KVMの機能を使っていなかった。今回はQEMU+KVMの機能を活用する。 大きな違いはゲストマシンとiSCSIディスクとの接続方法。case1,case2は直接接続していたが、case3はホストマシンを介して接続する。 個人的にはcase1,case2のゲストマシンがホストマシンから独立してストレージに直接接続するあたりが疎結合で好み。しかし、設定がやや大変。その点case3は設定が非常に楽だったので捨てがたい。

DHCPサーバ 必要 必要 不要 case1のほうがやや設定が多い
HTTPサーバ 必要 不要 不要 -
iPXEスクリプト 必要 不要 不要 -
メンテナンス性 良い 悪い 良い -
機能間の結合度 なるべく疎にしたい

経緯

  • KVMホストのローカルディスクの容量が逼迫してきた。恒久対処としてゲストマシンのイメージファイルをKVMホストの外で管理することにした。
  • データの管理場所はNASとした。
  • 接続インターフェース(プロトコル)はiSCSIとした。

環境

概念図

f:id:none06:20211007000548p: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ターゲット
kvm02 172.16.0.206 172.16.1.206 CentOS 8.4.2105 Fujitsu TX1320 M1 KVMホスト
guest03 172.16.0.253 - CentOS 8.4.2105 - KVMゲスト
NWアドレス NW名 用途
172.16.0.0/24 管理NW ssh接続、Web管理画面接続
172.16.1.0/24 ストレージNW ストレージ接続(iSCSI)

前提

  • iSCSIターゲットの作成手順は各自確認のこと。
  • ゲストマシンのOSは新規インストールする。
  • OSのインストールメディアを用意していること。

手順

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

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

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

f:id:none06:20211006231616p:plain

2.iSCSIディスクのプール化

2-1.ホストマシンでiSCSIターゲットにログインし、ディスクを認識させる。

[root@kvm02 ~]# iscsiadm -m node -T iqn.2020-09.file01:guest03 -p file012 --login
Logging in to [iface: default, target: iqn.2020-09.file01:guest03, portal: 172.16.1.5,3260]
Login to [iface: default, target: iqn.2020-09.file01:guest03, portal: 172.16.1.5,3260] successful.
[root@kvm02 ~]# iscsiadm -m session
tcp: [2] 172.16.1.5:3260,1 iqn.2020-09.file01:guest03 (non-flash)
[root@kvm02 ~]# fdisk -l /dev/sdb
ディスク /dev/sdb: 20 GiB, 21474837504 バイト, 41943042 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 524288 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xff4b72b7

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sdb1  *        2048  2099199  2097152     1G 83 Linux
/dev/sdb2        2099200  6293503  4194304     2G 82 Linux スワップ / Solaris
/dev/sdb3        6293504 41943039 35649536    17G 83 Linux

2-3.ディスクをQEMU+KVMのプールに登録する。

[root@kvm02 ~]# virsh pool-list --all
 名前      状態       自動起動
----------------------------------
[root@kvm02 ~]# virsh pool-define-as --name pool_guest03 --type iscsi --source-host file012 --source-dev iqn.2020-09.file01:guest03 --target /dev/disk/by-path/
プール pool_guest03 が定義されました
[root@kvm02 ~]# virsh pool-list --all
 名前           状態       自動起動
----------------------------------------
 pool_guest03   停止状態   いいえ (no)
[root@kvm02 ~]# virsh pool-start pool_guest03
プール pool_guest03 が起動されました
[root@kvm02 ~]# virsh pool-autostart pool_guest03
プール pool_guest03 が自動起動としてマークされました
[root@kvm02 ~]# virsh pool-list --all
 名前           状態       自動起動
---------------------------------------
 pool_guest03   動作中     はい (yes)
[root@kvm02 ~]# virsh pool-info pool_guest03
名前:         pool_guest03
UUID:           242b198b-69a2-45b0-8b89-a2411ac4e23c
状態:         実行中
永続:         はい (yes)
自動起動:   はい (yes)
容量:         20.00 GiB
割り当て:   20.00 GiB
利用可能:   0.00 B

2-4.プール内のボリュームを確認する。

[root@kvm02 ~]# virsh vol-list pool_guest03
 名前         パス
-------------------------------------------------------------------------------------------
 unit:0:0:0   /dev/disk/by-path/ip-172.16.1.5:3260-iscsi-iqn.2020-09.file01:guest03-lun-0

3.ゲストマシンの構築

3-1.ゲストマシンを作成する。
ポイントは、--diskプール名/ボリューム名を指定する点。

[root@kvm02 ~]# virt-install \
> --hvm \
> --name guest03 \
> --vcpus 4 \
> --ram 4096 \
> --disk vol=pool_guest03/unit:0:0:0 \
> --os-type linux \
> --os-variant centos8 \
> --network bridge=br0 \
> --graphics none \
> --location "/tmp/CentOS-8.4.2105-x86_64-dvd1.iso" \
> --console pty,target_type=serial \
> --extra-args "console=tty0 console=ttyS0,115200n8"

インストールの開始中...
ファイル vmlinuz を読出中...                                                                          | 9.6 MB  00:00:00
ファイル initrd.img を読出中...                                                                       |  72 MB  00:00:00
ドメイン guest03 に接続しました
エスケープ文字は ^] です
[    0.094429] pci 0000:00:1f.2: reg 0x20: [io  0xc040-0xc05f]
[    0.095857] pci 0000:00:1f.2: reg 0x24: [mem 0xfdc07000-0xfdc07fff]
[    0.097168] pci 0000:00:1f.3: [8086:2930] type 00 class 0x0c0500
### snip ###

3-2.OSをインストールする。
特段考慮する点はない。ゲストマシンから見たディスクはただのローカルディスクに見える。case1,case2ではiSCSIディスクに見えていたのでこの点が大きな違い。

Starting installer, one moment...
anaconda 33.16.4.15-1.el8.0.2 for CentOS Linux 8 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * if the graphical installation interface fails to start, try again with the
   inst.text bootoption to start text installation
 * when reporting a bug add logs from /tmp as separate text/plain attachments
13:25:21 Not asking for VNC because we don't have a network
================================================================================
================================================================================
Installation

1) [x] Language settings                 2) [x] Time settings
       (English (United States))                (America/New_York timezone)
3) [!] Installation source               4) [!] Software selection
       (Processing...)                          (Processing...)
5) [!] Installation Destination          6) [x] Kdump
       (Processing...)                          (Kdump is enabled)
7) [!] Network configuration             8) [!] Root password
       (Not connected)                          (Root account is disabled.)
9) [!] User creation
       (No user will be created)

Please make a selection from the above ['b' to begin installation, 'q' to quit,
'r' to refresh]:
[anaconda]1:main* 2:shell  3:log  4:storage-log >Switch tab: Alt+Tab | Help: F1

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

4.ゲストマシンの状態確認

4-1.ゲストマシンにログインする。

[root@kvm02 ~]# virsh list
 Id   名前      状態
------------------------
 5    guest03   実行中
[root@kvm02 ~]# virsh console guest03
ドメイン guest03 に接続しました
エスケープ文字は ^] です

CentOS Linux 8
Kernel 4.18.0-305.3.1.el8.x86_64 on an x86_64

localhost login: root
パスワード:
前回のログイン: Wed Oct  6 22:40:15 端末: ttyS0
[root@localhost ~]#

4-2.ディスクの状態を確認する。

[root@localhost ~]# fdisk -l
ディスク /dev/vda: 20 GiB, 21474837504 バイト, 41943042 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xff4b72b7

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/vda1  *        2048  2099199  2097152     1G 83 Linux
/dev/vda2        2099200  6293503  4194304     2G 82 Linux スワップ / Solaris
/dev/vda3        6293504 41943039 35649536    17G 83 Linux
[root@localhost ~]# iscsiadm -m session
-bash: iscsiadm: コマンドが見つかりません

ゲストマシンからはあたかもローカルディスクのように見える。iSCSIプロトコルはストレージとホストマシンとの間で終端しているため。

参考サイト

https://soar.keizof.com/wp/?p=157 access.redhat.com