使用模板

模板相当于虚拟机的重用配置。当用户创建虚拟机时能从CloudStack的模板列表中选择一个。

特殊情况下,模板可以是一个包含一个或多个操作系统的虚拟磁盘镜像,你可以选择性的安装另外的软件,比如office应用并设置访问控制来决定谁能使用这个模板。每个模板对应一个特殊类型的虚拟机,此类虚拟机在将模板添加入CloudStack时指定。

CloudStack附带一个默认模板。为了向用户呈现出更多选择,CloudStack的管理员和用户能创建模板并添加到CloudStack中。

创建模板概览

CloudStack默认已经有了一个带CentOS系统的默认模板。有许多添加更多模板的方法,管理员和普通用户均能添加。一般是这样的顺序:

  1. 运行一个带有你需要的操作系统的虚拟机实例,并进行一些你期望的设置。

  2. 停止VM。

  3. 将卷转换为模板。

还有其他方法向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是设置成公用还是私有。私有区域被分配到一个单一的域,而公共区域能被任何域访问。

通过已存在的虚拟机创建模板

当你已经有了一台按你的想法已经配置好的虚拟机,你就能以他为原型创建别的虚拟机。

  1. 使用 `“创建VMs” <virtual_machines.html#creating-vms>`_给出的方法创建并且开启一个虚拟机。

  2. 在虚拟机中做好需要的配置,然后点击按钮关闭该虚拟机。

  3. 等待虚拟机关闭。当虚拟机状态显示为“已停止”,执行下一步。

  4. 点击创建模板并填写如下内容:

    • 名称和显示文本。这些会在UI中显示,所以建议写一些描述信息。

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

      • 如果已停止虚拟机的系统在列表中,选择它。

      • 如果已停止虚拟机系统类型不在列表中就选择其他。

      • 如果你打算以PV模式启动该模板,请选择其他PV(32位)或其他PV(64位)。这个选项只对XenServer有效:

        注解

        通常你不能选择比镜像版本老的OS版本。比如,选择CentOS 5.4来支持CentOS 6.2镜像通常来说是不工作的。在这种情况下,你应该选择其他。

    • 公共。选择是来让CloudStack里面的所有用户都能访问这个模板。模板将会出现在社区模板列表中。请参阅 “私有和公共模板”

    • 启用密码。如果你的模板中安装了CLoudStack密码修改脚本,选择是。请参阅 给你的模板添加密码管理

  5. 点击 添加

当模版创建过程完成后,新模版会出现在模版页面。在创建虚机时就可以使用新模版了。

从一个快照创建一个模板

如果你不想为了使用创建模板菜单项而停止虚拟机(如在`“从已有的虚机创建模板” <#creating-a-template-from-an-existing-virtual-machine>`_中描述的), 你可以通过CloudStack UI从任何快照直接创建模板。

上传模板

vSphere模板和ISOs

如果你通过vSphere Client上传模板,请确认OVA文件不包含ISO。如果是的话,从模板部署虚拟机将失败。

模板是使用HTTP协议通过URL来上传的。模板通常都很大。你可以使用gzip压缩它们以缩短上传时间。

要上传模板:

  1. 在左边的导航栏,点击模板。

  2. 点击注册模板。

  3. 填写以下内容:

    • 名称和显示文本。这些会在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服务。

过程概述如下:

  1. 上传你的Linux ISO。

    更多信息,请参阅 “添加ISO”

  2. 使用这个ISO创建VM实例。

    更多信息,请参阅 “创建VMs”

  3. 准备Linux VM

  4. 从VM创建模板。

    更多信息,请参阅 “从已有的虚拟机创建模板”

Linux的系统准备工作

