使用虚拟机

关于虚拟机的使用

CloudStack在云中为管理员提供了完整的管理所有来宾VMs整个生命周期的功能。CloudStack为终端用户和管理员提供了许多来宾虚机管理操作。VMs能被关机、开机、重启和销毁。

来宾VMs有名称和组。VM的名称和组对于CloudStack是不透明的,对终端用户整理他们的VMs可用。每个VM可以有三个用于不同环境的名称。其中有两个名字受用户控制:

  • 实例名称 – 一个唯一的,不可变的由CloudStack生成的ID,此ID不能被用户修改。此名称符合 IETF RFC 1123中的要求。

  • 显示名称 – 在CloudStack UI中显示的名称。可以由用户设置。默认跟实例名称一致。

  • 名称 – 由DHCP服务器分配给VM的主机名。可以由用户设置。默认跟实例名称一致。

注解

你能把来宾VM的显示名附加到它的内部名称上。更多信息,请参考 “将显示名附加到VM的内部名称”.

来宾VMs可以配置成高可用(HA)。启用了HA的VM由系统监控。如果系统检测到此VM宕机,它可能将尝试在不同的主机上重启VM。更多信息,请参考在虚拟机上启用HA

每个新VM都有一个公共网络IP地址。当VM启动后,CloudStack为此VM的公共网络IP地址与内网IP地址自动创建一个静态NAT。

如果使用了弹性IP(与Netscaler负载均衡同时使用),初始分配给新VM的IP地址并没有标记为弹性的。用户必须将自动配置IP改为获得一个弹性IP,并在新IP与来宾VM的内网IP之间设置静态NAT映射。VM的原始IP地址随后会被释放到可用公共网络IPs池中。同样,你也可以在启用了EIP的基础zone中不为VM分配公网IP。关于弹性IP的更多信息,请参考`“关于弹性IP” <networking2.html#about-elastic-ip>`_。

CloudStack不能区分是VM突然关机还是用户对来宾VM进行的关机操作(像Linux中的“shutdown”命令)。如果从启用了HA功能的VM系统中执行了关机操作,CloudStack会重启它。要对启用了HA功能的VM进行关机操作,你必须通过CloudStack UI或者API。

虚拟机的最佳实践

为了让VMs能够按照预期的工作并提供最好的服务,请按照下面的指导进行操作。

监视VMs的最大容量

管理员应该监视每个集群中的虚拟机实例的总数,如果总量快达到hypervisor允许的最大虚拟机数量时,不再向此群集分配虚拟机。并且,要注意为主机预留一定的计算能力,以防止群集中有主机发生故障,因为发生故障的主机上的虚拟机需要重新部署在这些预留主机上。请咨询您所选择hypervisor的文档,了解此hypervisor能支持的最大虚拟机数量,并将此数值设置在CloudStack的全局设置里。监控每个群集里虚拟机的活跃程序,并将活跃虚拟机保持在一个安全线内。这样,CloudStack就能允许偶尔的主机故障。举个示例:如果集群里有N个主机,而你只能让其中任一主机的停机时间不超过特定时间。那么,你能在此集群部署的最多虚拟主机数量值为:(N-1) * (每主机最大虚拟量数量限值)。一旦群集中的虚拟机达到此数量,必须在CloudStack的用户界面中禁止向此群集分配新的虚拟机。

安装需要的工具和驱动

确认在每个VM上都安装了下列软件和驱动:

  • 对于XenServer,在每个VM上安装PV驱动和Xen tools。这将启用动态迁移和干净的来宾虚机关机。安装Xen tools也是为了使动态的CPU和RAM扩展能够工作。

  • 对于vSphere,在每台VM上安装VMware Tools。这是为了能让控制台查看正常工作。安装VMware Tools也是为了使动态的CPU和RAM扩展能够工作。

使用下面其中一个方法确认已经安装了Xen tools或VMware Tools:

  • 从已经安装了tools的模板创建的每个VM;或者,

  • 当注册一个新的模板时,管理员或者用户可以标示出哪个在模板上安装了tools。这可以通过UI或者使用updateTemplate API来做;或者,

  • 如果用户通过一个没有安装Xen tools或者VMware Tools的模板部署虚机,然后在VM上安装了tools,之后用户可以使用updateVirtualMachine API告知CloudStack。在安装tools和更新虚拟机之后,请重启虚拟机。

虚拟机的生命周期

虚拟机可能处于下列状态:

Basic two-machine CloudStack deployment

一旦一个虚拟机被销毁,那么它就不能被恢复。该虚拟机使用的所有资源被系统回收。其中包括虚拟机的IP地址。

