serverbee.virt_guest_manage
仮想ゲスト管理ロール
このロールは、公式のAnsible Virtモジュールを使用して、RHELベースの仮想マシンを管理します。ハイパーバイザーとしては KVMを使用します。デフォルトでは、RHELのフォークであるAlmaLinuxを使用します。グループ変数(group_vars)やホスト変数(host_vars)の設定を通じて、すべてのVMを直接制御できます。このロールの主な機能は、virt_guest_list
に設定されたすべての仮想マシンを並行してインストールすることです。
始めるには
仮想マシンレベルでサポートされるディストリビューションバージョン
- CentOS el6(最新のロールバージョンでは未テスト)
- CentOS el7
- AlmaLinux el8
- AlmaLinux el9
デフォルト値の更新
まず最初に、virt_guest_init_passwd
を更新してカスタムパスワードを設定する必要があります。次に、RHELベースのインストーラーのすべてのコンポーネントをダウンロードするために、最寄りのミラーを特定して設定する必要があります。
このロールの範囲外
このロールはVMのLVMベースの仮想ディスクを管理できますが、使用する前に物理ボリューム(PVS)とボリュームグループ(VGS)を作成する必要があります。また、VMの仮想ネットワークインターフェースには2つの異なるオプションがあります。1つ目は既存のLinuxブリッジを使用すること、2つ目はlibvirtネットワーキングを使用することです。いずれにしても、最後のオプションはこのロールから直接virt_network_list
で管理できます。
変数
一般的な変数
virt_guest_dependency_qemu_kvm_role
: [オプション、デフォルトtrue
]: qemu-kvmの依存ロールを有効にするかどうかvirt_guest_mirror
: [デフォルト:http://repo.almalinux.org
]: OSインストールに使用するAlmaLinuxミラーvirt_guest_os_location
: [デフォルト:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]: AlmaLinux OSコンポーネントが保存されている場所virt_guest_kickstart_config_dir
: [デフォルト:/tmp/kickstart
]: Kickstartファイルが作成されるパスvirt_guest_kickstart_config_port
: [デフォルト:8000
]: インストール中のKickstart構成をダウンロードするためのポートvirt_guest_kickstart_config_url
: [デフォルト:ハイパーバイザーのIP
]: インストール中のKickstart構成をダウンロードするためのURLvirt_guest_kickstart_config_serve_timeout
: [デフォルト:90
]: Kickstartファイルを提供するのにかかる時間(秒)virt_guest_kickstart_installation_timeout
: [デフォルト:480
]: Kickstartインストールを完了するのにかかる時間(秒)virt_guest_init_passwd
: [必須]: 初回ログイン時に使用するrootユーザーのパスワードvirt_guest_init_hostname
: [デフォルト:fresh-installed.local
]: 仮想マシンOSレベルでの最初のホスト名
仮想ネットワークリストとその設定
virt_network_list
: [必須、デフォルト:{}
]: 仮想ネットワークの宣言virt_network_list.key
: [必須]: 仮想ネットワークの名前(例:br-nat0:
)virt_network_list.key.router
: [必須]: 仮想ルーターのIPアドレス(例:192.168.2.1
)virt_network_list.key.netmask
: [必須]: 仮想ネットワークのネットマスク(例:255.255.255.0
)virt_network_list.key.start
: [必須]: 仮想ネットワーク範囲の最初のIP(例:192.168.2.1
)virt_network_list.key.end
: [必須]: 仮想ネットワーク範囲の最後のIP(例:192.168.2.254
)
仮想ゲストリストとその設定
virt_guest_list
: [必須、デフォルト:{}
]: 仮想ゲストの宣言virt_guest_list.key
: [必須]: 仮想マシンの名前(例:example-vm:
)virt_guest_list.key.autostart
: [オプション、デフォルトtrue
]: 仮想マシンの自動起動を有効にするかどうかvirt_guest_list.key.uuid
: [必須]: 仮想マシンのユニバーサリー一意識別子(例:ad852ffe-07d9-43ec-9f5a-ced644f9a7a5
)virt_guest_list.key.cpu
: [オプション、デフォルト1
]: CPUコアの制限を設定virt_guest_list.key.ram
: [オプション、デフォルト2
]: RAMの制限を設定。この値はGiB単位で設定されます。virt_guest_list.key.disk
: [必須]: 仮想ゲストのディスク宣言virt_guest_list.key.disk.[s|v]d[a-z]
: [必須]: 仮想マシン内の仮想ディスクの名前(例:sda
,sdb
,sdc
など、またはvda
,vdb
,vdc
など)virt_guest_list.key.disk.[s|v]d[a-z].type
: [オプション、デフォルトblock
]: 仮想ディスクのタイプ(例:block
,file
)virt_guest_list.key.disk.[s|v]d[a-z].name
: [.type: file
の場合のみ必須]: 仮想QEMUディスクファイルの名前virt_guest_list.key.disk.[s|v]d[a-z].format
: [オプション、デフォルトraw
]: 仮想ディスクのQEMUフォーマットタイプ(例:raw
,qcow2
)virt_guest_list.key.disk.[s|v]d[a-z].format_options
: [オプション、デフォルトpreallocation=off
]: QEMUディスクフォーマットオプション(例:preallocation=metadata
)virt_guest_list.key.disk.[s|v]d[a-z].vg
: [.type: block
の場合のみ必須]: LVMボリュームグループの名前virt_guest_list.key.disk.[s|v]d[a-z].lv
: [.type: block
の場合のみ必須]: LVMロジックボリュームの名前virt_guest_list.key.disk.[s|v]d[a-z].size
: [必須、物理ドライブを使用する場合を除く]: 仮想ディスクのサイズ(例:2048M
,10G
,1T
、またはLVMベースのディスクには20%VG
やその等価物が使用できます)virt_guest_list.key.disk.[s|v]d[a-z].device
: [物理ドライブの場合のみ必須]: ハイパーバイザー上の物理ドライブへの完全なパス(例:/dev/sdb
,/dev/nvme0n1
など)virt_guest_list.key.disk.[s|v]da.fstype
: [オプション、デフォルトxfs
]: 仮想ディスク内のすべてのパーティションのファイルシステムタイプ(例:ext4
,ext3
など)virt_guest_list.key.network
: [必須]: 仮想ゲストネットワークの宣言virt_guest_list.key.network.eth[0-9]
: [必須]: 仮想マシンのネットワークインターフェースの名前(例:eth0
,eth1
など)virt_guest_list.key.network.eth[0-9].mac
: [必須]: 仮想ネットワークインターフェースのMACアドレス(例:52:54:00:16:01:bc
など)virt_guest_list.key.network.eth[0-9].bridge
: [必須]: vnetインターフェースが含まれるブリッジインターフェースの名前(例:br0
,bridge1
など)virt_guest_list.key.network.eth[0-9].model
: [オプション、デフォルトvirtio
]: 仮想ネットワークインターフェースのQEMUモデル(例:virtio
,e1000
,rtl8139
など)virt_guest_list.key.network.eth0.ip
: [オプション]: メインネットワークインターフェースの静的IPアドレスvirt_guest_list.key.network.eth0.netmask
: [オプション]: メインネットワークインターフェースのネットマスクvirt_guest_list.key.network.eth0.gateway
: [オプション]: メインネットワークインターフェースのゲートウェイのIPアドレスvirt_guest_list.key.network.eth0.dns
: [オプション]: プライマリーDNSサーバー。このオプションはDNSサーバーを1つだけサポートします。virt_guest_list.key.vnc_enable
: [オプション、デフォルトfalse
]: 仮想マシンにアクセスするためのQEMU-KVM側のVNCサーバーを有効にする
依存関係
serverbee.qemu_kvmロール
例
簡単な例
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_guest_list:
example-vm:
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
disk:
sda:
vg: vg_local
lv: lv_vm_example
size: 10G
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
完全なオプションの例
---
- hosts: localhost
roles:
- serverbee.virt_guest_manage
vars:
virt_network_list:
br-nat0:
router: 192.168.2.1
netmask: 255.255.255.0
start: 192.168.2.2
end: 192.168.2.254
virt_guest_list:
example-vm:
autostart: false
uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
cpu: 2 # コア
ram: 4 # GiB
disk:
sda:
type: block
format: raw
vg: vg_local
lv: lv_vm_example-first
size: 20%VG
fstype: ext4
vdb:
type: file
format: qcow2
format_options: preallocation=metadata
name: example-second-drive
size: 5G
sdc:
device: /dev/nvme0n1
network:
eth0:
mac: 52:54:00:16:01:bc
bridge: br0
model: virtio
ip: 172.16.2.2
netmask: 255.255.255.248
gateway: 172.16.2.1
dns: 172.16.2.1
eth1:
mac: 52:54:00:16:02:ba
network: br-nat0
model: e1000
vnc_enable: true
それ以外に?
VMのインストール進捗を確認する
まず、VMがpingリクエストに応答するかどうかを確認できます。応答しない場合は、virsh
CLIツールを使用して、すべてのVMのリストを確認し、各インストールの進捗を確認できます。このロールの依存関係として自動的にインストールされるコマンドです。console
オプションを使って監視できます。
$ virsh list --all
$ virsh console example-vm
インストールを完了するまでのタイムアウト
virt_guest_kickstart_installation_timeout
という変数があり、デフォルトでは480秒に設定されています。インストールを終了する前にVMをシャットダウンする際に問題がある場合は、タイムアウトを延ばす必要があります。また、ホスティングプロバイダーと同じ国に近いミラーを設定すると、ダウンロード速度を向上させることができます。これにはvirt_guest_mirror
とvirt_guest_os_location
変数を変更します。
単一VMを管理するための追加変数
多くの仮想マシンがある場合でも、そのうちの1つだけを管理したい場合に非常に便利なオプションです。Ansibleプレイブックをより速く実行し、他の仮想マシンに対して何かを適用せずに済みます。これを行うには、プレイブックを適用するときにvm
という追加の変数を設定します:
$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm
同時に1つの仮想マシンの名前のみを渡すことができます。
VMのインストールを再実行する
以前に何かを試していて、再度インストールを実行したい場合は、まずすべての既存の部分を手動で削除する必要があります:
$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example
このロールは、既存および必要なデータを誤って削除しないように、VMの自動再インストールをサポートしていません。
ライセンス
GPLv3ライセンス
作者情報
Vitaly Yakovenko