嵌套虚拟化
内容
隐藏
什么是
嵌套虚拟化是指在虚拟机(当然是在另一个虚拟机监控程序上运行)中运行虚拟机监控程序(例如PVE或其他)时,而不是在实际硬件上运行虚拟机监控程序。换句话说,您有一个主机虚拟机监控程序,托管一个来宾虚拟机监控程序(作为虚拟机),它可以承载自己的虚拟机。
这显然会增加嵌套环境的开销,但在某些情况下可能会有用:
- 它可以让您在实际实施之前测试(或学习)如何管理虚拟机监控程序,或者在实际对虚拟机监控程序进行实际测试之前测试一些涉及虚拟机监控程序的危险/微妙的过程。
- 它可以使企业在公共服务(云)上部署自己的虚拟化环境,另请参见http://www.ibm.com/developerworks/cloud/library/cl-nestedvirtualization/
要求
为了获得尽可能快的性能(接近本机),任何系统管理程序都应该可以访问通常对虚拟化有用的某些(实际)硬件功能,即所谓的“硬件辅助虚拟化扩展”(请参阅http://en.cn。 wikipedia.org/wiki/Hardware-assisted_virtualization)。
在嵌套虚拟化中,来宾虚拟机管理程序也应有权访问硬件辅助的虚拟化扩展,这意味着主机虚拟机管理程序应将这些扩展公开给其虚拟机。原则上,它也无需这些扩展即可工作,但性能较差,并且不是生产环境的选择(但对于某些测试用例可能已足够)。在Intel CPU内核为3或更高版本的情况下,需要公开这些扩展,即在Proxmox VE 4.x / 5.x中可用,但在较早版本中不是默认设置。
您将需要为这些来宾虚拟机管理程序分配大量的cpu,ram和磁盘。
PVE作为嵌套的Hypervisor
PVE可以:
- 托管一个嵌套(来宾)管理程序,但默认情况下,它不会向其VM公开硬件辅助的虚拟化扩展,因此除非配置了VM(虚拟管理程序),否则您不能期望在来宾管理程序中为虚拟机提供最佳性能s)CPU作为“主机”,并且在物理PVE主机中启用了嵌套的硬件辅助虚拟化扩展。
- 托管为嵌套(访客)管理程序。如果主机管理程序可以向PVE公开硬件辅助的虚拟化扩展,则可以使用它们,并为其来宾提供更好的性能,否则,如在PVE-inside-PVE的情况下,任何vm(kvm)都只能工作关闭KVM硬件虚拟化后(请参阅vm选项)。
启用嵌套的硬件辅助虚拟化
注意:嵌套活动(vmx / svm标志)处于活动状态的VM不能实时迁移! |
在物理PVE主机(或任何其他管理程序)上完成。
要嵌套硬件辅助虚拟化,您必须:
- 使用AMD cpu或最近的Intel一种
- 使用大于等于3.10的内核(在Proxmox VE 4.x中始终如此)
- 启用嵌套支持
检查是否已启用(对于intel cpu为“ kvm_intel”,对于AMD为“ kvm_amd”)
root @ proxmox:〜#cat / sys / module / kvm_intel / parameters / nested
ñ
N表示不启用(“ kvm-intel”为intel):
#回显“选项kvm-intel nested = Y”> /etc/modprobe.d/kvm-intel.conf
(对于AMD,则为“ kvm-amd”,请注意1而不是Y):
#echo“选项kvm-amd nested = 1”>> /etc/modprobe.d/kvm-amd.conf
并重新启动或重新加载内核模块
modprobe -r kvm_intel
modprobe kvm_intel
再检查一遍
root @ proxmox:〜#cat / sys / module / kvm_intel / parameters / nested
ÿ
(请注意在使用破折号“-”的地方,而在其下划线的“ _”处)
然后创建一个来宾,在其中安装Proxmox作为嵌套虚拟化环境。
- 将CPU类型设置为“主机”
- 如果是AMD CPU:在配置文件中还添加以下内容:
args:-cpu主机,+ svm
安装来宾操作系统后,如果使用的是GNU / Linux,则可以输入并验证是否启用了硬件虚拟化支持
root @ guest1#egrep'(vmx | svm)'--color =总是/ proc / cpuinfo
示例:PVE托管PVE guest虚拟机管理程序
设置自嵌套PVE的群集
在物理主机Proxmox中,您将创建2个VM,并在每个虚拟机中安装一个新的Proxmox实例,因此您可以试验群集概念,而无需使用多个物理服务器。
- 登录(Web GUI)您的主机PVE(在真实硬件上运行)
=> PVE
- 在主机PVE中创建两个或多个vm guest虚拟机(kvm),每个虚拟机都具有足够的内存/磁盘,并在每个guest虚拟机vm(同一网络)上从iso安装PVE
=> PVE => VMPVE1(访客PVE)
=> PVE => VMPVE2(访客PVE)
...
- 登录(ssh / console)第一个客户机vm并创建集群CLUSTERNAME
=> PVE => VMPVE1(访客PVE)=> #pvecm创建CLUSTERNAME
- 登录到其他来宾虚拟机并加入集群<CLUSTERNAME>
=> PVE => VMPVE2(访客PVE)=> #pvecm添加<VM1的IP地址>
- 登录(web gui)任何来宾vm(guest虚拟机)并管理新的(guest)集群
=> PVE => VMPVE1 / 2(访客PVE)=> #pvecm n
- 在来宾pve(CLUSTERNAME的节点)内创建vm或ct
- 如果您未启用硬件辅助的嵌套虚拟化,则必须关闭KVM硬件虚拟化(请参阅vm选项)
- 仅为那些来宾安装基于CLI的小型ct或vm(请勿使用GUI尝试任何操作,甚至不要考虑运行Windows ...)
=> PVE => VMPVE1 / 2(访客PVE)=> VM / CT
- 从iso在vm(例如:基本的ubuntu服务器)上安装一些东西
=> PVE => VMPVE2(访客PVE)=> VM(基本ubuntu服务器)
vm / ct性能,无需硬件辅助的虚拟化扩展
如果您无法为客户设置硬件辅助的虚拟化扩展,则性能远非最佳!仅用于练习或测试!
- ct(lxc)会更快,当然相当有用
- vm(kvm)会非常慢,几乎无法使用(您可以预期会慢10倍或更多),因为(如上所述)它们在没有KVM硬件虚拟化的情况下运行
但至少您可以尝试或测试“访客PVE”功能或设置:
- 您可以创建一个小型测试集群以实践集群的概念和操作
- 您可以在升级之前测试新的PVE版本
- 您可以测试与生产设置冲突的设置