停止操作是比较稳妥的关闭操作系统的方式,因为这样做能正常的关闭所有正在运行的应用程序。如果操作系统不能被停止,才要强制关闭它。这么做跟拔掉物理机器的电源线是一个效果。

重启是关机再开机的过程。

CloudStack会保存虚机硬盘的状态直到它被销毁。

正在运行的虚机可能会因为硬件或者网络故障而出现问题。出现问题的虚机是down状态。

如果系统在三分钟内收不到hypervisor的心跳信号,那么它就会将虚机切换至down状态。

用户能够手动从down状态下重启虚机。

如果虚机被标记上启用了HA,那么系统会自动地重启down状态中的虚机。

创建VMs

虚拟机通常是从模板创建的。用户也能创建空白虚拟机。空白虚拟机就是一个重新安装的操作系统。用户可以通过CD/DVD-ROM加载ISO文件安装。

注解

你可以创建一个VM,但不要启动它。你来决定此VM是否需要作为VM部署的一部分而启动。在deployVm API里面提供了一个startVM参数,提供了这个功能。更多信息,请参考开发者指导。

从模板创建一个VM。

  1. 用管理员或用户账号登录CloudStack UI。

  2. 在左侧导航栏,点击实例

  3. 点击添加实例。

  4. 选择一个区域。

  5. 选择一个模板,然后按照向导中的步骤操作。更多关于如何上传模板的更多信息,请参考`*使用模板* <templates.html>`_。

  6. 确认​你​的​硬​件​设​备​满足​运​行​所​选​的​服​务条件。

  7. 点击提交,你的VM就会被创建并启动。

    注解

    出于安全原因,VM的内部名称仅root管理员可见。

从ISO创建虚拟机:

注解

(XenServer)XXenServer上运行的Windows VMs需要安装PV驱动,它可能在模板中或在创建完VM后添加。PV驱动对于基本的管理功能是必要的,比如挂载额外的卷和ISO镜像、在线迁移和正常关机。

  1. 用管理员或用户账号登录CloudStack UI。

  2. 在左侧导航栏,点击实例

  3. 点击添加实例。

  4. 选择一个区域。

  5. 选择ISO启动,然后按照向导中的步骤进行操作。

  6. 点击提交,你的VM就会被创建并启动。

访问VMs

任​何​用​户​都可​以​访​问​他​们​自​己​的​虚​拟​机​。​管​理​员​能​够​访​问​在​云​中​运​行​的​所​有​虚​拟​机​。

通过CloudStack UI访问VM:

  1. 使用用户或管理员登录到CloudStack用户界面。

  2. 点击实例,然后点击运行VM的名字。

  3. 点击查看控制台按钮 depicts adding an iso image

通过网络直接访问VM:

  1. VM必须开通相关端口以便外部访问。比如,在基础zone中,新的VM可能被关联到一个允许流量进入的安全组。但这取决于你在创建VM的时候选择的安全组。在其他情况下,你可以通过设置端口转发策略来打开一个端口。请参考 “IP转发及防火墙”

  2. 如果打开端口后,你仍然不能使用SSH访问VM,那么可能是VM中没有启用SSH。这取决于当你创建VM的时候选的模板是否启用了SSH。通过CloudStack UI访问VM,然后使用VM操作系统中的命令行启用SSH。

  3. 如果网络中有外部防火墙设备,你需要创建一个防火墙策略来允许访问。请参考`“IP转发及防火墙” <networking2.html#ip-forwarding-and-firewalling>`_。

停止和启动VMs

一旦VM实例被创建,你可以根据需要停止、重启或删除它。在CloudStack UI里,点击实例,选择VM,然后使用停止、启动、重启和销毁按钮。

将VMs指定到主机

在任何时刻,每个虚拟机实例都运行在一台主机上。CloudStack如何决定在哪个主机上放置VM呢?通常是这几种方式:

  • 自动分配默认主机。CloudStack可以自动的选取最合适的主机来运行每个虚机。

  • 实例类型偏好设置。CloudStack管理员可以指定专门为某些特殊来宾实例做过优化的主机。比如,管理员指定为Windows来宾实例做过优化的主机。默认主机分配器会尝试将此类来宾实例运行到这些主机上。如果这些主机不够用,分配器会把实例运行在容量充足的物理机上。

  • 纵向和横向定位。纵向定位是指,在消耗完当前主机提供的所有资源的时候会将所有来宾虚机定位到第二台主机上。这会云中的节省电力成本。横向定位在每个主机上使用轮询的方式放置来宾虚机。在某些情况下这样会给来宾虚机带来更好的性能。

  • 最终用户偏好设置。用户不能控制VM实例运行在哪台主机上,但是他们能为VM指定区域。这样CloudStack就只能将VM分配到该区域中的主机上。

  • 主机标签。管理员可以给主机分配标签。这些标签是用来指定VM该使用哪台主机的。CloudStack管理员自己决定如何定义主机标签,然后使用这些标签创建一个服务方案来提供给用户。

  • 关联性组。依靠定义关联性组并把VMs分配给它们,用户或管理员可以影响(但不是指令)VMs运行在不同的主机上。这个功能是让用户可以规定某些VMs不会运行在同一台主机上。

  • CloudStack为添加新的分配器提供了一个插件似的接口。这些自定义的分配器可以提供任何管理员想要的策略。

