主机有一个可用的外部 IP,因此我使用 NAT 设置了我的 KVM 来宾。
如何设置端口转发来转发一些来自外部的请求给客人?
我找不到任何关于此的文档。最接近的答案可能是这个答案,但也提到在 libvirt 0.8.3 中有更简单的方法来做到这一点。有谁知道更现代的方法来做到这一点?
我希望我的一些域在我的主机启动时自动启动(我在 ubuntu 上使用 libvirt+KVM)。我想我可以在 rc.local 中放置一些“virsh start...”语句,但是有没有办法在 libvirt/virsh 中配置它?
试图保持在红帽的青睐范围内并仍然计划系统寿命是很棘手的......
一年多来,我一直是Linux Containers (LXC)的支持者。我的初始安装基于从在线教程中收集的信息,例如this one和this one。这个中心的周围lxc-create,lxc-start|stop并且lxc-destroy命令和修改现有OpenVZ的模板。
这运行良好,并在生产中愉快地运行。但是,我提出了一些额外的系统,并决定查看 Red Hat 当前有关 EL6 容器的文档。看到他们在这方面的官方立场,我感到很惊讶。
在RHEL 6 是否提供使用 Linux 容器所需的 LXC 工具?,Red Hat 将 LXC 描述为技术预览并建议使用 libvirt 来管理创建和管理容器。
然而,Oracle在其 Unbreakable Linux 中提倡一种完全不同的容器化技术。
libvirt 方法中似乎缺少一些功能,但是我最初使用 lxc-* 命令的方法有点像手动过程……我不太清楚在 EL6 上管理容器的方法或“可接受”方法.
我正在使用 libvirt 和 kvm 来虚拟化我的服务器。我将 libvirt 配置为在网桥网络接口上启动一个 dhcp-server 来为虚拟机提供它们的 ips。每个 VM 总是基于其 mac 获得相同的 ip,配置如下:
<dhcp>
<range start='10.1.1.2' end='10.1.1.254' />
<host mac='54:52:00:21:01:ba' name='virstvm' ip='10.1.1.10' />
<host mac='00:16:36:2d:71:f9' name='secvm' ip='10.1.1.20' />
</dhcp>
Run Code Online (Sandbox Code Playgroud)
问题:每当我向 dhcp 部分添加新主机时,我都必须重新启动 libvirt-bin,它会重新启动我所有的. 这不能成为解决方案,因为这意味着每次添加新服务器时都会停机。有解决办法吗?
我有几个通过 KVM+libvirt 在 Ubuntu 9.10 上运行的虚拟机。我希望能够找出分配给每台主机的 IP 地址,而无需为每台机器打开物理“控制台”并调用ifconfig.
考虑:
rascher@localhost:~$ virsh -c qemu:///system list --all 连接到uri:qemu:///system ID 名称 状态 ---------------------------------- 1 台机器 1 正在运行 2 台机器 2 正在运行 - machine3 关闭
我的网络配置如下:
<network>
<name>default</name>
<uuid>1be...</uuid>
<forward mode='route' dev="eth0"/>
<bridge name='virbr0' stp='on' forwardDelay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能得到一个清单,上面写着:
machine1 IP 地址 = 192.168.122.16 machine2 IP 地址 = 192.168.122.238 ...
我玩过arp:
rascher@localhost:~$ arp 地址 HWtype HWaddress Flags 掩码接口 192.168.122.238 以太 …
我有一个可以从virsh. 根据virsh dumpxml VM1,这是分配的 pty:
<serial type='pty'>
<source path='/dev/pts/6'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/6'>
<source path='/dev/pts/6'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
Run Code Online (Sandbox Code Playgroud)
虚拟机正在运行:
# virsh list
Id Name State
----------------------------------
7 VM1 running
Run Code Online (Sandbox Code Playgroud)
在 VM 内部,这是 grub 配置:
kernel /boot/vmlinuz-2.6.24-28-virtual root=UUID=7a1685b9-ecc8-4b70-932c-459a6faac07d ro quiet splash console=tty0 console=ttyS0,9600n8
Run Code Online (Sandbox Code Playgroud)
这是由 virsh 启动的用于启动 VM 的命令行:
/usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 256 -smp 1,sockets=1,cores=1,threads=1 -name VM1 -uuid 47ff6ec2-a748-4738-16b9-2ffe5780e456 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/VM1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c …Run Code Online (Sandbox Code Playgroud) 有没有办法将我的鼠标移入和移出 KVM 来宾,virt-manager而无需单击以获得窗口的焦点并通过按Ctrl_L+释放焦点Alt_L?
背景
我通常从连接Fedora 14使用系统virt-manager来管理运行来宾的KVMCentOS 5系统。为了查看是否重要,我尝试使用这些其他版本的virt-manager&libvirt来查看是否是版本问题:
OS virt-manager libvirt Steals focus?
-- ------------ ------- -------------
Fedora 14 0.8.7-2 0.8.3-10 Yes
CentOS 5 0.6.1-16 0.8.2-25 Yes
CentOS 6 0.9.0-14 0.9.10-21 Yes
Run Code Online (Sandbox Code Playgroud)
不确定它是否重要,但来宾 VM 是Win2008R2,但我在其他操作系统作为来宾时看到了同样的问题。
这是我点击进入之前和之后来宾 VM 的屏幕截图,显示它正在窃取焦点。


