使用模板¶
模板相当于虚拟机的重用配置。当用户创建虚拟机时能从CloudStack的模板列表中选择一个。
特殊情况下,模板可以是一个包含一个或多个操作系统的虚拟磁盘镜像,你可以选择性的安装另外的软件,比如office应用并设置访问控制来决定谁能使用这个模板。每个模板对应一个特殊类型的虚拟机,此类虚拟机在将模板添加入CloudStack时指定。
CloudStack附带一个默认模板。为了向用户呈现出更多选择,CloudStack的管理员和用户能创建模板并添加到CloudStack中。
创建模板概览¶
CloudStack默认已经有了一个带CentOS系统的默认模板。有许多添加更多模板的方法,管理员和普通用户均能添加。一般是这样的顺序:
运行一个带有你需要的操作系统的虚拟机实例,并进行一些你期望的设置。
停止VM。
将卷转换为模板。
还有其他方法向CloudStack中添加模板。比如你可以对虚机磁盘卷做个快照然后通过这个快照创建模板,或者从另一个系统导入一个VHD到CloudStack。
接下来的几节中将继续讲述各种创建模板的技术。
模板的需求¶
对于 XenServer, 在每一个你创建的模板上安装 PV 驱动 / Xen tools。 这将使动态迁移和干净的宾客关机成为可能。
对于 vSphere, 在每一个你创建的模板上安装VMware 工具。这将使控制台视图能够正常工作。
模板最佳实践¶
如果你计划使用大的模板(100 GB 或更大),确保你有10g 的网络以支持大的模板。 当大的模板被使用时,较慢的网络可能导致超时及其它错误。
默认模版¶
CloudStack包含一个CentOS 模版。当主存储和二级存储配置完成后,这个模版会由二级存储虚拟机下载。可以在生产部署中使用这个模版,也可以删除掉它,使用自定义的模版。
默认模版的root用户密码是“password”。
为XenServer,KVM和vSphere各提供了一个默认模板。下载的模板取决于你的云中使用的hypervisor类型。每个模板大概占用2.5GB的存储空间。
默认模版包括标准的iptables 规则,会阻止除了ssh以外的其他访问。
# iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-
私有模板和公共模板¶
用户创建模板时可选择模板为公有还是私有。
私有模板只对创建者可用。默认上传的模板都是私有的。
当用户将模板标识为“公有”,该模板不但能让该用户域中所有账户中的所有用户使用,还可以让能访问存储该模板的区域的其他域中用户使用。这取决于zone是设置成公用还是私有。私有区域被分配到一个单一的域,而公共区域能被任何域访问。
通过已存在的虚拟机创建模板¶
当你已经有了一台按你的想法已经配置好的虚拟机,你就能以他为原型创建别的虚拟机。
使用 `“创建VMs” <virtual_machines.html#creating-vms>`_给出的方法创建并且开启一个虚拟机。
在虚拟机中做好需要的配置,然后点击按钮关闭该虚拟机。
等待虚拟机关闭。当虚拟机状态显示为“已停止”,执行下一步。
点击创建模板并填写如下内容:
名称和显示文本。这些会在UI中显示,所以建议写一些描述信息。
**操作系统类型*:。这有助于CloudStack和Hypervisor执行某些操作并可能提高来宾虚拟机的性能。选择下列之一。
如果已停止虚拟机的系统在列表中,选择它。
如果已停止虚拟机系统类型不在列表中就选择其他。
如果你打算以PV模式启动该模板,请选择其他PV(32位)或其他PV(64位)。这个选项只对XenServer有效:
注解
通常你不能选择比镜像版本老的OS版本。比如,选择CentOS 5.4来支持CentOS 6.2镜像通常来说是不工作的。在这种情况下,你应该选择其他。
公共。选择是来让CloudStack里面的所有用户都能访问这个模板。模板将会出现在社区模板列表中。请参阅 “私有和公共模板”。
启用密码。如果你的模板中安装了CLoudStack密码修改脚本,选择是。请参阅 给你的模板添加密码管理。
点击 添加
当模版创建过程完成后,新模版会出现在模版页面。在创建虚机时就可以使用新模版了。
从一个快照创建一个模板¶
如果你不想为了使用创建模板菜单项而停止虚拟机(如在`“从已有的虚机创建模板” <#creating-a-template-from-an-existing-virtual-machine>`_中描述的), 你可以通过CloudStack UI从任何快照直接创建模板。
上传模板¶
vSphere模板和ISOs¶
如果你通过vSphere Client上传模板,请确认OVA文件不包含ISO。如果是的话,从模板部署虚拟机将失败。
模板是使用HTTP协议通过URL来上传的。模板通常都很大。你可以使用gzip压缩它们以缩短上传时间。
要上传模板:
在左边的导航栏,点击模板。
点击注册模板。
填写以下内容:
名称和显示文本。这些会在UI中显示,所以建议写一些描述信息。
URL。管理服务器会从指定的URL下载模板,就像 http://my.web.server/filename.vhd.gz。
区域::选择你希望该模板在到哪个区域可用,或者选择所有区域使该模板在CloudStack中全部区域中可用。
**操作系统类型*::这有助于CloudStack和Hypervisor执行某些操作并假设可提高来宾虚拟机的性能。选择下列之一。
如果已停止虚拟机的系统在列表中,选择它。
如果已停止虚拟机系统类型不在列表中就选择其他。
注解
你不能选择比镜像版本老的OS版本。比如,选择CentOS 5.4来支持CentOS 6.2镜像通常来说是不工作的。在这种情况下,你应该选择其他。
Hypervisor:列表中显示支持的hypervisors。选择想要的一个。
格式。上传的模板文件的格式,如VHD或OVA。
启用密码。如果你的模板中安装了CLoudStack密码修改脚本,选择是。请参阅 给你的模板添加密码管理。
可提取。如果模板可以被提取请选择是。如果选择了此选项,终端用户可以下载此模板的完全镜。
公共。选择是来让CloudStack里面的所有用户都能访问这个模板。模板将会出现在社区模板列表中。请参阅 “私有和公共模板”。
精选: 。如果你想这个用户在选择这个模板时更明显则选择Yes。该模板将出现在精选模板列表中。只有管理员可以设置模板为精选。
导出模板¶
最终用户和管理员可以从CloudStack导出模板。导航到用户界面中的模板并选择动作菜单中的下载功能。
创建Linux模板¶
为了准备使用模板部署你的Linux VMs,可以使用此文档来准备Linux模板。对于文档中的情况,你要通过配置模板,这会涉及”主模板”。这个指导目前覆盖了传统的安装,但不会涉及用户数据和cloud-init还有假设在装过程中安装了openshh服务。
过程概述如下:
上传你的Linux ISO。
更多信息,请参阅 “添加ISO”。
使用这个ISO创建VM实例。
更多信息,请参阅 “创建VMs”。
准备Linux VM
从VM创建模板。
更多信息,请参阅 “从已有的虚拟机创建模板”。
Linux的系统准备工作¶
下列步骤将会为模板准备一个基本的Linux安装。
安装
通常在安装过程中给VM命名是一个好的做法,这么做能确保某些组件如LVM不会只在一台机器中出现。推荐在在安装过程中使用”localhost”命名。
警告
对于CentOS,必须要修改网络接口的配置文件,在这里我们编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,更改下面的内容。
DEVICE=eth0 TYPE=Ethernet BOOTPROTO=dhcp ONBOOT=yes
下一步更新主模板中的包。
Ubuntu
sudo -i apt-get update apt-get upgrade -y apt-get install -y acpid ntp reboot
CentOS
ifup eth0 yum update -y reboot
密码管理
注解
如果需要,客户(如在Ubuntu的安装过程中创建的用户)应该被移除。首先确认root用户账户是启用的并且使用了密码,然后使用root登录。
sudo passwd root logout
使用root,移除任何在安装过程中创建的自定义用户账户。
deluser myuser --remove-home
关于设置密码管理脚本的相关说明,请参阅 给你的模板添加密码管理 ,这样能允许CloudStack通过web界面更改root密码。
主机名管理
默认情况下CentOS在启动的时候配置主机名。但是,Ubuntu却没有此功能,对于Ubuntu,安装时使用下面步骤。
Ubuntu
一个模板化的VM使用`/etc/dhcp/dhclient-exit-hooks.d`中的一个自定义脚本来设置主机名,这个脚本首先检查当前的主机名是是否是hostname,如果是,它将从DHCP租约文件获取host-name,domain-name和fix-ip,并且使用这些值来设置主机名并将其追加到 /etc/hosts 文件以用来本地主机名解析。一旦这个脚本或者一个用户从本地改变了主机名,那么它将不再根据新的主机名调整系统文件。此脚本同样也会重建openssh-server keys,这个keys在做模板(如下所示)之前被删除了。保存下面的脚本到`/etc/dhcp/dhclient-exit-hooks.d/sethostname`,并且调整权限。
#!/bin/sh # dhclient change hostname script for Ubuntu oldhostname=$(hostname -s) if [ $oldhostname = 'localhost' ] then sleep 10 # Wait for configuration to be written to disk hostname=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /host-name/ { host = $3 } END { printf host } ' | sed 's/[";]//g' ) fqdn="$hostname.$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /domain-name/ { domain = $3 } END { printf domain } ' | sed 's/[";]//g')" ip=$(cat /var/lib/dhcp/dhclient.eth0.leases | awk ' /fixed-address/ { lease = $2 } END { printf lease } ' | sed 's/[";]//g') echo "cloudstack-hostname: Hostname _localhost_ detected. Changing hostname and adding hosts." echo " Hostname: $hostname \n FQDN: $fqdn \n IP: $ip" # Update /etc/hosts awk -v i="$ip" -v f="$fqdn" -v h="$hostname" "/^127/{x=1} !/^127/ && x { x=0; print i,f,h; } { print $0; }" /etc/ hosts > /etc/hosts.dhcp.tmp mv /etc/hosts /etc/hosts.dhcp.bak mv /etc/hosts.dhcp.tmp /etc/hosts # Rename Host echo $hostname > /etc/hostname hostname $hostname # Recreate SSH2 export DEBIAN_FRONTEND=noninteractive dpkg-reconfigure openssh-server fi ### End of Script ### chmod 774 /etc/dhcp/dhclient-exit-hooks.d/sethostname
警告
当你准备好做你的主模板的时候请运行下列步骤。如果主模板在这些步骤期间重启了,那么你要重新运行所有的步骤。在这个过程的最后,主模板应该关机并且将其创建为模板,然后再部署。
移除udev持久设备规则
这一步会移除你的主模板的特殊信息,如网络MAC地址,租约信息和CD块设备,这个文件会在下次启动时自动生成。
Ubuntu
rm -f /etc/udev/rules.d/70* rm -f /var/lib/dhcp/dhclient.*
CentOS
rm -f /etc/udev/rules.d/70* rm -f /var/lib/dhclient/*
移除SSH Keys
这步是为了确认所有要作为模板的VMs的SSH Keys都不相同,否则这样会降低虚拟机的安全性。
rm -f /etc/ssh/*key*
清除日志文件
从主模板移除旧的日志文件是一个好习惯。
cat /dev/null > /var/log/audit/audit.log 2>/dev/null cat /dev/null > /var/log/wtmp 2>/dev/null logrotate -f /etc/logrotate.conf 2>/dev/null rm -f /var/log/*-* /var/log/*.gz 2>/dev/null
设置主机名
为了Ubuntu DHCP的脚本功能和CentOS dhclient能设置VM主机名,他们都去要设置主模板的主机名设置为“localhost”,运行下面的命令来更改主机名。
hostname localhost echo "localhost" > /etc/hostname
设置用户密码期限
这步是要在模板部署之后强制用户更改VM的密码。
passwd --expire root
清除用户历史
下一步来清除你曾经运行过的bash命令。
history -c unset HISTFILE
关闭VM
现在你可以关闭你的主模板并且创建模板了!
halt -p
创建模板!
现在你可以创建模板了,更多信息请参阅 “从已存在的虚拟机创建模板”。
注解
通过Ubuntu和CentOS的模板分发的虚机可能需要重启才让主机名生效。
创建Windows模板¶
Windows模板在分发多个虚拟机的之前必须使用Sysprep初始化。Sysprep允许你创建一个通用的Windows模板和避免任何可能的SID冲突。
注解
(XenServer)XXenServer上运行的Windows VMs需要安装PV驱动,它可能在模板中或在创建完VM后添加。PV驱动对于基本的管理功能是必要的,比如挂载额外的卷和ISO镜像、在线迁移和正常关机。
过程概述如下:
上传你的Windows ISO。
更多信息,请参阅 “添加ISO”。
使用这个ISO创建VM实例。
更多信息,请参阅 “创建VMs”。
按照你所使用的WIndows Server版本进行Windows Server 2008 R2(下面的)或者Windows Server 2003 R2中Sysprep的操作步骤。
准本工作完成了。现在你可以按照创建Windows模板中描述的来创建模板。
为Windows Server 2008 R2进行系统准备¶
对于Windows 2008 R2,你运行Windows系统镜像管理来创建一个自定义的sysprep应答XML文件。Windows系统镜像管理作为Windows Automated Installation Kit (AIK)的一部分安装在系统中。Windows AIK可以从 `微软下载中心 <http://www.microsoft.com/en-us/download/details.aspx?id=9085>`_下载到。
按照以下步骤运行Windows 2008 R2的sysprep:
注解
这些步骤的概述来源于Charity Shelbourne一个非常棒的指导,发布在 Windows Server 2008 Sysprep Mini-Setup.。
下载和安装Windows AIK
注解
刚刚创建的Windows 2008 R2上面并没有安装Windows AIK。Windows AIK不是你创建的模板中的一部分。它仅仅用于创建sysprep应答文件。
在\Windows 2008 R2安装DVD中的源目录复制install.wim文件到本地硬盘。这是一个非常大的文件可能会复制较长时间。Windows AIK要求WIM文件是可写的。
打开Windows系统镜像管理器。
在Windows镜像面板,右击选择一个Windows镜像或编录文件选项来读取你刚刚复制的install.wim文件。
选择Windows 2008 R2版本。
你可能会收到一个警告提示说不能打开编录文件。点击是来创建一个新的编录文件。
在应答文件面板,右击来创建一个新的应答文件。
使用以下步骤从Windows系统镜像管理器生成应答文件:
第一个页面你必须让语言和国家或位置选择页面是自动的。要使这个自动化,请在你的Windows 镜像面板扩展组件,右击Microsoft-Windows-International-Core添加设置以传送 7 oobeSystem。在你的应答文件面板中,为语言和国家或位置用适当的设置配置InputLocale、SystemLocale、UILanguage、和UserLocale。你可能对这些设置有疑问,你可以指定一个设置右击选择帮助。这将打开对应的CHM帮助文件,这里面包括了与你尝试配置的设置相关的一些示例。
你需要将软件授权选择页配置为自动进行,这不是众所周知的EULA。为此,展开Microsoft-Windows-Shell-Setup组件,选中OOBE 设置,将此设置加入到Pass 7 oobeSystem中去。在设置中,将HideEULAPage 设置为true。
确保恰当的设置了序列号。如果使用MAK的话,可以在Windows2008R2的虚拟机上输入MAK。并不需要将MAK输入到Windows映像管理器中。如果你使用KMS主机进行激活,则不需要输入产品序列号。Windows卷激活的详细信息可以在http://technet.microsoft.com/en-us/library/bb892849.aspx 上查看。
类似机械化的操作还有更改管理员密码页。展开Microsoft-Windows-Shell-Setup组件(如果没有展开的话),展开用户账户,右键点击管理员密码,添加设置到Pass 7 oobeSystem配置,在设置中,指定一个密码。
可能会需要阅读AIK文档并设置多个选项来适合你的部署。以上的步骤至少需要使windows脱离建立网络的过程。
将答案文件保存为unattend.xml,可以忽略验证窗口中的警告信息。
将unattend.xml文件拷贝到Windows 2008 R2 虚拟机的c:\windows\system32\sysprep 文件夹下,
一旦将unattend.xml文件放到 c:\windows\system32\sysprep文件夹下,则按以下步骤运行sysprep工具:
cd c:\Windows\System32\sysprep sysprep.exe /oobe /generalize /shutdown
Windows 2008 R2虚拟机在sysprep完成后,会自动关闭。
针对Windows Server 2003R2的系统准备¶
早期的windows版本有个不同的sysprep的工具,按照这些步骤准备Windows Server 2003 R2。
从Windows 安装CD中提取\support\tools\deploy.cab到WIndows 2003 R2 虚拟机中的此目录 c:\sysprep。
运行 c:\sysprep\setupmgr.exe 来创建syprep.inf文件。
选择创建新的来创建一个新的应答文件。
安装的类型选择 “Sysprep 安装”
选择合适的OS版本
在许可协议界面,选择”是,完全自动安装”
提供你的名称和组织。
保留显示设置为默认。
设置合适的时区。
提供你的产品key。
给你的部署选择一个合适的许可模式。
选择”自动生成计算机名”。
输入一个默认的管理员密码。如果你启用了密码重置功能,用户实际上将不会使用这个密码。在来宾虚机启动之后实例管理器会重置密码。
网络组件使用”典型设置”。
选择“WORKGROUP”选项。
电话服务使用默认。
选择合适的区域设置。
选择合适的语言选项。
不要安装打印机。
不要指定”运行一次”。
你不必指定标示字符串。
将应答文件保存到c:\sysprep\sysprep.inf。
运行以下命令行来sysprep镜像:
c:\sysprep\sysprep.exe -reseal -mini -activated
在这个步骤之后,虚拟机会自动关机。
导入Amazon Machine Images¶
以下过程描述了当使用XenServer hypervisor时,如何导入一个AMI到Cloudstack中。
假定你有一个叫做CentOS_6.2|_x64的AMI文件。假定未来你将工作在CentOS主机上。如果AMI是一个Fedora镜像,你需要将它立即安装到Fedora主机上。
一旦镜像文件在CentOS/Fedora主机上自定义完毕,你必须有一台使用文件存储库(本地ext3 SR或者NFS SP)的XenServer主机将其转换VHD。
注解
当你在拷贝和粘贴这个命令时,请确保所有的命令都在同一行里。有的文档拷贝工具会将这个命令分割为多行。
导入一个AMI:
建立在镜像文件上的回滚
# mkdir -p /mnt/loop/centos62 # mount -o loop CentOS_6.2_x64 /mnt/loop/centos54
安装kernel-xen包到镜像文件中。下载PV内核和ramdisk到镜像中。
# yum -c /mnt/loop/centos54/etc/yum.conf --installroot=/mnt/loop/centos62/ -y install kernel-xen
在 /boot/grub/grub.conf中创建一个引导。
# mkdir -p /mnt/loop/centos62/boot/grub # touch /mnt/loop/centos62/boot/grub/grub.conf # echo "" > /mnt/loop/centos62/boot/grub/grub.conf
终止已经安装到镜像文件中的PV内核名称
# cd /mnt/loop/centos62 # ls lib/modules/ 2.6.16.33-xenU 2.6.16-xenU 2.6.18-164.15.1.el5xen 2.6.18-164.6.1.el5.centos.plus 2.6.18-xenU-ec2-v1.0 2.6.21.7-2.fc8xen 2.6.31-302-ec2 # ls boot/initrd* boot/initrd-2.6.18-164.6.1.el5.centos.plus.img boot/initrd-2.6.18-164.15.1.el5xen.img # ls boot/vmlinuz* boot/vmlinuz-2.6.18-164.15.1.el5xen boot/vmlinuz-2.6.18-164.6.1.el5.centos.plus boot/vmlinuz-2.6.18-xenU-ec2-v1.0 boot/vmlinuz-2.6.21-2952.fc8xen
Xen的kernels/ramdisk通常以“xen”结尾。在lib/modules中选择相应的内核版本,intrd和vmlinuz将作出相应的反应.综上,唯一要求的条件是版本为2.6.18-164.15.1.el5xen。
根据你要找的内容,在grub.conf文件中创建一个入口。以下为入口例子。
default=0 timeout=5 hiddenmenu title CentOS (2.6.18-164.15.1.el5xen) root (hd0,0) kernel /boot/vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/xvda initrd /boot/initrd-2.6.18-164.15.1.el5xen.img
编辑 etc/fstab,将”sda1“改为”xvda”并将“sdb”改为”xbdb”.
# cat etc/fstab /dev/xvda / ext3 defaults 1 1 /dev/xvdb /mnt ext3 defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0
通过终端开启登陆。在默认终端设备XenServer系统上的是xvc0.确定在etc/inittab和etc/securetty中有以下各自的行:
# grep xvc0 etc/inittab co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav # grep xvc0 etc/securetty xvc0
确保虚拟盘支持PV磁盘和PV网络。为你之前选择好的kernel版本自定义这些。
# chroot /mnt/loop/centos54 # cd /boot/ # mv initrd-2.6.18-164.15.1.el5xen.img initrd-2.6.18-164.15.1.el5xen.img.bak # mkinitrd -f /boot/initrd-2.6.18-164.15.1.el5xen.img --with=xennet --preload=xenblk --omit-scsi-modules 2.6.18-164.15.1.el5xen
修改密码
# passwd Changing password for user root. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
退出chroot
# exit
检查 `etc/ssh/sshd_config`中关于允许在ssh登录时使用密码的相关行。
# egrep "PermitRootLogin|PasswordAuthentication" /mnt/loop/centos54/etc/ssh/sshd_config PermitRootLogin yes PasswordAuthentication yes
如果你需要通过CloudStack· UI或API启用重置模板的密码功能,在镜像中安装密码更改脚本。相关内容请参考:ref:adding-password-management-to-templates。
卸载或删除loopback挂载。
# umount /mnt/loop/centos54 # losetup -d /dev/loop0
复制镜像文件到XenServer主机的文件存储库。在下面的例子中,XenServer是”xenhost”。这个XenServer有一个UUID为a9c5b8c8-536b-a193-a6dc-51af3e5ff799的NFS库。
# scp CentOS_6.2_x64 xenhost:/var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799/
登录到XenServer然后创建一个与镜像同样大小的VDI。
[root@xenhost ~]# cd /var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799 [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# ls -lh CentOS_6.2_x64 -rw-r--r-- 1 root root 10G Mar 16 16:49 CentOS_6.2_x64 [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-create virtual-size=10GiB sr-uuid=a9c5b8c8-536b-a193-a6dc-51af3e5ff799 type=user name-label="Centos 6.2 x86_64" cad7317c-258b-4ef7-b207-cdf0283a7923
将镜像导入到VDI中。这可能会花费10-20分钟。
[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-import filename=CentOS_6.2_x64 uuid=cad7317c-258b-4ef7-b207-cdf0283a7923
找到这个VHD文件。它的名字是以VDI的UUID命名的。压缩并上床至你的web服务器。
[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# bzip2 -c cad7317c-258b-4ef7-b207-cdf0283a7923.vhd > CentOS_6.2_x64.vhd.bz2 [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# scp CentOS_6.2_x64.vhd.bz2 webserver:/var/www/html/templates/
将Hyper-V的VM转换为模板¶
要转换Hyper-V的VM到兼容XenServer的CloudStack模板,你需要一个独立的添加了NFS VHD SR的XenServer主机。无论使用CloudStack管理哪个版本XenServer,但必须是XenCenter 5.6 FP1或SP2(它向下兼容5.6)。另外,添加了NFS ISO SR是有帮助的。
对于Linux VMs,在尝试让VM在XenServer中工作之前你可能必须在Hyper-V做一些准备工作。如果你仍然想要在Hyper-V中使用这个VM的话,克隆这个VM然后在克隆的虚机上操作。卸载Hyper-V集成组件然后检查任何/etc/fstab中涉及的相关设备名称:
从 linux_ic/drivers/dist 目录中,运行make uninstall(“linux_ic” 是复制的Hyper-V集成组件的路径)。
从备份/boot/ 恢复原始的文件系统(备份名称为 *.backup0)。
从 /boot/grub/menu.lst移除 “hdX=noprobe” 。
通过名称从 /etc/fstab中检查任何挂载的分区。将这些条目(如果有)改成使用LABEL或者UUID挂载。你能通过 blkid命令获得这些信息。
下一步请确保Hyper-V中的这个VM没有运行,然后把VHD送至XenServer。有两个选择。
选项一:
使用XenCenter导入VHD。在XenCenter中,找到Tools>Virtual Appliance Tools>Disk Image Import。
选择VHD,然后点击下一步。
给VM起个名字,在Storage下选择 NFS VHD SR,启用”Run Operating System Fixups” 然后选择NFS ISO SR。
点击下一步 完成。完成虚拟机创建。
选项二:
运行 XenConvert ,选择 VHD,选择 XenServer,点击下一步。
选择VHD,然后点击下一步。
输入XenServer主机信息,点击下一步。
输入VM名称,点击“下一步”,点击“转换”。VM应该就创建了。
一旦你完成从hyper-v VHD到虚拟机的创建,准备使用以下步骤:
启动虚拟机,卸载Hyper-V集成服务,并重新启动。
安装XenServer Tools,然后重新启动。
按需要准备VM。例如在Windows VM上执行sysprep。请参阅 “创建Windows模板”。
以上任一选项将在HVM模式下创建一个VM。对于Windows虚拟机来说这是很好的,但Linux的虚拟机可能无法达到最佳性能。要转换Linux虚拟机到PV模式,对于不同的发行版本将需要额外的步骤。
关闭虚拟机,从NFS存储拷贝VHD到一个web服务器;比如,在web服务器上挂载NFS共享然后拷贝它,或者是在XenServer主机上用sftp或scp将VHD上传到web服务器。
在 CloudStack中,使用以下值创建一个新的模板:
URL。给VHD指定URL。
OS类型。使用适当的OS。对于CentOS的PV模式来说,选择其他PV (32位)或其他PV(64位)。这个选项仅适用于XenServer。
Hypervisor。XenServer
格式。VHD
模板就创建好了,然后你可以通过它创建实例。
给你的模板添加密码管理¶
CloudStack提供了可选的密码重置功能,该功能允许用户在CloudStack UI上设置临时的admin或root密码,也可以重置现有的admin或root密码。
为启用密码重置功能,您需要下载额外的脚本到模版上。当您之后在CloudStack中添加模版时,您可以指定该模版是否启用重置admin或root密码的功能。
密码管理功能总是在虚机启动时重置账号的密码。该脚本通过对虚拟路由器的HTTP调用,获取需要重置的账号密码。启动时,只要虚拟路由器可以访问,虚机就可以获得应该设置的账号密码。当用户请求密码重置时,管理服务器会生成新密码,并发送到虚拟路由器。因而,虚机需要重启新密码才能生效。
在虚机重启时,如果脚本不能连接到虚拟路由器,则密码不会被重置,但启动过程还会继续正常执行。
Linux系统安装¶
使用一下步骤开始Linux系统的安装:
下载cloud-set-guest-password脚本文件:
拷贝本文件到 /etc/init.d 。
在某些linux发行版拷贝此文件到 /etc/rc.d/init.d。
执行以下命令使脚本可执行:
chmod +x /etc/init.d/cloud-set-guest-password
根据不同的Linux发行版,选择适当的步骤继续。
在Fedora,CentOS/RHEL和Debian上运行:
chkconfig --add cloud-set-guest-password
Windows OS 安装¶
从`下载页<http://sourceforge.net/projects/cloudstack/files/Password%20Management%20Scripts/CloudInstanceManager.msi/download>`_ 下载安装程序CloudInstanceManager.msi,并在新创建的Windows 虚拟机中运行安装程序。
删除模板¶
模板可以被删除。在一般情况下,当一个模板跨越多个区域,只有被选中的副本才会被删除,在其他区域相同的模板将不会被删除。CentOS的模板是一个例外。如果所提供的CentOS的模板被删除,它从所有区域都将被删除。
当删除模板时,从它们中产生的虚拟机实例将继续运行。然而,新的虚拟机不能在被删除模板的基础上创建。