关联性组

依靠定义关联性组并把VMs分配给它们,用户或管理员可以影响(但不是指令)VMs运行在不同的主机上。这个功能是让用户可以规定某些VMs运行在同“host anti-affinity”类型的而非同一台主机上。这写类服务器增强了容错功能。如果一个主机出现问题,那么另一个提供同样服务的VM(比如,运行用户的网站)依然在别的主机上运行。

一个关联性组的作用域是针对每个用户账号的。

创建一个新的关联性组

要添加一个关联性组:

  1. 用管理员或用户账号登录CloudStack UI。

  2. 在左侧的导航条,点击关联性组。

  3. 点击添加关联性组。在对话框中的下列区域中输入:

    • 名称。组的名称。

    • 描述。给出更多关于这个组的说明。

    • Type. The only supported type shipped with CloudStack is Host Anti-Affinity. This indicates that the VMs in this group should avoid being placed on the same host with each other. If you see other types in this list, it means that your installation of CloudStack has been extended with customized affinity group plugins.

将一个新的VM分配给一个关联性组

要将一个新的VM分配给一个关联性组:

  • 如何创建VM,在 `“Creating VMs” <virtual_machines.html#creating-vms>`_中有描述。在添加实例向导中,有一个新的关联性组标签,你可以选择关联性组。

给已有的VM更改关联性组

要将已有的VM添加到关联性组:

  1. 用管理员或用户账号登录CloudStack UI。

  2. 在左侧导航栏,点击实例

  3. 点击你想更改的VM的名称。

  4. 点击停止按钮,将此VM关机。

  5. 点击变更关联性组按钮。 button to assign an affinity group to a virtual machine.

查看关联性组的成员

要查看当前哪些VMs被分配到指定的关联性组:

  1. 在左侧的导航条,点击关联性组。

  2. 点击要查看的组的名称。

  3. 点击查看实例。组的成员会列在此处。

    在这里,你可以点击列表中任何VM的名称来访问它所有的详细信息并控制它。

删除一个关联性组

要删除关联性组:

  1. 在左侧的导航条,点击关联性组。

  2. 点击要查看的组的名称。

  3. 点击删除。

    任何属于关联性组的VM都会被踢出此组。之前组里的成员会继续在当前主机上正常的运行,但是如果VM重启了,它就不再按照之前关联性组的主机分配策略。

虚拟机快照

(支持XenServer、KVM和VMware)

利用CloudStack的VM卷快照功能,你可以对VM做快照像保存它的CPU/内存状态一样保护VM的数据卷(可选的)。这对快速还原一个VM来说是非常有用的。比如,你可以对一个VM做快照,然后做了一些像软件升级的操作。如果期间有问题出现,使用之前保存的VM快照就可以将VM恢复到之前的状态了。

快照的创建使用的是 hypervisor本地快照工具。VM快照不但包括数据卷还可选择性的包括VM的运行或关机时(CPU状态)和内存内容的状态。快照保存在CloudStack的主存储里。

VM快照存在父/子关系。同一个VM的每次快照都是之前快照的子级。每次你对同一VM追加的快照,它仅仅保存两次快照之间系统状态差异。之前的快照变成父级,新的快照变成子级。它可能对这些父/子快照创建一个长链,它实际上是一个从当前的VM状态还原到之前的”还原”记录。

如果你需要了解更多关于VMware的VM快照,请转去VMware文档中心和VMwareBK库,查找 了解虚拟机的快照-英文`了解虚拟机的快照-中文<http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2075429>`_

VM快照的限制

  • 如果一个VM存储了一些快照,你就不能给他附加新卷或删除存在的卷。如果你更改了VM的卷,他将不能通过之前卷结构下所做快照来进行恢复。如果你想给这样一个VM附加卷,请先删除快照。

  • 如果你更改了VM的服务方案,那么包含了数据卷和内存的VM快照就不能保留了,任何已有的此类型的VM快照都将被丢弃。

  • 你不能同时对VM在做卷快照和VM快照。

  • 你只能使用CloudStack来创建其管理的主机上的VM快照。你在hypervisor上直接创建的任何快照都不能被CloudStack识别。