下列步骤将会为模板准备一个基本的Linux安装。

  1. 安装

    通常在安装过程中给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
      
  2. 密码管理

    注解

    如果需要,客户(如在Ubuntu的安装过程中创建的用户)应该被移除。首先确认root用户账户是启用的并且使用了密码,然后使用root登录。

    sudo passwd root
    logout
    

    使用root,移除任何在安装过程中创建的自定义用户账户。

    deluser myuser --remove-home
    

    关于设置密码管理脚本的相关说明,请参阅 给你的模板添加密码管理 ,这样能允许CloudStack通过web界面更改root密码。

  3. 主机名管理

    默认情况下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
      

    警告

    当你准备好做你的主模板的时候请运行下列步骤。如果主模板在这些步骤期间重启了,那么你要重新运行所有的步骤。在这个过程的最后,主模板应该关机并且将其创建为模板,然后再部署。

  4. 移除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/*
      
  5. 移除SSH Keys

    这步是为了确认所有要作为模板的VMs的SSH Keys都不相同,否则这样会降低虚拟机的安全性。

    rm -f /etc/ssh/*key*
    
  6. 清除日志文件

    从主模板移除旧的日志文件是一个好习惯。

    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
    
  7. 设置主机名

    为了Ubuntu DHCP的脚本功能和CentOS dhclient能设置VM主机名,他们都去要设置主模板的主机名设置为“localhost”,运行下面的命令来更改主机名。

    hostname localhost
    echo "localhost" > /etc/hostname
    
  8. 设置用户密码期限

    这步是要在模板部署之后强制用户更改VM的密码。

    passwd --expire root
    
  9. 清除用户历史

    下一步来清除你曾经运行过的bash命令。

    history -c
    unset HISTFILE
    
  10. 关闭VM

    现在你可以关闭你的主模板并且创建模板了!

    halt -p
    
  11. 创建模板!

    现在你可以创建模板了,更多信息请参阅 “从已存在的虚拟机创建模板”

注解

通过Ubuntu和CentOS的模板分发的虚机可能需要重启才让主机名生效。

创建Windows模板

Windows模板在分发多个虚拟机的之前必须使用Sysprep初始化。Sysprep允许你创建一个通用的Windows模板和避免任何可能的SID冲突。

注解

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

过程概述如下:

  1. 上传你的Windows ISO。

    更多信息,请参阅 “添加ISO”

  2. 使用这个ISO创建VM实例。

    更多信息,请参阅 “创建VMs”

  3. 按照你所使用的WIndows Server版本进行Windows Server 2008 R2(下面的)或者Windows Server 2003 R2中Sysprep的操作步骤。

  4. 准本工作完成了。现在你可以按照创建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.

  1. 下载和安装Windows AIK

    注解

    刚刚创建的Windows 2008 R2上面并没有安装Windows AIK。Windows AIK不是你创建的模板中的一部分。它仅仅用于创建sysprep应答文件。

  2. 在\Windows 2008 R2安装DVD中的源目录复制install.wim文件到本地硬盘。这是一个非常大的文件可能会复制较长时间。Windows AIK要求WIM文件是可写的。

  3. 打开Windows系统镜像管理器。

  4. 在Windows镜像面板,右击选择一个Windows镜像或编录文件选项来读取你刚刚复制的install.wim文件。

  5. 选择Windows 2008 R2版本。

    你可能会收到一个警告提示说不能打开编录文件。点击是来创建一个新的编录文件。

  6. 在应答文件面板,右击来创建一个新的应答文件。

  7. 使用以下步骤从Windows系统镜像管理器生成应答文件:

    1. 第一个页面你必须让语言和国家或位置选择页面是自动的。要使这个自动化,请在你的Windows 镜像面板扩展组件,右击Microsoft-Windows-International-Core添加设置以传送 7 oobeSystem。在你的应答文件面板中,为语言和国家或位置用适当的设置配置InputLocale、SystemLocale、UILanguage、和UserLocale。你可能对这些设置有疑问,你可以指定一个设置右击选择帮助。这将打开对应的CHM帮助文件,这里面包括了与你尝试配置的设置相关的一些示例。

      System Image Manager

    2. 你需要将软件授权选择页配置为自动进行,这不是众所周知的EULA。为此,展开Microsoft-Windows-Shell-Setup组件,选中OOBE 设置,将此设置加入到Pass 7 oobeSystem中去。在设置中,将HideEULAPage 设置为true。

      Depicts hiding the EULA page.

    3. 确保恰当的设置了序列号。如果使用MAK的话,可以在Windows2008R2的虚拟机上输入MAK。并不需要将MAK输入到Windows映像管理器中。如果你使用KMS主机进行激活,则不需要输入产品序列号。Windows卷激活的详细信息可以在http://technet.microsoft.com/en-us/library/bb892849.aspx 上查看。

    4. 类似机械化的操作还有更改管理员密码页。展开Microsoft-Windows-Shell-Setup组件(如果没有展开的话),展开用户账户,右键点击管理员密码,添加设置到Pass 7 oobeSystem配置,在设置中,指定一个密码。

      Depicts changing the administrator password

      可能会需要阅读AIK文档并设置多个选项来适合你的部署。以上的步骤至少需要使windows脱离建立网络的过程。

  8. 将答案文件保存为unattend.xml,可以忽略验证窗口中的警告信息。

  9. 将unattend.xml文件拷贝到Windows 2008 R2 虚拟机的c:\windows\system32\sysprep 文件夹下,

  10. 一旦将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。

  1. 从Windows 安装CD中提取\support\tools\deploy.cab到WIndows 2003 R2 虚拟机中的此目录 c:\sysprep。

  2. 运行 c:\sysprep\setupmgr.exe 来创建syprep.inf文件。

    1. 选择创建新的来创建一个新的应答文件。

    2. 安装的类型选择 “Sysprep 安装”

    3. 选择合适的OS版本

    4. 在许可协议界面,选择”是,完全自动安装”

    5. 提供你的名称和组织。

    6. 保留显示设置为默认。

    7. 设置合适的时区。

    8. 提供你的产品key。

    9. 给你的部署选择一个合适的许可模式。

    10. 选择”自动生成计算机名”。

    11. 输入一个默认的管理员密码。如果你启用了密码重置功能,用户实际上将不会使用这个密码。在来宾虚机启动之后实例管理器会重置密码。

    12. 网络组件使用”典型设置”。

    13. 选择“WORKGROUP”选项。

    14. 电话服务使用默认。

    15. 选择合适的区域设置。

    16. 选择合适的语言选项。

    17. 不要安装打印机。

    18. 不要指定”运行一次”。

    19. 你不必指定标示字符串。

    20. 将应答文件保存到c:\sysprep\sysprep.inf。

  3. 运行以下命令行来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:

  1. 建立在镜像文件上的回滚

    # mkdir -p /mnt/loop/centos62
    # mount -o loop  CentOS_6.2_x64 /mnt/loop/centos54
    
  2. 安装kernel-xen包到镜像文件中。下载PV内核和ramdisk到镜像中。

    # yum -c /mnt/loop/centos54/etc/yum.conf --installroot=/mnt/loop/centos62/ -y install kernel-xen
    
  3. 在 /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
    
  4. 终止已经安装到镜像文件中的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。

  5. 根据你要找的内容,在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
    
  6. 编辑 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
    
  7. 通过终端开启登陆。在默认终端设备XenServer系统上的是xvc0.确定在etc/inittab和etc/securetty中有以下各自的行:

    # grep xvc0 etc/inittab
    co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
    # grep xvc0 etc/securetty
    xvc0
    
  8. 确保虚拟盘支持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
    
  9. 修改密码

    # passwd
    Changing password for user root.
    New UNIX password:
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.
    
  10. 退出chroot

    # exit
    
  11. 检查 `etc/ssh/sshd_config`中关于允许在ssh登录时使用密码的相关行。

    # egrep "PermitRootLogin|PasswordAuthentication" /mnt/loop/centos54/etc/ssh/sshd_config
    PermitRootLogin yes
    PasswordAuthentication yes
    
  12. 如果你需要通过CloudStack· UI或API启用重置模板的密码功能,在镜像中安装密码更改脚本。相关内容请参考:ref:adding-password-management-to-templates

  13. 卸载或删除loopback挂载。

    # umount /mnt/loop/centos54
    # losetup -d /dev/loop0
    
  14. 复制镜像文件到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/
    
  15. 登录到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
    
  16. 将镜像导入到VDI中。这可能会花费10-20分钟。

    [root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-import filename=CentOS_6.2_x64 uuid=cad7317c-258b-4ef7-b207-cdf0283a7923
    
  17. 找到这个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中涉及的相关设备名称:

  1. 从 linux_ic/drivers/dist 目录中,运行make uninstall(“linux_ic” 是复制的Hyper-V集成组件的路径)。

  2. 从备份/boot/ 恢复原始的文件系统(备份名称为 *.backup0)。

  3. 从 /boot/grub/menu.lst移除 “hdX=noprobe” 。

  4. 通过名称从 /etc/fstab中检查任何挂载的分区。将这些条目(如果有)改成使用LABEL或者UUID挂载。你能通过 blkid命令获得这些信息。

下一步请确保Hyper-V中的这个VM没有运行,然后把VHD送至XenServer。有两个选择。

选项一:

  1. 使用XenCenter导入VHD。在XenCenter中,找到Tools>Virtual Appliance Tools>Disk Image Import。

  2. 选择VHD,然后点击下一步。

  3. 给VM起个名字,在Storage下选择 NFS VHD SR,启用”Run Operating System Fixups” 然后选择NFS ISO SR。

  4. 点击下一步 完成。完成虚拟机创建。

选项二:

  1. 运行 XenConvert ,选择 VHD,选择 XenServer,点击下一步。

  2. 选择VHD,然后点击下一步。

  3. 输入XenServer主机信息,点击下一步。

  4. 输入VM名称,点击“下一步”,点击“转换”。VM应该就创建了。

一旦你完成从hyper-v VHD到虚拟机的创建,准备使用以下步骤:

  1. 启动虚拟机,卸载Hyper-V集成服务,并重新启动。

  2. 安装XenServer Tools,然后重新启动。

  3. 按需要准备VM。例如在Windows VM上执行sysprep。请参阅 “创建Windows模板”

以上任一选项将在HVM模式下创建一个VM。对于Windows虚拟机来说这是很好的,但Linux的虚拟机可能无法达到最佳性能。要转换Linux虚拟机到PV模式,对于不同的发行版本将需要额外的步骤。

  1. 关闭虚拟机,从NFS存储拷贝VHD到一个web服务器;比如,在web服务器上挂载NFS共享然后拷贝它,或者是在XenServer主机上用sftp或scp将VHD上传到web服务器。

  2. 在 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系统的安装:

  1. 下载cloud-set-guest-password脚本文件:

  2. 拷贝本文件到 /etc/init.d 。

    在某些linux发行版拷贝此文件到 /etc/rc.d/init.d

  3. 执行以下命令使脚本可执行:

    chmod +x /etc/init.d/cloud-set-guest-password
    
  4. 根据不同的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的模板被删除,它从所有区域都将被删除。

当删除模板时,从它们中产生的虚拟机实例将继续运行。然而,新的虚拟机不能在被删除模板的基础上创建。