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 配置的 URL
  • virt_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_mirrorvirt_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

关于项目

Role to install and manage KVM VMs.

安装
ansible-galaxy install serverbee.virt_guest_manage
许可证
Unknown
下载
76
拥有者