配置VM快照

云管理员可以使用全局配置变量来控制VM快照的行为。要设置这些变量,移步至CloudStack UI中的全局设置。

配置设置名

描述

vmsnapshots.max

云中虚拟机能够保存快照的最大数。 (number of VMs) * vmsnapshots.max是云中VM快照的总共可能数量。如果任何一个VM的快照数达到了最大值,那么快照删除任务会把最老的快照删掉。

vmsnapshot.create.wait

在提示失败和发生错误之前快照工作为了成功的做快照而等待的秒数。

是用VM的快照

是用CloudStack UI创建一个VM快照:

  1. 是用用户或者管理员登录CloudStack。

  2. 点击实例。

  3. 点击你想做快照的VM名称。

  4. 点击抓取VM快照按钮。 button to restart a VPC

    注解

    如果一个快照处理过程正在进行,那么点击这个按钮是没有反应的。

  5. 提供一个名称和秒数。这些会显示在VM快照列表中。

  6. (仅限运行中的VMs)如果你想在快照中包含VM的内存状态,请勾选内存。这可以保存虚拟机的CPU和内存状态。如果你不勾选这个选项,那么只有VM目前磁盘状态会被保存。勾选了这个选项会让快照过程变长。

  7. 静止VM:如果你想在做快照之前让VM的文件系统处于静止状态,请勾选此选项。使用CloudStack提供的主存储的XenServer环境不受支持。

    当这个选项在CloudStack提供的主存储中使用了,那么静止操作是由底层的hypervisor完成的(VMware支持)。当使用了其他主存储提供商的插件,静止操作是由其提供商的软件完成的,

  8. 点击确定。

要删除一个快照或者还原VM的状态到指定的一个快照:

  1. 通过之前描述的步骤定位至VM。

  2. 点击查看VM快照。

  3. 在快照列表中,点击你要操作的快照名字。

  4. 取决于你想做什么:

    要删除快照,点击删除按钮。 delete-button.png

    要还原至此快照,点击还原按钮。 depicts adding an iso image

注解

当VM被销毁了,那么它的快照也会被自动的删除。这种情况下,你不用手动的去删除快照。

更改VM名字,OS或组

在VM被创建之后,你可以修改显示名,操作系统和它所属的组。

通过CloudStack UI访问VM:

  1. 使用用户或管理员登录到CloudStack用户界面。

  2. 在左侧的导航菜单中,点击实例。

  3. 选择你想修改的VM。

  4. 点击停止按钮来关闭虚机。 depicts adding an iso image

  5. 点击编辑。 button to edit the properties of a VM

  6. 更改以下几项为所需要的:

  7. 显示名:如果你想更改VM的名字,那么输入一个新的显示名。

  8. OS类型:选择所需的操作系统。

  9. :输入VM的组名。

  10. 点击应用

给来宾VM的内部名称附加显示名

每个来宾VM都有一个内部名称。主机使用内部名称来识别来宾VMs。CloudStack为来宾VM提供了一个关于显示名的选项。你可以设置显示名作为内部名称以便vCenter可以使用它来识别来宾VM。vm.instancename.flag作为一个新的全局参数,已被添加用来实现此功能。

默认的内部名称的格式是 i-<user_id>-<vm_id>-<instance.name>,这里instance.name是全局参数。但是,如果vm.instancename.flag被设置为true,并且来宾VM在创建的过程中提供了显示名,那么显示名就会被附加至该主机的来宾VM的内部名称上。这样就使得内部名称的格式类似于 i-<user_id>-<vm_id>-<displayName>。vm.instancename.flag的默认值被设置为false。这个功能可以比较容易的在大型数据中心的部署中表示实例名和内部名之间的相互关系。

下面的表格解释了不同场景下VM的名称是如何显示的。

用户提供的显示名

vm.instancename.flag

VM的主机名

vCenter中的名称

内部名称

支持

True

显示名

i-<user_id>-<vm_id>-displayName i-<user_id>-<vm_id>-displayName

不支持

True UUID i-<user_id>-<vm_id>-<instance.name> i-<user_id>-<vm_id>-<instance.name>

支持

False

显示名

i-<user_id>-<vm_id>-<instance.name> i-<user_id>-<vm_id>-<instance.name>

不支持

False UUID i-<user_id>-<vm_id>-<instance.name> i-<user_id>-<vm_id>-<instance.name>

为VM变更服务方案

要给虚拟机提升或降低可用计算资源的级别,你可以更改VM的计算方案。

  1. 使用用户或管理员登录到CloudStack用户界面。

  2. 在左侧的导航菜单中,点击实例。

  3. 选择你要处理的VM。

  4. (如果你启用了动态VM扩展或缩减,请跳过此步;查看:ref:cpu-and-memory-scaling。)

    点击停止按钮来关闭虚机。 depicts adding an iso image

  5. 点击更改服务按钮。 button to change the service of a VM

    显示更改服务对话框。

  6. 选择你想应用到选择的VM的方案。

  7. 点击确定。

