VMware 虚拟机嵌套部署 KVM 虚拟机小结

Posted by WeYo. 转载请注明出处:http://weyo.me/pages/techs/vmware-vm-for-kvm/

嵌套虚拟化(nested virtualization)是一种在虚拟机内部继续虚拟化的一种技术,Linux Kernel 文档 Nested VMX 对于嵌套虚拟化特性有详细说明。曾经一度认为嵌套虚拟化只支持同类虚拟化技术(例如VMware虚拟机内嵌套部署VMware虚拟机,知乎上也有人讨论过只要硬件给力理论上是能够无限嵌套的:虚拟机中运行虚拟机中运行虚拟机……如此循环能运行多少个?),最近在研究KVM虚拟机镜像制作的时候才发现 VMware 实际上也是支持虚拟化 KVM 的(当然,前提还是硬件支持),不过实际操作才发现有些过程并不像网上的文章那么简单(主要的坑在于 GDK 的 bug),这里汇总整理下完整的操作步骤。(本文部分内容引用自其他文章,详情列于文末以示感谢。)

NOTE:

  1. 本文基于 vSphere 6.0 版本操作,其他版本可类比操作;
  2. 应用嵌套虚拟化之后性能必然有所下降,也会带来一定的不稳定性,比较适用于需要在 VMware 环境模拟 KVM 的场景,不建议使用在生产环境。

1. 开启VMware虚拟机的CPU虚拟化选项

本节内容源自参考文献[1]:对ESXi主机内的虚拟机开启CPU硬件虚拟化支持

首先,在VMware中创建一台虚拟机(建议版本 10 以上),并安装 Linux 操作系统(本文安装的是CentOS 7.2系统),在虚拟机关机的情况下做如下配置:

1)登录VMware桌面客户端 vsphere client,编辑虚拟机,设置“CPU/MMU虚拟化”选项,配置“使用Intel VT-x/AMD-v进行指令集虚拟化并使用Intel EPT/AMD RVI进行MMU虚拟化”;

fig1

2)登录 VMware 网页客户端 vsphere web client 对虚拟机做其他配置(VMware 还是太分裂,强行将设置放在 web 端,所以这里建议 vSphere 版本在 6.0 以上,web 的支持相对好那么一点点,虽然也还是一样难用);

3)如果前面创建的虚拟机版本较低(版本9、10),这里还需要升级虚拟机的兼容性:在虚机上右键选择“兼容性”->“升级虚拟机兼容性”;

fig2

4)再次进入虚拟机的编辑设置界面,打开 CPU 选项卡,有一行“硬件虚拟化:向客户机操作系统公开硬件辅助的虚拟化”,将其打钩即可打开虚拟机的 CPU 虚拟化功能;

fig3

VMware 的配置操作到此结束,接下来是虚拟机内部操作。

2. 配置虚拟机 KVM 模块

本节内容源自文献[3]:Centos7.4安装kvm虚拟机(使用virt-manager管理)

1)打开虚拟机电源,登录虚拟机执行以下命令检查虚拟机是否支持虚拟化:

# grep vmx /proc/cpuinfo

如果该命令有信息输出,就说明 CPU 支持虚拟化,可以继续往下进行;否则 CPU 不支持的情况下无法进行嵌套虚拟化部署。

注意,由于大多数服务器基于 Intel CPU,本命令只针对 Intel CPU,对于 AMD CPU 将命令中的 vmx 改成 svm 即可。

2)执行以下命令查看是否加载KVM模块:

# lsmod | grep kvm

如果没有加载,依次执行以下命令:

# modprobe kvm

# modprobe kvm-intel(针对Intel CPU)或者 modprobe kvm-amd(针对AMD CPU)

# lsmod | grep kvm

3. 虚拟机环境安装

1)将虚拟机 Python 环境配置为 2.7 版本,并安装 KVM 与 virt-manager;

yum install qemu qemu-kvm
yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer -y

2)为防止出现 GDK 图形界面异常:

DEBUG (cli:257) Uncaught exception:
Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/createnet.py", line 830, in finish
    self.set_finish_cursor()
  File "/usr/share/virt-manager/virtManager/baseclass.py", line 272, in set_finish_cursor
    cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")
TypeError: constructor returned NULL

需要编辑 /usr/share/virt-manager/virtManager/baseclass.py 将其中涉及Gdk.Cursor.new_from_name行注释掉(简单粗暴的操作有时候意外的有效)

        #cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")
        #gdk_window.set_cursor(cursor)
        #cursor = Gdk.Cursor.new_from_name(gdk_window.get_display(), "default")
        #gdk_window.set_cursor(cursor)

同样编辑 /usr/share/virt-manager/virtManager/asyncjob.py 将其中涉及 Gdk.Cursor.new_from_name 行注释掉:

            #gdk_window.set_cursor(
            #    Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress"))

3)在 Terminal 中运行 virt-manager 命令打开 Virtual Machine Manager:

fig4

4)如果没有图中的 connection,可以新建一个connection(QEMU/KVM);

5)对已有的 connection 创建NAT虚拟网络:

fig5

6)在控制台界面或者直接使用命令创建新的虚拟机。

创建虚拟机之后,为了防止打开控制台窗口出现无法连接到图形界面错误:

Error connecting to graphical console: could not get a reference to type class

需要设置显示模式为“vnc server”

fig6

随后,就可以按照正常的操作系统安装步骤配置安装虚拟机了。

Tips

virt-manager 的日志位于 /root/.cache/virt-manager/virt-manager.log,任何问题均可以查询日志。使用参数--no-fork打开virt-manager(virt-manager --no-fork)可以不输出日志。

Reference & 致谢

[1] 对ESXi主机内的虚拟机开启CPU硬件虚拟化支持

[2] vSphere 5 文档中心: 在 vSphere Client 中更改 CPU/MMU 虚拟化设置

[3] Centos7.4安装kvm虚拟机(使用virt-manager管理)

[4] How to debug Virtualization problems

[5] KVM虚拟化之嵌套虚拟化nested

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容