serverbee.virt_guest_manage
虚拟机管理角色
此角色使用 官方的 ansible virt 模块 管理基于 RHEL 的虚拟机,使用 KVM 作为虚拟化管理程序。默认情况下,它使用 AlmaLinux 的 RHEL 分支。您可以通过在 group_vars 或 host_vars 中设置来直接控制所有虚拟机。此角色的主要特点是可以并行安装在 virt_guest_list
中设置的所有虚拟机。
开始
支持的虚拟机发行版版本
- CentOS el6(未测试最新版本的角色)
- CentOS el7
- AlmaLinux el8
- AlmaLinux el9
更新默认值以满足您的需求
首先,您需要更新 virt_guest_init_passwd
,以设置自定义密码。其次,您需要查找并设置下载 RHEL 基础安装程序的最近镜像。
此角色范围外的内容
此角色可以管理基于 LVM 的虚拟磁盘,但您必须在使用之前创建物理卷 (PVS) 和卷组 (VGS)。同时,还有两种不同的虚拟网络接口选项。第一种方法是使用已有的、已配置的 Linux 桥接,第二种方法是使用 libvirt 网络。无论如何,最后选项都可以通过此角色直接管理 virt_network_list
。
变量
一般变量
virt_guest_dependency_qemu_kvm_role
:[可选,默认为true
]:是否启用 qemu-kvm 的依赖角色virt_guest_mirror
:[默认:http://repo.almalinux.org
]:用于安装操作系统的 AlmaLinux 镜像virt_guest_os_location
:[默认:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]:存储 AlmaLinux 操作系统组件的位置路径virt_guest_kickstart_config_dir
:[默认:/tmp/kickstart
]:创建 kickstart 文件的路径virt_guest_kickstart_config_port
:[默认:8000
]:安装过程中用于下载 kickstart 配置的端口virt_guest_kickstart_config_url
:[默认:Hypervisor 的 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
]:虚拟机操作系统级别的第一个主机名
虚拟网络列表和其设置
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
,也可使用20%VG
或任何等效值用于基于 LVM 的磁盘)virt_guest_list.key.disk.[s|v]d[a-z].device
:[仅针对物理驱动器必需]:Hypervisor 上物理驱动器的完整路径(例如/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 服务器。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
还有什么?
检查虚拟机安装进度
首先,您可以检查虚拟机是否响应 ping 请求。如果没有响应,您可以使用 virsh
CLI 工具查看所有虚拟机的列表及每个安装的进度。Virsh 命令会自动安装为此角色的依赖项。您可以使用 console
选项进行监视:
$ virsh list --all
$ virsh console example-vm
完成安装的超时
有一个变量名为 virt_guest_kickstart_installation_timeout
,默认设置为 480 秒。如果在安装完成之前关闭虚拟机遇到问题,则需要增加超时时间。此外,最好设置与您的托管服务提供商至少在同一国家的最近镜像,以提高下载速度。您可以通过更改 virt_guest_mirror
和 virt_guest_os_location
变量来实现。
只管理一个虚拟机的额外变量
如果您有很多虚拟机,但想只管理其中一台,这个选项会非常有用。它会更快地运行 Ansible playbook,并且不会影响其他虚拟机。您只需在应用 playbook 时设置一个名为 vm
的额外变量:
$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm
每次仅支持传递一个虚拟机的名称。
重新运行虚拟机的安装
如果您之前进行了一些操作并希望重新运行安装,首先必须手动删除所有现有部分:
$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example
此角色不支持虚拟机的自动重新安装,以防止删除现有和必要的数据。
许可证
GPLv3 许可证
作者信息
Vitaly Yakovenko