运行中VMs的CPU和内存的扩展和缩减

(支持XenServer、KVM和VMware)

通常当你第一次部署VM的时候不太可能精确地预计CPU和RAM需求。你可能必须在VM的生命周期内的任何时间增加这些资源。你可以在不中断运行状态中的VM的情况下,动态的修改CPU和RAM级别来提升这些资源,、。

动态CPU和RAM扩展和缩减能被用于一下情况:

  • 运行VMware和XenServer的主机上的用户VMs。

  • VMware上的系统VMs。

  • 虚拟机上必须安装VMware Tools或者XenServer Tools。

  • 对于新的CPU和RAM大小必须在hypervisor和VM操作系统要求之内。

  • 在CloudStack 4.2安装完以后创建的新VMs都可以使用动态扩展和缩减功能。如果你的CloudStack是从旧版本升级而来的,其上已有的VMs不会支持动态扩展和缩减功能,除非你按照下面的过程来升级这些VM。

升级已有VMs

如果你正在升级旧版本的CloudStack,并且你还想让你的旧版本VMs拥有动态扩展和缩减能力,请使用以下步骤来升级VMs:

  1. 确保区域级别设置enable.dynamic.scale.vm被设置为true。在CloudStack UI的左侧导航条,点击基础架构,然后点击区域,点击你要操作的区域,然后点击Settings标签。

  2. 在每台VM上安装Xen tools(适用于XenServer主机)或者VMware Tools(适用于VMware主机)。

  3. 停止VM。

  4. 点击编辑按钮。

  5. 点击动态伸缩选框。

  6. 点击应用

  7. 重启VM。

配置动态CPU和RAM伸缩

要配置此功能,请使用下面的全局配置变量:

  • enable.dynamic.scale.vm:设置为True以启用此功能。默认情况下,此功能是被关闭的。

  • scale.retry:伸缩操作的重试次数。默认为2。

如果动态伸缩CPU和RAM

要修改虚拟机的CPU和/或RAM,你必须更改VM的计算方案为你想要的。你可以按照上文中所述的同样的步骤 “Changing the Service Offering for a VM”,但是要跳过停止虚拟机的步骤。当然,你可能必须先创建一个新的计算方案。

当你提交一个动态伸缩的请求的时候,当前主机可能会扩展资源。如果主机没有足够的资源,VM会被在线迁移至同一群集中的其他主机。如果群集中没有能满足CPU和RAM条件的主机,那么扩展操作会失败。不用担心,VM会往常一样继续运行。

局限性

  • 你不能为XenServer上运行的系统VMs进行动态伸缩操作。

  • CloudStack不会检查新的CPU和RAM级别是不是符合VM操作系统的要求。

  • 当为VMware上运行的Linux VM扩展内存或者CPU的时候,你可能需要运行额外的脚本。更多信息,请参阅VMware知识库中的 在Linux中热添加内存 (1012764)

  • (VMware)如果当前主机上没有可用资源,因为一个已知的问题,VMware上的虚机扩展会失败,这是因为CloudStack和vCenter计算可用容量方法的不同。更多信息,请参阅`https://issues.apache.org/jira/browse/CLOUDSTACK-1809 <https://issues.apache.org/jira/browse/CLOUDSTACK-1809>`_。

  • 对于运行Linux 64位和Windows 7 32位操作系统的VMs,如果VM初始分配的RAM小于3GB,那么它最大能动态的扩展到3GB。这是因为这些操作系统已知的问题,如果尝试从小于3G动态扩展至超过3G的话,操作系统会宕机。

在重启时重置虚拟机的Root卷

为安全环境和确保VM重启期间不被中断状态,你可以重置root磁盘。更多信息,请参阅 “在重启时给VM重置一个新的Root磁盘”

在主机之间移动VMs(手动在线迁移)

CloudStack管理员可以从一个主机将运行中的VM不中断服务地移动到其他主机或者将其进入维护模式。这个过程叫手动在线迁移,要满足以下条件:

  • root管理员已登录。域管理员和用户不能执行手动在线迁移操作。

  • VM正在运行。停止的VMs不能进行在线迁移。

  • 目标主机必须有足够的可用容量。如果没有,VM会一直停留在”迁移中”状态,直到有多余内存可用。

  • (KVM)VM必须不能使用本地磁盘存储。(在XenServer和VMware中,CloudStack依靠XenMotion和vMotion允许使用了本地磁盘的VM能够在线迁移。)

  • (KVM)目标主机必须跟源主机在同一个群集。(在XenServer和VMware上,CloudStack依靠XenMotion和vMotion,允许VM从一个群集在线迁移到另一个群集)

