network 发表于 2017-6-26 07:32:16

How to create a Virtual Machine in SmartOS

  在SmartOS中,使用vmadm创建工具创建虚拟机。 此工具需要一个JSON有效负载,并使用输入JSON中指定的属性创建“kvm”或“joyent” brand zone。 正常输出是一系列单行JSON对象,其类型设置为以下之一:
  成功
   失败
  更新
   注意
  每个对象至少具有“类型”和“消息”字段。 “成功”或“失败”类型的消息将跟随退出状态0表示成功的进程,所有其他退出指示失败。
  vmadm create -f <filename.json>
Getting Started

  你会需要
   SmartOS的最新版本,可从http://download.joyent.com(此处的发布详情)
   您的操作系统的ISO选择
   VNC客户端
The Machine JSON Description
  将下面的代码片段保存到一个名为“vmspec.json”的文件中。 您可以根据需要更改网络和其他变量。 这并不是所有选项的详尽列表。 对于所有选项,请参阅vmadm(1m)。 (size列在MiB中)


{
"brand": "kvm",
"vcpus": 1,
"autoboot": false,
"ram": 1024,
"resolvers": ["208.67.222.222", "208.67.220.220"],
"disks": [
    {
      "boot": true,
      "model": "virtio",
      "size": 40960
    }
],
"nics": [
    {
      "nic_tag": "admin",
      "model": "virtio",
      "ip": "10.88.88.51",
      "netmask": "255.255.255.0",
      "gateway": "10.88.88.1",
      "primary": 1
    }
]
}
对于2011年12月15日之前的版本,您需要在根目录中添加default_gateway属性:


"default_gateway": "10.88.88.1",
这必须与nics之一的网关相匹配,以便默认网关和解析器将通过VM中的DHCP进行设置。
当安装不支持virtio支持的操作系统,而不是在磁盘上使用virtio使用ide和e1000作为网络模型。
Create the Empty Virtual Machine
  使用创建机器工具创建空虚拟机。 请注意,虚拟机将不会运行。
  $ vmadm create
  注意UUID在最后一步。 该UUID是虚拟机的ID,将用于在其生命周期的其余部分引用它。


$ vmadm create < vmspec.json

{"percent":1,"type":"update","message":"checking and applying defaults to payload"}
{"percent":2,"type":"update","message":"checking required datasets"}
{"percent":28,"type":"update","message":"we have all necessary datasets"}
{"percent":29,"type":"update","message":"creating volumes"}
{"percent":51,"type":"update","message":"creating zone container"}
{"percent":94,"type":"update","message":"storing zone metadata"}
{"uuid":"b8ab5fc1-8576-45ef-bb51-9826b52a4651","type":"success","message":"created VM"}
Copy your OS ISO to the zone


$ cd /zones/b8ab5fc1-8576-45ef-bb51-9826b52a4651/root/
$ wget http://mirrors.debian.com/path_to_an_iso/debian.iso
Ensure permissions are correct on the ISO


$ chown root debian.iso
$ chmod u+r debian.iso
Boot the VM from the ISO Image(从ISO映像启动虚拟机)
  vmadm是虚拟机管理工具。 它用于在虚拟机已存在之后管理虚拟机的生命周期。 我们将引导我们刚刚创建的虚拟机,但是在第一次出现之时,请告诉它启动ISO映像。


vmadm boot b8ab5fc1-8576-45ef-bb51-9826b52a4651 order=cd,once=d cdrom=/debian.iso,ide
请注意,ISO映像的路径将是ISO到您所在zone的相对路径,这就是为什么以“/”开头
Use VNC to Connect to the VM
  vmadm工具可以打印出VM上的信息。 您还可以附加一个部分进行特定打印。


$ vmadm info b8ab5fc1-8576-45ef-bb51-9826b52a4651 vnc

{
"vnc": {
    "display": 39565,
    "port": 45465,
    "host": "10.99.99.7"
}
}
您的虚拟机正在运行。 您可以关闭虚拟机,它仍然保留在磁盘上。 要了解有关管理虚拟机生命周期的更多信息,请运行vmadm --help。
Troubleshooting(故障排除)
Zone Networking Issues
  如果您将SmartOS作为guest虚拟机运行,则可能会与您的zone有联网问题。 为了解决这个问题,我们需要创建一个桥梁。
如果您查看https://github.com/joyent/smartos-overlay/blob/master/lib/svc/method/net-physical#L179您可以看到该脚本将为vmare产品创建桥梁,但如果您是 使用VirtualBox或Parallells,那么您需要手动执行。


$ ifconfig -a
e1000g0: flags=1100943<UP,BROADCAST,RUNNING,PROMISC,MULTICAST,ROUTER,IPv4> mtu 1500 index 2
      inet 10.216.214.7 netmask ffffff00 broadcast 10.216.214.255
      ether 8:0:27:e1:35:cb

$ dladm create-bridge -l e1000g0 vboxbr
您的区域现在应该能够访问网络。 您不需要更改任何zone的nic_tag,将它们保留为“admin”或“external”。

有一种方法可以在启动时将其添加到/ opt / custom / smf中的smf脚本。 这是一个很好的写作,告诉你它是如何做的。 http://www.psychicfriends.net/blog/archives/2012/03/21/smartosorg_run_things_at_boot.html#003979
Further Reading
  Those versed in JavaScript can learn a lot more by reading the vmadm.js source.
页: [1]
查看完整版本: How to create a Virtual Machine in SmartOS