编辑#1
我刚刚尝试了@tpow推荐的解决方案,这似乎是问题所在。手动添加平板电脑输入设备解决了这个问题,我现在可以将鼠标移入和移出KVM来宾,而无需先获得焦点。
这是带有焦点的来宾 VM 的屏幕截图。

仍在尝试使 GPU 直通工作并决定将机器类型从较旧的 440fx 更改为 q35,即 pc-q35,但如果我对配置进行 virsh 编辑,它拒绝保存说“不支持 PCI 桥接器”...通过当前的 qemu 二进制文件。我需要在虚拟机 xml 文件中修复/更改什么?
经过一些研究,似乎 q35 只允许 PCIexpress PCIe 而不是 PCI,但我不知道在我的 xml 文件中更改什么,以便 virsh 停止抱怨并接受从 440fx 到 q35 的更改。
这是在 Debian Jessie 上:uname -a Linux vmserver 3.16.0-customvmkernel #1 SMP Sun Sep 28 00:34:42 PDT 2014 x86_64 GNU/Linux
kvm --version QEMU 模拟器版本 2.1.0 (Debian 2.1+dfsg-4)
这是我当前要更改为 q35 的 440fx 虚拟机文件:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>Win7enterprise32bit</name>
<uuid>77599af9-35a3-45e1-9fce-74304f7d7a9c</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc-i440fx-2.1'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/> …Run Code Online (Sandbox Code Playgroud) virtualization virtual-machines libvirt qemu kvm-virtualization
我们有一个由两个节点组成的 Heartbeat/DRBD/Pacemaker/KVM/Qemu/libvirt 集群。每个节点都运行带有以下包/版本的 Ubuntu 12.04 64 位:
虚拟来宾运行 Ubuntu 10.04 64 位和 Ubuntu 12.04 64 位。我们使用 libvirt 功能将主机 CPU 的功能传递给虚拟来宾,以实现最佳 CPU 性能。
现在这里是这个集群上的一个常见设置:
我们最近运行了一些简单的测试。我知道他们不专业,没有达到高标准,但他们已经表现出一个强大的趋势:
节点 A 正在运行 VM“bla” 节点 B 正在运行 VM“监控”
当我们将文件从虚拟机“bla”同步到虚拟机“监控”时,我们仅达到 12 MB/s。当我们在虚拟机“监控”中执行一个简单的 dd if=/dev/null of=/tmp/blubb 时,我们达到了大约 30 MB/s。
然后我们向虚拟机“监控”添加了 4 个 vCPU 并重新启动它。VM“监控”现在有 8 个 vCPU。我们重新运行测试,结果如下:当我们将文件从 VM“bla”同步到 VM“监控”时,我们现在达到了 36 MB/s。当我们在虚拟机“监控”中执行一个简单的 dd if=/dev/null of=/tmp/blubb 时,我们现在达到了大约 61 MB/s。
对我来说,这种效果是相当令人惊讶的。为什么会自动为这个虚拟来宾添加更多虚拟 CPU …
performance central-processing-unit libvirt qemu kvm-virtualization
在 Debian-Stretch 主机(连接到物理 LAN)上,我有一个新的 docker 安装(v18.09)和一个数据库容器(端口映射到主机),我运行 KVM/libvirt 和一些 Debian-Stretch VM。我可以从 LAN 访问 docker 容器和 VM(取决于通过 SSH 隧道或直接配置的配置),但我很难从 VM 访问 docker 容器。
# brctl show
bridge name bridge id STP enabled interfaces
br-f9f3ccd64037 8000.0242b3ebe3a0 no
docker0 8000.024241f39b89 no veth35454ac
virbr0 8000.525400566522 yes virbr0-nic
Run Code Online (Sandbox Code Playgroud)
在阅读了几天之后,我在这篇文章中找到了一个非常引人注目的解决方案Docker 和 KVM 带有一个我没有开始工作的桥(原始)。该解决方案建议使用一行配置 daemon.json 代码启动 docker 以使用 KVM“默认”网桥。那该有多好!有希望吗?
我在 KVM 虚拟机之间尝试了两种不同的网络配置。在这两种情况下,VM 与 LAN+路由器+云之间的通信都完美无缺,但我只是不知道如何越过围栏 - 到更绿的草地...... :)
Conf 1 - KVM 默认桥接与 NAT:我可以通过 ssh 连接到 Debian 主机并访问 docker 容器端口,但是否有直接路由的设置?
会议 2 - …
libvirt linux-networking kvm-virtualization docker debian-stretch
libvirt ×10
qemu ×2
centos ×1
containers ×1
dhcp ×1
docker ×1
linux ×1
lxc ×1
performance ×1
redhat ×1
ubuntu ×1
virt-manager ×1