手动在线迁移一个虚拟机

  1. 使用用户或管理员登录到CloudStack用户界面。

  2. 在左侧的导航菜单中,点击实例。

  3. 选择你想迁移的VM。

  4. 点击迁移实例按钮。 button to migrate an instance

  5. 从可用主机列表中,选择一个目标主机。

    注解

    如果VM的存储与VM必须一起被迁移,这点会在主机列表中标注。CloudStack会为你自动的进行存储迁移。

  6. 点击确定。

删除VMs

用户可以删除他们拥有的虚拟机。在删除运行中的虚拟机之前,虚拟机会被强制停止。管理员可以删除任何虚拟机。

要删除虚拟机:

  1. 使用用户或管理员登录到CloudStack用户界面。

  2. 在左侧的导航菜单中,点击实例。

  3. 选择你想删除的VM。

  4. 点击销毁实例按钮。 button to destroy an instance

使用ISOs

CloudStack支持ISOs和将其挂载到来宾VMs。ISO是一种只读的ISO/CD-ROM格式的文件文件系统。用户可以上传他们自己的ISOs并且将其挂载至他们的来宾VMs。

ISOs文件通过URL上传。HTTP是受支持的协议。一旦ISO通过HTTP指定一个上传URL,比如http://my.web.server/filename.iso上传成功,那么文件就可以用了。

ISOs可能是私有的也可以是共有的,像templates.ISOs并不针对某种hypervisor。也就是说,运行在vSphere上的来宾虚机和运行在KVM上的虚机可以挂载同一个ISO。

ISO镜像可能存储在系统中并且隐私级别与模板相似。ISO镜像分为可引导或不可引导的。可引导的ISO镜像是包含了OS镜像的。CloudStack允许用户通过ISO镜像来启动来宾虚机。用户同样可以将ISO镜像挂载到来宾VMs。比如,给Windows安装PV驱动。ISO镜像不指定hypervisor。

添加ISO

为了添加额外的操作系统或者给来宾VMs使用其它软件,你可以添加ISO。操作系统镜像被认为是最典型的ISO,但是你也能添加软件类型的ISOs,例如你想把安装的桌面应用作为模板的一部分。

  1. 使用管理员或者终端用户账号登录CloudStack UI。

  2. 在左侧的导航栏,点击模板。

  3. 在选择视图中,选择ISOs。

  4. 点击添加ISO。

  5. 在添加ISO界面中,提供下列信息:

    • 名称: ISO 镜像的简称。例如,CentOS6.2 64-bit。

    • 描述: 对于ISO镜像的描述。例如,CentOS 6.2 64-bit.

    • URL: ISO镜像主机的URL。管理服务器必须能够通过HTTP访问这个地址。如果有需要你可以直接将ISO放置到管理服务器中。

    • 区域: 选择你希望该ISO在到哪个区域可用,或者选择所有区域使该ISO在CloudStack中全部区域中可用。

    • 可启动: 来宾是否可以通过该ISO镜像启动。例如,一个CentOS ISO 是可启动的,一个Microsoft Office ISO 是不可启动的。

    • **操作系统类型*: 这有助于CloudStack和Hypervisor执行某些操作并假设可提高来宾虚拟机的性能。选择下列之一。

      • 如果你需要的ISO镜像对应的操作系统在列表中,请选择它。

      • 如果ISO镜像的操作系统类型没有被列出或者ISO是不可引导的,选择Other。

      • (仅针对XenServer) 如果你想使用这个ISO在PV 模式中引导,选择 Other PV (32-bit) 或 Other PV(64-bit)

      • (仅针对KVM) 如果你选择一个操作系统为PV-enabled,, 通过这个ISO创建的虚拟机会有一个SCSI(virtio)根磁盘。如果这个操作系统没有PV-enabled,,虚拟机将有一个IDE根磁盘。PV-enabled 类型是:

        • Fedora 13
        • Fedora 12
        • Fedora 11
        • Fedora 10
        • Fedora 9
        • Other PV
        • Debian GNU/Linux
        • CentOS 5.3
        • CentOS 5.4
        • CentOS 5.5
        • Red Hat Enterprise Linux 5.3
        • Red Hat Enterprise Linux 5.4
        • Red Hat Enterprise Linux 5.5
        • Red Hat Enterprise Linux 6

      注解

      不建议选择一个比操作系统镜像老的版本。例如,选择CentOS 5.4 去支持一个CentOS6.2的镜像通常导致不能工作。在这种情况下,去选择Other。

    • 可提取: 如果该ISO可以被提取出来,则选择Yes。

    • 公共: 如果该ISO可以被所有用户使用,则选择Yes。

    • 精选: 如果你想这个用户在选择这个ISO时更加突出则选择Yes。该ISO将出现在精选ISO列表中。只有管理员可以设置ISO为精选。

  6. 点击确定。

    管理服务器将下载该ISO。根据ISO镜像的大小,下载过程可能会用很长时间。一旦该镜像已经被成功下载到辅助存储时ISO 状态栏将会显示Ready。点击刷新更新更新百分比。

  7. 重要: 等等ISO下载完成过程中。如果你想执行下一个任务并且尝试正常使用该ISO,这将会失败。在CloudStack 使用它之前该ISO必须是完整且有效的。

