警告
NOTICE: THIS DOCUMENTATION SITE HAS BEEN SUPERSEDED.
For the current documentation site goto: http://docs.cloudstack.apache.org
CloudStack在云中为管理员提供了完整的管理所有来宾VMs整个生命周期的功能。CloudStack为终端用户和管理员提供了许多来宾虚机管理操作。VMs能被关机、开机、重启和销毁。
来宾VMs有名称和组。VM的名称和组对于CloudStack是不透明的,对终端用户整理他们的VMs可用。每个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能够按照预期的工作并提供最好的服务,请按照下面的指导进行操作。
管理员应该监视每个集群中的虚拟机实例的总数,如果总量快达到hypervisor允许的最大虚拟机数量时,不再向此群集分配虚拟机。并且,要注意为主机预留一定的计算能力,以防止群集中有主机发生故障,因为发生故障的主机上的虚拟机需要重新部署在这些预留主机上。请咨询您所选择hypervisor的文档,了解此hypervisor能支持的最大虚拟机数量,并将此数值设置在CloudStack的全局设置里。监控每个群集里虚拟机的活跃程序,并将活跃虚拟机保持在一个安全线内。这样,CloudStack就能允许偶尔的主机故障。举个示例:如果集群里有N个主机,而你只能让其中任一主机的停机时间不超过特定时间。那么,你能在此集群部署的最多虚拟主机数量值为:(N-1) * (每主机最大虚拟量数量限值)。一旦群集中的虚拟机达到此数量,必须在CloudStack的用户界面中禁止向此群集分配新的虚拟机。
确认在每个VM上都安装了下列软件和驱动:
使用下面其中一个方法确认已经安装了Xen tools或VMware Tools:
虚拟机可能处于下列状态:
一旦一个虚拟机被销毁,那么它就不能被恢复。该虚拟机使用的所有资源被系统回收。其中包括虚拟机的IP地址。
停止操作是比较稳妥的关闭操作系统的方式,因为这样做能正常的关闭所有正在运行的应用程序。如果操作系统不能被停止,才要强制关闭它。这么做跟拔掉物理机器的电源线是一个效果。
重启是关机再开机的过程。
CloudStack会保存虚机硬盘的状态直到它被销毁。
正在运行的虚机可能会因为硬件或者网络故障而出现问题。出现问题的虚机是down状态。
如果系统在三分钟内收不到hypervisor的心跳信号,那么它就会将虚机切换至down状态。
用户能够手动从down状态下重启虚机。
如果虚机被标记上启用了HA,那么系统会自动地重启down状态中的虚机。
虚拟机通常是从模板创建的。用户也能创建空白虚拟机。空白虚拟机就是一个重新安装的操作系统。用户可以通过CD/DVD-ROM加载ISO文件安装。
注解
你可以创建一个VM,但不要启动它。你来决定此VM是否需要作为VM部署的一部分而启动。在deployVm API里面提供了一个startVM参数,提供了这个功能。更多信息,请参考开发者指导。
从模板创建一个VM。
用管理员或用户账号登录CloudStack UI。
在左侧导航栏,点击实例
点击添加实例。
选择一个区域。
选择一个模板,然后按照向导中的步骤操作。更多关于如何上传模板的更多信息,请参考`*使用模板* <templates.html>`_。
确认你的硬件设备满足运行所选的服务条件。
点击提交,你的VM就会被创建并启动。
注解
出于安全原因,VM的内部名称仅root管理员可见。
从ISO创建虚拟机:
注解
(XenServer)XXenServer上运行的Windows VMs需要安装PV驱动,它可能在模板中或在创建完VM后添加。PV驱动对于基本的管理功能是必要的,比如挂载额外的卷和ISO镜像、在线迁移和正常关机。
任何用户都可以访问他们自己的虚拟机。管理员能够访问在云中运行的所有虚拟机。
通过CloudStack UI访问VM:
通过网络直接访问VM:
一旦VM实例被创建,你可以根据需要停止、重启或删除它。在CloudStack UI里,点击实例,选择VM,然后使用停止、启动、重启和销毁按钮。
在任何时刻,每个虚拟机实例都运行在一台主机上。CloudStack如何决定在哪个主机上放置VM呢?通常是这几种方式:
依靠定义关联性组并把VMs分配给它们,用户或管理员可以影响(但不是指令)VMs运行在不同的主机上。这个功能是让用户可以规定某些VMs运行在同“host anti-affinity”类型的而非同一台主机上。这写类服务器增强了容错功能。如果一个主机出现问题,那么另一个提供同样服务的VM(比如,运行用户的网站)依然在别的主机上运行。
一个关联性组的作用域是针对每个用户账号的。
要添加一个关联性组:
要将一个新的VM分配给一个关联性组:
要将已有的VM添加到关联性组:
要查看当前哪些VMs被分配到指定的关联性组:
在左侧的导航条,点击关联性组。
点击要查看的组的名称。
点击查看实例。组的成员会列在此处。
在这里,你可以点击列表中任何VM的名称来访问它所有的详细信息并控制它。
要删除关联性组:
在左侧的导航条,点击关联性组。
点击要查看的组的名称。
点击删除。
任何属于关联性组的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快照的行为。要设置这些变量,移步至CloudStack UI中的全局设置。
配置设置名
描述
vmsnapshots.max
云中虚拟机能够保存快照的最大数。 (number of VMs) * vmsnapshots.max是云中VM快照的总共可能数量。如果任何一个VM的快照数达到了最大值,那么快照删除任务会把最老的快照删掉。
vmsnapshot.create.wait
在提示失败和发生错误之前快照工作为了成功的做快照而等待的秒数。
是用CloudStack UI创建一个VM快照:
是用用户或者管理员登录CloudStack。
点击实例。
点击你想做快照的VM名称。
点击抓取VM快照按钮。
注解
如果一个快照处理过程正在进行,那么点击这个按钮是没有反应的。
提供一个名称和秒数。这些会显示在VM快照列表中。
(仅限运行中的VMs)如果你想在快照中包含VM的内存状态,请勾选内存。这可以保存虚拟机的CPU和内存状态。如果你不勾选这个选项,那么只有VM目前磁盘状态会被保存。勾选了这个选项会让快照过程变长。
静止VM:如果你想在做快照之前让VM的文件系统处于静止状态,请勾选此选项。使用CloudStack提供的主存储的XenServer环境不受支持。
当这个选项在CloudStack提供的主存储中使用了,那么静止操作是由底层的hypervisor完成的(VMware支持)。当使用了其他主存储提供商的插件,静止操作是由其提供商的软件完成的,
点击确定。
要删除一个快照或者还原VM的状态到指定的一个快照:
通过之前描述的步骤定位至VM。
点击查看VM快照。
在快照列表中,点击你要操作的快照名字。
取决于你想做什么:
要删除快照,点击删除按钮。
要还原至此快照,点击还原按钮。
注解
当VM被销毁了,那么它的快照也会被自动的删除。这种情况下,你不用手动的去删除快照。
在VM被创建之后,你可以修改显示名,操作系统和它所属的组。
通过CloudStack UI访问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的计算方案。
使用用户或管理员登录到CloudStack用户界面。
在左侧的导航菜单中,点击实例。
选择你要处理的VM。
(如果你启用了动态VM扩展或缩减,请跳过此步;查看:ref:cpu-and-memory-scaling。)
点击停止按钮来关闭虚机。
点击更改服务按钮。
显示更改服务对话框。
选择你想应用到选择的VM的方案。
点击确定。
(支持XenServer、KVM和VMware)
通常当你第一次部署VM的时候不太可能精确地预计CPU和RAM需求。你可能必须在VM的生命周期内的任何时间增加这些资源。你可以在不中断运行状态中的VM的情况下,动态的修改CPU和RAM级别来提升这些资源,、。
动态CPU和RAM扩展和缩减能被用于一下情况:
如果你正在升级旧版本的CloudStack,并且你还想让你的旧版本VMs拥有动态扩展和缩减能力,请使用以下步骤来升级VMs:
要配置此功能,请使用下面的全局配置变量:
要修改虚拟机的CPU和/或RAM,你必须更改VM的计算方案为你想要的。你可以按照上文中所述的同样的步骤 “Changing the Service Offering for a VM”,但是要跳过停止虚拟机的步骤。当然,你可能必须先创建一个新的计算方案。
当你提交一个动态伸缩的请求的时候,当前主机可能会扩展资源。如果主机没有足够的资源,VM会被在线迁移至同一群集中的其他主机。如果群集中没有能满足CPU和RAM条件的主机,那么扩展操作会失败。不用担心,VM会往常一样继续运行。
为安全环境和确保VM重启期间不被中断状态,你可以重置root磁盘。更多信息,请参阅 “在重启时给VM重置一个新的Root磁盘”。
CloudStack管理员可以从一个主机将运行中的VM不中断服务地移动到其他主机或者将其进入维护模式。这个过程叫手动在线迁移,要满足以下条件:
手动在线迁移一个虚拟机
使用用户或管理员登录到CloudStack用户界面。
在左侧的导航菜单中,点击实例。
选择你想迁移的VM。
点击迁移实例按钮。
从可用主机列表中,选择一个目标主机。
注解
如果VM的存储与VM必须一起被迁移,这点会在主机列表中标注。CloudStack会为你自动的进行存储迁移。
点击确定。
用户可以删除他们拥有的虚拟机。在删除运行中的虚拟机之前,虚拟机会被强制停止。管理员可以删除任何虚拟机。
要删除虚拟机:
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。
为了添加额外的操作系统或者给来宾VMs使用其它软件,你可以添加ISO。操作系统镜像被认为是最典型的ISO,但是你也能添加软件类型的ISOs,例如你想把安装的桌面应用作为模板的一部分。
使用管理员或者终端用户账号登录CloudStack UI。
在左侧的导航栏,点击模板。
在选择视图中,选择ISOs。
点击添加ISO。
在添加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执行某些操作并假设可提高来宾虚拟机的性能。选择下列之一。
注解
不建议选择一个比操作系统镜像老的版本。例如,选择CentOS 5.4 去支持一个CentOS6.2的镜像通常导致不能工作。在这种情况下,去选择Other。
可提取: 如果该ISO可以被提取出来,则选择Yes。
公共: 如果该ISO可以被所有用户使用,则选择Yes。
精选: 如果你想这个用户在选择这个ISO时更加突出则选择Yes。该ISO将出现在精选ISO列表中。只有管理员可以设置ISO为精选。
点击确定。
管理服务器将下载该ISO。根据ISO镜像的大小,下载过程可能会用很长时间。一旦该镜像已经被成功下载到辅助存储时ISO 状态栏将会显示Ready。点击刷新更新更新百分比。
重要: 等等ISO下载完成过程中。如果你想执行下一个任务并且尝试正常使用该ISO,这将会失败。在CloudStack 使用它之前该ISO必须是完整且有效的。
每个VM都是通过基础镜像创建的,可以是创建并存储在CloudStack中的一个模版或者一个ISO镜像。云管理员和终端用户都可以创建和修改模版,ISO和VM。
在CloudStack中,你可以改变虚拟机的基础磁盘从一个模版换成其他模版,或从一个ISO换成其他ISO。(你不能把ISO变成模版或模版变成ISO。)
例如,假设有一个模板基于一个特定的操作系统,并且操作系统厂商发布了一个补丁。管理员和用户理所当然的想要将该补丁应用到已经存在的虚拟机中,并确保虚拟机开始使用它。无论是否涉及软件更新,也有可能只是将虚拟机从当前的模板切换至其他所需的模板。
要改变熏鸡的基础镜像,通过虚拟机iD和新的模版ID调用restoreVirtualMachine API命令。模版ID参数可以参考模版或者ISO,取决于虚拟机正在使用的基础镜像类型(它必须匹配先前的镜像类型)。当这个调用生效时,虚拟机的根磁盘首先被摧毁,然后通过指定的模版ID参数创建根磁盘。新的根磁盘会附件到虚拟机中,现在虚拟机已经基于新的模版了。
你同样可以在调用restoreVirtualMachine时忽略模版ID参数。在这个情况下,虚拟机的根磁盘被摧毁并重新创建。但相同的模版或ISO已经被该虚拟机使用。
除了用户名和密码验证之外,出于额外的安全性考虑,CloudStack还支持使用SSH秘钥来登录到云架构。你可以使用createSSHKeyPair API来生成SSH秘钥。
因为每个云用户都有他们自己的SSH秘钥,一个云用户不能登录到另一个云用户的实例中,除非他们共享了他们的SSH key文件。使用一个SSH秘钥对,你可以管理多个实例。
创建一个支持SSH秘钥的实例模板。
使用CloudStack提供的模板创建一个新的实例。
关于创建新实例的更多信息,请参阅
从 The SSH Key Gen Script 下载CloudStack脚本到你已经创建的实例中。
wget https://raw.githubusercontent.com/apache/cloudstack/master/setup/bindir/cloud-set-guest-sshkey.in
复制这个脚本到 /etc/init.d。
cp cloud-set-guest-sshkey.in /etc/init.d/
给这个脚本必要的权限:
chmod +x /etc/init.d/cloud-set-guest-sshkey.in
当系统启动的时候运行脚本:
chkconfig --add cloud-set-guest-sshkey.in
停止实例。
你必须给createSSHKeyPair api方法做一个调用。你可以使用CloudStack Python API 库或curl 命令给CloudStack API做调用。
比如,从CloudStack服务器为根域中的管理员帐户做调用来创建一个SSH秘钥对 ,名称为 “keypair-doc” :
注解
确认你调整这些值是你所需要的。如果你从不同的服务器上做API调用,你的 URL/PORT 也是不同的,并且你必须使用API 秘钥。
运行如下curl命令:
curl --globoff "http://localhost:8096/?command=createSSHKeyPair&name=keypair-doc&account=admin&domainid=5163440e-c44b-42b5-9109-ad75cae8e8a2"
输出的内容与下面所示的类似:
<?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>
复制秘钥的数据到一个文件。这个文件类似于:
-----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-----
保存文件。
在你保存了SSH秘钥对文件之后,你必须使用你在`章节 5.2.1, “ 创建支持SSH秘钥的实例模板” <#create-ssh-template>`__中创建的模来板创建一个实例。确保你使用与你在`章节 5.2.2, “创建秘钥对” <#create-ssh-keypair>`__中创建的同样的SSH秘钥名称。
注解
这时候你不能通过使用 GUI来创建实例,要使用新创建的SSH秘钥对来关联实例。
使用简单的curl命令创建新的实例:
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
在你的云环境中,服务方案和安全组IDs(如果你使用安全组功能)可以替代模板。
测试你的SSH秘钥的生成是否成功,需要检查是否能够登录到云中。
举个例子,在LinuxOS中,运行:
ssh -i ~/.ssh/keypair-doc <ip address>
参数-i是通知ssh客户端使用一个在~/.ssh/keypair-doc中找到的ssh秘钥。
通过API命令resetSSHKeyForVirtualMachine,用户可以设置或者重设分配给虚拟机的SSH秘钥对。可以更改丢失或被盗用的SSH密钥对,并且用户可以使用新的秘钥对来访问VM。只要创建或注册新的密钥对然后调用resetSSHKeyForVirtualMachine。
CloudStack provides API access to attach up to 2KB of data after base64 encoding to a deployed VM. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding. Deployed VMs also have access to instance metadata via the virtual router.
Create virtual machine thru the API: deployVirtualMachine
using the parameter userdata=
to include user-data formated in
base64.
Accessed user-data from VM. Once the IP address of the virtual router is known, use the following steps to retrieve user-data:
Run the following command to find the virtual router.
# cat /var/lib/dhclient/dhclient-eth0.leases | grep dhcp-server-identifier | tail -1
Access user-data by running the following command using the result of the above command
# curl http://10.1.1.1/latest/user-data
Meta Data can be accessed similarly, using a URL of the form
http://10.1.1.1/latest/meta-data/{metadata type}
. (For backwards
compatibility, the previous URL http://10.1.1.1/latest/{metadata type}
is also supported.) For metadata type, use one of the following:
service-offering
. A description of the VMs service offeringavailability-zone
. The Zone namelocal-ipv4
. The guest IP of the VMlocal-hostname
. The hostname of the VMpublic-ipv4
. The first public IP for the router. (E.g. the first IP
of eth2)public-hostname
. This is the same as public-ipv4instance-id
. The instance name of the VMCloud-Init can be use to access
an interpret user-data from virtual machines. Cloud-Init be installed into
templates and also require CloudStack password and sshkey scripts (Adding Password Management to Your Templates and using ssh keys). User password management and
resetSSHKeyForVirtualMachine
API are not yet supported by cloud-init.
Install cloud-init package into a template:
# yum install cloud-init
or
$ sudo apt-get install cloud-init
Create datasource configuration file: /etc/cloud/cloud.cfg.d/99_cloudstack.cfg
datasource:
CloudStack: {}
None: {}
datasource_list:
- CloudStack
This example use cloud-init to Upgrade Operating-System of the newly created VM:
#cloud-config
# Upgrade the instance on first boot
# (ie run apt-get upgrade)
#
# Default: false
# Aliases: apt_upgrade
package_upgrade: true
base64 formated:
I2Nsb3VkLWNvbmZpZw0KDQojIFVwZ3JhZGUgdGhlIGluc3RhbmNlIG9uIGZpcnN0IGJvb3QNCiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpDQojDQojIERlZmF1bHQ6IGZhbHNlDQojIEFsaWFzZXM6IGFwdF91cGdyYWRlDQpwYWNrYWdlX3VwZ3JhZGU6IHRydWUNCg==
Refer to Cloud-Init CloudStack datasource documentation for latest capabilities. Cloud-Init and Cloud-Init CloudStack datasource are not supported by Apache CloudStack community.
CloudStack can deploy guest VMs with Graphics Processing Unit (GPU) or Virtual Graphics Processing Unit (vGPU) capabilities on XenServer hosts. At the time of VM deployment or at a later stage, you can assign a physical GPU ( known as GPU-passthrough) or a portion of a physical GPU card (vGPU) to a guest VM by changing the Service Offering. With this capability, the VMs running on CloudStack meet the intensive graphical processing requirement by means of the high computation power of GPU/vGPU, and CloudStack users can run multimedia rich applications, such as Auto-CAD, that they otherwise enjoy at their desk on a virtualized environment. CloudStack leverages the XenServer support for NVIDIA GRID Kepler 1 and 2 series to run GPU/vGPU enabled VMs. NVIDIA GRID cards allows sharing a single GPU cards among multiple VMs by creating vGPUs for each VM. With vGPU technology, the graphics commands from each VM are passed directly to the underlying dedicated GPU, without the intervention of the hypervisor. This allows the GPU hardware to be time-sliced and shared across multiple VMs. XenServer hosts use the GPU cards in following ways:
GPU passthrough: GPU passthrough represents a physical GPU which can be directly assigned to a VM. GPU passthrough can be used on a hypervisor alongside GRID vGPU, with some restrictions: A GRID physical GPU can either host GRID vGPUs or be used as passthrough, but not both at the same time.
GRID vGPU: GRID vGPU enables multiple VMs to share a single physical GPU. The VMs run an NVIDIA driver stack and get direct access to the GPU. GRID physical GPUs are capable of supporting multiple virtual GPU devices (vGPUs) that can be assigned directly to guest VMs. Guest VMs use GRID virtual GPUs in the same manner as a physical GPU that has been passed through by the hypervisor: an NVIDIA driver loaded in the guest VM provides direct access to the GPU for performance-critical fast paths, and a paravirtualized interface to the GRID Virtual GPU Manager, which is used for nonperformant management operations. NVIDIA GRID Virtual GPU Manager for XenServer runs in dom0. CloudStack provides you with the following capabilities:
Before proceeding, ensure that you have these prerequisites:
Before continuing with configuration, consider the following:
Device | Type |
---|---|
GPU |
|
vGPU |
|
CloudStack follows the below sequence of operations to provide GPU/vGPU support for VMs:
Ensure that XenServer host is ready with GPU installed and configured. For more information, see Citrix 3D Graphics Pack.
Add the host to CloudStack. CloudStack checks if the host is GPU-enabled or not. CloudStack queries the host and detect if it’s GPU enabled.
Create a compute offering with GPU/vGPU support: For more information, see Creating a New Compute Offering..
Continue with any of the following operations:
Deploy a VM.
Deploy a VM with GPU/vGPU support by selecting appropriate Service Offering. CloudStack decide which host to choose for VM deployment based on following criteria:
Migrate a VM.
CloudStack searches for hosts available for VM migration, which satisfies GPU requirement. If the host is available, stop the VM in the current host and perform the VM migration task. If the VM migration is successful, the remaining GPU capacity is updated for both the hosts accordingly.
Destroy a VM.
GPU resources are released automatically when you stop a VM. Once the destroy VM is successful, CloudStack will make a resource call to the host to get the remaining GPU capacity in the card and update the database accordingly.