QEmu-KVM:如何在没有 libvirt 的情况下配置虚拟机?

QEmu-KVM:如何在没有 libvirt 的情况下配置虚拟机?

为了全面理解和了解更多有关 KVM 技术的知识,我需要仅使用命令行来管理和运行虚拟机,这就是命令kvm

到目前为止我已经完成了所有需要做的事情,除了网络部分。

我的意思是,在 CLI 上,我已将客户的以太网接口定义为

-device virtio-net-pci,mac=02:01:01:01:01:01

但我找不到足够的文档来将其连接到主机网络接口(即 LACP 以太网绑定接口)。这应该使用-netdevCLI 选项完成。

我需要让每个虚拟机互相通信、与客户机通信以及与主机 LAN 上的其他主机通信。

我找到了许多关于桥接之类的文档(可能已经过时了),但最终它们都是基于 libvirt。

虽然它是一个非常强大的工具,但它

  1. 向用户隐藏了太多细节,并且

  2. 有时需要你下载别人制作的 XML 文件,然后定制以满足您的需要。

是否有任何文档说明如何-netdev在各种情况下使用,以及多种策略的优缺点?

答案1

@shodanskok 在评论中提出了一个非常有效的观点,那就是:为什么不通过 libvirt 来使用virsh?它是 QEMU / KVM 以及 ESXi 和 Xen 的出色命令行抽象。您可以使用 XML 代码片段来管理设备附件,并且无论在哪个虚拟机管理程序下运行,它都是标准化工具堆栈的好方法。OpenStack 正是出于这个原因而直接使用它,它提供了异构云所需的灵活性。

除此之外,如果你要直接使用 qemu-kvm 命令,您需要管理自己的网络堆栈。具体来说,在这种情况下您缺少桥接器。

您将需要创建一个所有虚拟机都连接到的桥接接口。这将为您提供所有机器之间的完全互通。在这种情况下,网桥是虚拟转发交换机。您的绑定也将连接到此交换机,将外部网络连接到此虚拟交换机。

您需要使用发行版的网络脚本来创建这样的接口并将您的绑定附加到它。您没有提到您的发行版,因此我将提供此问题的“临时”解决方案(在 GNU / Linux 中是通用的)。这些更改将在重新启动时丢失,因此请确保将您的网桥添加到您的接口配置文件中。

一方面,libvirt 能够通过 virsh 命令行设置这些接口坚持不懈(持久性由 XML 文件授予),而不必担心特定于分发的接口配置文件。再次出击,有效的高级工具堆栈。

要创建桥:

# brctl addbr br0(本例中桥名称为 br0。该名称是任意的)。

要向该桥添加底层接口:

# brctl addif bond0 br0(在本例中,我们将 bond0 添加到 br0)

完成此操作后,您的链路层主机网络就完成了。如果您需要通过 IP 地址寻址您的主机,您可以将该地址放在网桥上。不要将其放在下一层,例如放在绑定上。那样根本行不通。

要向该桥接器添加 IP(如果您没有为桥接器创建接口文件,这也会是短暂的,但会立即起作用):

# ip a add 10.1.0.100/24 dev br0(给出的 IP 仅仅是一个例子。)

作为潜在的帮助,这里是在 CentOS 和 Debian 上设置持久桥的链接。

对于 CentOS:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_network-bridge.html

对于 Debian:https://wiki.debian.org/NetworkConfiguration#Bridging

一旦设置完成,您只需-device按如下方式修改开关:

-device virtio-net-pci,netdev=br0,mac=02:01:01:01:01:01

答案2

嗯,libvirt 管理起来会容易得多;您可以使用以 XML 格式存储的配置,它还有一个 CLI(virsh)。但是,没有它它也能工作,如果您使用所有参数启动虚拟机,它只是一个可怕的命令。

如果你想与你的客人共享物理主机接口,你可以使用桥接器,但如今这不是什么大问题,除了 WLAN 接口(大多数都不支持桥接)。根据您的发行版,您必须设置桥接接口。例如,在基于 Debian 的系统(例如 Debian、Ubuntu)中,您必须安装 bridge-utils 并编辑 /etc/network/interfaces:

# Replace the auto entry for your old interface with br0
auto br0

# Use old interface config config for br0, plus bridge options
iface br0 inet dhcp
    bridge_ports    eth0 #The interface you want to bridge
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

对于静态,这将是这样的:

iface br0 inet static
    address 10.10.1.2
    network 10.10.1.0
    netmask 255.255.255.0
    broadcast 10.10.1.255
    gateway 10.10.1.1
    dns-nameservers 10.10.1.1 8.8.8.8
    bridge_ports    eth0
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

然后你基本上只需启动你的虚拟机并添加以下选项:

-netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1

mac 参数是可选的,但您可以将其添加到 -device 选项。

答案3

你可以试试:http://www.linux-kvm.org/page/Simple_shell_script_to_manage_your_virtual_machine_with_bridged_networking

或者欢迎查看此页面:http://www.linux-kvm.org/page/Management_Tools有一些管理工具,即使没有 libvirt 也可以使用。

相关内容