附加ISO到虚拟机

  1. 在左侧的导航菜单中,点击实例。

  2. 选择要使用的虚拟机。

  3. 点击附加ISO按钮。 depicts adding an iso image

  4. 在附加ISO对话框中,选择所需的ISO。

  5. 点击确定。

改变VM’s 的基础镜像

每个VM都是通过基础镜像创建的,可以是创建并存储在CloudStack中的一个模版或者一个ISO镜像。云管理员和终端用户都可以创建和修改模版,ISO和VM。

在CloudStack中,你可以改变虚拟机的基础磁盘从一个模版换成其他模版,或从一个ISO换成其他ISO。(你不能把ISO变成模版或模版变成ISO。)

例如,假设有一个模板基于一个特定的操作系统,并且操作系统厂商发布了一个补丁。管理员和用户理所当然的想要将该补丁应用到已经存在的虚拟机中,并确保虚拟机开始使用它。无论是否涉及软件更新,也有可能只是将虚拟机从当前的模板切换至其他所需的模板。

要改变熏鸡的基础镜像,通过虚拟机iD和新的模版ID调用restoreVirtualMachine API命令。模版ID参数可以参考模版或者ISO,取决于虚拟机正在使用的基础镜像类型(它必须匹配先前的镜像类型)。当这个调用生效时,虚拟机的根磁盘首先被摧毁,然后通过指定的模版ID参数创建根磁盘。新的根磁盘会附件到虚拟机中,现在虚拟机已经基于新的模版了。

你同样可以在调用restoreVirtualMachine时忽略模版ID参数。在这个情况下,虚拟机的根磁盘被摧毁并重新创建。但相同的模版或ISO已经被该虚拟机使用。

Using SSH Keys for Authentication

In addition to the username and password authentication, CloudStack supports using SSH keys to log in to the cloud infrastructure for additional security. You can use the createSSHKeyPair API to generate the SSH keys.

Because each cloud user has their own SSH key, one cloud user cannot log in to another cloud user’s instances unless they share their SSH key files. Using a single SSH key pair, you can manage multiple instances.

Creating an Instance Template that Supports SSH Keys

Create an instance template that supports SSH Keys.

  1. Create a new instance by using the template provided by cloudstack.

    For more information on creating a new instance, see

  2. Download the cloudstack script from The SSH Key Gen Script to the instance you have created.

    wget http://downloads.sourceforge.net/project/cloudstack/SSH%20Key%20Gen%20Script/cloud-set-guest-sshkey.in?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcloudstack%2Ffiles%2FSSH%2520Key%2520Gen%2520Script%2F&ts=1331225219&use_mirror=iweb
    
  3. Copy the file to /etc/init.d.

    cp cloud-set-guest-sshkey.in /etc/init.d/
    
  4. Give the necessary permissions on the script:

    chmod +x /etc/init.d/cloud-set-guest-sshkey.in
    
  5. Run the script while starting up the operating system:

    chkconfig --add cloud-set-guest-sshkey.in
    
  6. Stop the instance.

Creating the SSH Keypair

You must make a call to the createSSHKeyPair api method. You can either use the CloudStack Python API library or the curl commands to make the call to the cloudstack api.

For example, make a call from the cloudstack server to create a SSH keypair called “keypair-doc” for the admin account in the root domain:

注解

