12.2 创建虚拟机及虚拟机模板
要创建一个虚拟机,使用 Folder.CreateVM_Task 方法,该方法以 VirtualMachineConfigSpec 数据对象作为入参,VirtualMachineConfigSpec 允许你指定你所需创建虚拟机的属性。
如果你需要几个相同的虚拟机,你可以将一个现有的虚拟机转换为一个模板,并从模板中创建多个副本(克隆),你还可以通过直接克隆现有的虚拟机来创建多个虚拟机。
虚拟机是你 vSphere 环境下重要元素,通过调用 Folder.CreateVM_Task 来创建一个虚拟机,并通过使用 VirtualMachine 托管对象的属性和方法来配置虚拟机,大多数属性指向的数据对象作为这些方法的输入。下面的类图显示了其中一些属性和方法。
12.2.1 使用 VirtualMachineConfigSpec 创建虚拟机
使用 Folder.CreateVM_Task 方法通过指定虚拟机的属性创建虚拟机,你必须指定一个主机或一个资源池(或两者)。该虚拟机使用来自主机或资源池的 CPU 和内存资源。
调用 CreateVM_Task 方法
通过调用 Folder.CreateVM_Task 方法及下面的参数创建虚拟机:
■ _this – Folder 你想要放置虚拟机的位置
■ config – VirtualMachineConfigSpec 数据对象,指定了 CPU、内存、网络等,查看用 VirtualMachineConfigSpec 指定虚拟机属性
■ pool – Resource pool,用于虚拟机从中提取资源
■ host – HostSystem 托管对象,表示运行虚拟机的目标主机,如果你是在独立主机上调用该方法,可忽略该参数;如果目标主机是 VMware DRS 集群的一部分,那么这个参数是可选的;如果没有指定主机,系统将选择一个主机。
注意:所有对象必须位于相同的 datacenter。
用 VirtualMachineConfigSpec 指定虚拟机属性
虚拟机的实际定制是通过将 VirtualMachineConfigSpec 的属性作为一个参数传递给 Folder.CreateVM_Task 接口来实现的。
例如,你可以指定虚拟机的名称、启动选项、cpu数量和内存, 所有的 VirtualMachineConfigSpec 的属性都是可选的以支持增量改变。
下面从 VMCreate 示例程序截取的代码片段说明了如何定义一个 VirtualMachineConfigSpec 。
Example: 定义一个 VirtualMachineConfigSpec 数据对象
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
...
vmConfigSpec.setName(“MyVM”);
vmConfigSpec.setMemoryMB(new Long(Integer.parseInt 500));
vmConfigSpec.setNumCPUs(Integer.parseInt 4);
vmConfigSpec.setGuestId(cb.get_option("guestosid"));
...
在 VMware SDK 中的 SDK/samples/Axis/java/com/vmware/apputils/vim/VMUtils.java 示例定义了一个更加全面的虚拟机,它还包括软盘、CD-ROM、磁盘和虚拟网卡。
当创建虚拟机后,虚拟机文件就被添加到虚拟机的存储位置。查看虚拟机文件这节
额外的配置信息
VirtualMachineConfigInfo 和 VirtualMachineConfigSpec 对象提供了 extraConfig 属性用于额外的信息配置,extraConfig 属性是一个确认配置选项的 key/value 键值对数组,服务器为虚拟机将 extraConfig 选项存放子啊 .vmx 文件内。
随着 vSphere API 从版本到版本的演变,一个 extraConfig 选项可能成为一个标准配置属性,它是已定义的库存数据模型的一部分。在这种情况下,你必须使用标准数据模型属性来访问,不能使用 extraConfig 属性。
12.2.2 创建虚拟机模板
模板可以让你创建多个相同特性的虚拟机,如分配给 CPU 和内存的资源,或者虚拟硬件的类型。虚拟机模板是一个虚拟机,但不能启动,并且没有和资源池关联。
通过调用 VirtualMachine.MarkAsTemplate,你可以将任何关机的虚拟机转换成一个模板,在转换完之后,原始的虚拟机不再存在。你可以使用该模板去创建多个相同配置的克隆。
12.2.3 克隆虚拟机
克隆是虚拟机的副本,虚拟机和克隆两者主要的区别是 VirtualMachine.config.template 被设置为 true。
可以以下方式创建一个克隆:
■ 如果你不再需要一个虚拟机的特定实例,但是想要将虚拟机的配置作为一个模板,可以使用 VirtualMachine.MarkAsTemplate 方法,该方法设置 config.template 属性为 true,并禁用虚拟机。
■ 如果你想用一个存在的虚拟机作为模板,而且保留该虚拟机,就调用 VirtualMachine.CloneVM_Task 方法创建一个虚拟机的副本。
如果你使用 VirtualMachine.CloneVM_Task 方法,你可以定制确定的克隆属性,通过当你调用该方法所传入 VirtualMachineCloneSpec 数据对象中指定。
下面 VMClone.java 中的代码片段说明了如何定制一个克隆并为其指定一个新位置。
Example: Cloning a Virtual Machine
VirtualMachineCloneSpec cloneSpec = new VirtualMachineCloneSpec();
VirtualMachineRelocateSpec relocSpec = new VirtualMachineRelocateSpec();
cloneSpec.setLocation(relocSpec);
cloneSpec.setPowerOn(false);
cloneSpec.setTemplate(false);
String clonedName = cloneName;
ManagedObjectReference cloneTask
= service.cloneVM_Task(vmRef, vmFolderRef, clonedName, cloneSpec);
VirtualMachine.CloneVM_Task 方法以源虚拟机、目标 folder、name 及 VirtualMachineCloneSpec 作为参数。
VirtualMachineCloneSpec 数据对象包括位置、电源状态、该克隆是否作为模板。反过来,位置是一个 VirtualMachineRelocateSpec 数据对象,指定目标位置(数据存储、磁盘和主机或资源池),在磁盘上执行的任何转换。
12.2.4 模板转换为虚拟机
可以将一个模板更改为一个操作虚拟机。
■ 要将模板转换为虚拟机,在模板上调用 MarkAsVirtualMachine 方法,必须为虚拟机指定一个资源池及主机(可选的),主机和资源池必须在同一个资源池下,当该操作完成,模板不再存在。
■ 要保留模板,在模板上通过调用 CloneVM_Task 方法克隆模板,在 VirtualMachineCloneSpec (该方法的 spec 参数),设置 template 属性为 false。
12.2.5 访问虚拟机信息
当你创建完一个虚拟机后,可以通过 VirtualMachineConfigInfo 属性获取有关该虚拟机的信息,查阅 API 参考手册 获取完整列表。
检查默认文件
当你创建完一个虚拟机后,在 VirtualMachineConfigSpec.files 属性中指定的目录内就生成了若干文件,相关文件如下表。
虚拟机文件列表
文件 | 示例用法 | 文件描述 | 文件格式 |
.vmx | vmname.vmx | 虚拟机配置文件 | ASCII |
.vmxf | vmname.vmxf | 其他虚拟机配置文件 | ASCII |
.vmdk | vmname.vmdk | 虚拟磁盘文件 | ASCII |
.flat.vmdk | vmname.flat.vmdk | 以二进制格式预分配的虚拟磁盘 | Binary |
.vswp | vmname.vswp | Swap 文件 | |
.nvram | vmname.nvram | 非易失性内存(Non-volatile RAM),存储虚拟机BIOS 信息 | |
.vmss | vmname.vmss | 虚拟机挂起文件 | |
.log | vmware.log | 虚拟机日志文件 | ASCII |
#.log | Vmware-#.log | Old虚拟机日志文件, # 从1开始 | ASCII |
.vmtx | vmname.vmtx | 虚拟机临时文件 | ASCII |
如果你使用快照,下面的其他文件可能是可用的。查阅 Snapshots.
虚拟机快照文件
文件 | 示例用法 | 文件描述 |
.vmsd | vmname.vmsd | 虚拟机快照文件 |
.vmsn | vmname.vmsn | 虚拟机快照数据文件 |
**.delta.vmdk | **.delta.vmdk | 快照差异文件。随着快照的增多,先前的数字扩展增大 |
**.vmdk | vmname.**.vmdk | 快照元数据 |
-Snapshot#.vmsn | vmname-Snapshot#.vmsn | 虚拟机内存快照,快照大小和虚拟机最大内存相等 |
检查默认设备
当创建虚拟机时,同时也创建了一系列的默认设备,基于与你的SDK相关的硬件版本,你可以使用 EnvironmentBrowser.QueryConfigOption 方法查看这些设备。例如,默认创建的 IDE 控制器。这些默认的许多设备中都包含无法更改的属性。
但是,你可以添加下列可选设备到默认设备集:VirtualSerialPort、 VirtualParallelPort、VirtualFloppy、VirtualCdrom、VirtualUSB、VirtualEthernetCard、VirtualDisk 和 VirtualSCSIPassthrough。
注意:不要试着使用 VirtualMachineConfigSpec.deviceChange 方法(在添加设备到虚拟机小节内)改变默认设备属性,因为 deviceChange 方法不适用于默认的设备属性。
原文:
VMware vSphere 6.5 Documentation Center:Creating Virtual Machines and Virtual Machine Templates