Ensure that you adjust these values to meet your needs. If you are making the API call from a different server, your URL/PORT will be different, and you will need to use the API keys.

  1. Run the following curl command:

    curl --globoff "http://localhost:8096/?command=createSSHKeyPair&name=keypair-doc&account=admin&domainid=5163440e-c44b-42b5-9109-ad75cae8e8a2"
    

    The output is something similar to what is given below:

    <?xml version="1.0" encoding="ISO-8859-1"?><createsshkeypairresponse cloud-stack-version="3.0.0.20120228045507"><keypair><name>keypair-doc</name><fingerprint>f6:77:39:d5:5e:77:02:22:6a:d8:7f:ce:ab:cd:b3:56</fingerprint><privatekey>-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQCSydmnQ67jP6lNoXdX3noZjQdrMAWNQZ7y5SrEu4wDxplvhYci
    dXYBeZVwakDVsU2MLGl/K+wefwefwefwefwefJyKJaogMKn7BperPD6n1wIDAQAB
    AoGAdXaJ7uyZKeRDoy6wA0UmF0kSPbMZCR+UTIHNkS/E0/4U+6lhMokmFSHtu
    mfDZ1kGGDYhMsdytjDBztljawfawfeawefawfawfawQQDCjEsoRdgkduTy
    QpbSGDIa11Jsc+XNDx2fgRinDsxXI/zJYXTKRhSl/LIPHBw/brW8vzxhOlSOrwm7
    VvemkkgpAkEAwSeEw394LYZiEVv395ar9MLRVTVLwpo54jC4tsOxQCBlloocK
    lYaocpk0yBqqOUSBawfIiDCuLXSdvBo1Xz5ICTM19vgvEp/+kMuECQBzm
    nVo8b2Gvyagqt/KEQo8wzH2THghZ1qQ1QRhIeJG2aissEacF6bGB2oZ7Igim5L14
    4KR7OeEToyCLC2k+02UCQQCrniSnWKtDVoVqeK/zbB32JhW3Wullv5p5zUEcd
    KfEEuzcCUIxtJYTahJ1pvlFkQ8anpuxjSEDp8x/18bq3
    -----END RSA PRIVATE KEY-----
    </privatekey></keypair></createsshkeypairresponse>
    
  2. Copy the key data into a file. The file looks like this:

    -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQCSydmnQ67jP6lNoXdX3noZjQdrMAWNQZ7y5SrEu4wDxplvhYci
    dXYBeZVwakDVsU2MLGl/K+wefwefwefwefwefJyKJaogMKn7BperPD6n1wIDAQAB
    AoGAdXaJ7uyZKeRDoy6wA0UmF0kSPbMZCR+UTIHNkS/E0/4U+6lhMokmFSHtu
    mfDZ1kGGDYhMsdytjDBztljawfawfeawefawfawfawQQDCjEsoRdgkduTy
    QpbSGDIa11Jsc+XNDx2fgRinDsxXI/zJYXTKRhSl/LIPHBw/brW8vzxhOlSOrwm7
    VvemkkgpAkEAwSeEw394LYZiEVv395ar9MLRVTVLwpo54jC4tsOxQCBlloocK
    lYaocpk0yBqqOUSBawfIiDCuLXSdvBo1Xz5ICTM19vgvEp/+kMuECQBzm
    nVo8b2Gvyagqt/KEQo8wzH2THghZ1qQ1QRhIeJG2aissEacF6bGB2oZ7Igim5L14
    4KR7OeEToyCLC2k+02UCQQCrniSnWKtDVoVqeK/zbB32JhW3Wullv5p5zUEcd
    KfEEuzcCUIxtJYTahJ1pvlFkQ8anpuxjSEDp8x/18bq3
    -----END RSA PRIVATE KEY-----
    
  3. Save the file.

Creating an Instance

After you save the SSH keypair file, you must create an instance by using the template that you created at Section 5.2.1, “ Creating an Instance Template that Supports SSH Keys”. Ensure that you use the same SSH key name that you created at Section 5.2.2, “Creating the SSH Keypair”.

注解

You cannot create the instance by using the GUI at this time and associate the instance with the newly created SSH keypair.

A sample curl command to create a new instance is:

curl --globoff http://localhost:<port number>/?command=deployVirtualMachine\&zoneId=1\&serviceOfferingId=18727021-7556-4110-9322-d625b52e0813\&templateId=e899c18a-ce13-4bbf-98a9-625c5026e0b5\&securitygroupids=ff03f02f-9e3b-48f8-834d-91b822da40c5\&account=admin\&domainid=1\&keypair=keypair-doc

Substitute the template, service offering and security group IDs (if you are using the security group feature) that are in your cloud environment.

Logging In Using the SSH Keypair

To test your SSH key generation is successful, check whether you can log in to the cloud setup.

For example, from a Linux OS, run:

ssh -i ~/.ssh/keypair-doc <ip address>

The -i parameter tells the ssh client to use a ssh key found at ~/.ssh/keypair-doc.

Resetting SSH Keys

With the API command resetSSHKeyForVirtualMachine, a user can set or reset the SSH keypair assigned to a virtual machine. A lost or compromised SSH keypair can be changed, and the user can access the VM by using the new keypair. Just create or register a new keypair, then call resetSSHKeyForVirtualMachine.