在 IBM SmartCloud Enterprise 上创建解决方案: 在不同帐户之间转移镜像资产

将镜像从一个帐户转移到另一个账户的分步指南

IBM® SmartCloud Enterprise 是一个敏捷的云计算基础架构即服务,对高度安全的企业级虚拟服务器环境提供快速访问,非常适用于开发和测试活动以及其他动态工作负载。在 IBM SmartCloud Enterprise 上,镜像是重要的资产,它是用户可以配置的虚拟机的基础。用户在云上可能针对不同用途会有不同的帐户,他们希望在这些帐户之间共享私有映象资产,以避免重复工作。在本文中,作者提供在 IBM SmartCloud Enterprise 上将镜像从从一个帐户转移到另一个帐户的分步指南。

Chun Feng Wu, 软件工程师, IBM

Chun Feng Wu 在云计算领域是一位 IBM Certified Solution Advisor 和一位 IBM Certified Solution Architect。他致力于 IBM 公共云 SmartCloud Enterprise,并且现在正专注于 IBM 托管云 SmartCloud Enterprise Plus。



Yi Shuai Wang, 软件工程师, IBM

Yi Shuai Wang 是 IBM 的一名咨询架构师,他领导开发人员进行 IBM SmartCloud Enterprise 的业务支持服务的开发。



Liu Guo Ning, 软件工程师, IBM

Guo Ning Liu 是 IBM 中国开发实验室的 IBM SmartCloud Enterprise 开发团队的一名软件工程师。自 2009 以来,Liu Guo 一直致力于为 IBM Smart Cloud Enterprise 配置和管理映像。



Alex Amies, 高级软件工程师, IBM

/developerworks/i/p-aamies.jpgAlex Amies 是 IBM GTS 中国开发实验室的一名高级软件工程师。他目前是致力于设计 IBM Smart Business Development and Test on the IBM Cloud 的一名架构师。此前他在 IBM 其他部门担任过云计算和安全性产品方面的架构师和开发人员。



2012 年 7 月 30 日

IBM SmartCloud Enterprise 帐户启用的方式为共享镜像只在同一帐户内可见。通常情况下,共享镜像是由企业为满足特定业务需求而定制的镜像,但在越来越多的情况中,一个客户针对不同用途(如开发、生产前、生产和测试)有不同的 SmartCloud Enterprise 帐户,并且客户希望在不同帐户之间共享这些私有映象资产,这样既能够保护资产,也可以避免重复工作。

IBM SmartCloud Enterprise 2.0 对于这样的要求提供了一个非常棒的解决方案。本文提供了将一个镜像从一个帐户转移到另一个帐户的分步指南。这个任务的先决条件之一是,操作者必须拥有两个帐户的凭据。

在本文中使用的业务场景如下:

  • 某组织在 SmartCloud Enterprise 中有两个帐户:一个用于测试(北卡罗莱纳州的数据中心 Research Triangle Park 的 accountA),另一个用于生产(科罗拉多州数据中心 Boulder 的 accountB)。
  • 用户使用测试帐户准备和验证镜像;完成时,镜像就可用于生产部署。

为了免去为生产帐户准备相同镜像的重复工作,用户可以通过此处记录的步骤将镜像从其测试帐户 (accountA) 转移到其生产帐户 (accountB)。

表 1 列出了本文所使用资源的描述。

表 1. 本文中的资源引用
资源类型有关转出方的信息有关转入方的信息
数据中心RTP 数据中心Boulder 数据中心
帐户AccountAAccountB
登录 IdidA@cn.ibm.comidB@cn.ibm.com
实例名称instanceA(捕获)instanceB(基于被转移的镜像进行配置)
镜像名称to_be_transferred_image(从 instanceA 捕获)transferred_image(to_be_transferred_image 的相同副本)
存储服务器的实例名称storage_server_accountA (Redhat 6, 170.224.165.60)storage_server_accountB (Redhat 6, 170.225.100.188)
存储服务器的键名称key_accountAkey_accountB
永久存储名称storageA (ext3)storageB (ext3)

任务 1:设置 SmartCloud 命令行工具环境

除了用户界面,还提供了命令行工具访问 SmartCloud 服务。目前,一些特性只通过命令行工具提供,如镜像复制到和导入,这些都是转移镜像的必要步骤。

SmartCloud 命令行工具在 JRE (Java™ Runtime Environment) 上运行,所以请确保您在发出任何 SmartCloud 命令之前已准备好 JRE。以下步骤假定所有 SmartCloud 命令都从同一台计算机发出(在这些步骤中是 Windows® XP 计算机)。

步骤 1:设置 JDK 运行时

http://java.com/en/download/index.jsp 下载 JDK 1.6 (Java Development Kit);确保设置了相应的 JAVA_HOME 变量。

安装后,运行 java -version 检查是否已安装成功。如果您发现一个 class not found 异常,可能是因为安装了错误的 JRE。

步骤 2:设置 SmartCloud 命令行工具

为了利用 SmartCloud 命令,必须通过访问 SmartCloud Enterprise Support 选项卡下载最新的 SmartCloud 命令行工具。您必须登录到 IBM SmartCloud Enterprise 下载命令行工具。图 1 显示了 Command Line Tool Reference 链接。

图 1. SmartCloud Enterprise Support 选项卡
SmartCloud Enterprise Support 选项卡

命令行工具由 IBM 资产管理系统进行维护。单击 Command Line Tool Reference 后,您将被定向到一个资产管理页面。

图 2 显示了 Command Line Tool 资产页面。单击 Download this Asset 下载 SmartCloud 命令行工具。

图 2. Command Line Tool 的下载链接
命令行工具的下载链接

在解压 Command Line Tool Reference and Binaries.zip 文件之后,您应该看到一个 DeveloperCloud_CMD_Tool.zip 文件;这是 SmartCloud 命令行文件所在之处。您应该继续将 DeveloperCloud_CMD_Tool.zip 解压到一个没有包含任何空格的路径,例如,C:\DeveloperCloud_CMD_Tool。

GA_CommandLine.pdf 文件是一个帮助文档,其中包含在本文中提到的命令。该 PDF 文件位于 Command Line Tool Reference and Binaries.zip 文件中。

为了通过 SmartCloud 命令行工具方便和保护 SmartCloud 上的操作,您应该为每个登录凭据创建一个密码保护文件(清单 1 和清单 2)。本例中使用的路径是 C:\DeveloperCloud_CMD_Tool\keys。请注意,我们自己提前创建了目录 "keys"。

清单 1. 为 idA 创建保护文件
C:\DeveloperCloud_CMD_Tool>ic-create-password -u idA@cn.ibm.com -password password
 -w unlock -g ./keys/idA.ext

Executing action: CreatePassword ...
Password File created successfully!
Path : C:\DeveloperCloud_CMD_Tool\.\keys\idA.ext
File Name :idA.ext
Please do not edit this file!
The request has been submitted successfully.
Executing CreatePassword finished
清单 2. 为 idB 创建保护文件
C:\DeveloperCloud_CMD_Tool>ic-create-password -u idB@cn.ibm.com -password password -w
 unlock  -g  ./keys/idB.ext

Executing action: CreatePassword  ...
Password File created successfully!
Path : C:\DeveloperCloud_CMD_Tool\.\keys\idB.ext
File Name :idB.ext
Please do not edit this file!
The request has been submitted successfully.
Executing CreatePassword  finished

如果您在执行该 SmartCloud 命令时遇到任何问题,请检查 C:\DeveloperCloud_CMD_Tool\logs 下面的日志。


任务 2:从 accountA 复制镜像

目前,SmartCloud 将镜像复制到永久存储;复制镜像时,该存储应该处于非连接状态。让我们在发出 copy-to(复制到)命令之前先创建一个新的存储。

步骤 1:创建一个用于保存复制镜像的永久存储

通过 SmartCloud Enterprise 用户界面或命令行工具都可以创建永久存储。以下步骤使用的是用户界面。

从用户界面使用 ID idA@cn.ibm.com 登录 SmartCloud Enterprise,并导航到 Control panel > Storage > Add storage。图 3 显示了在 Add Storage 窗口的字段中要输入的内容。

图 3. Add Storage 窗口
SmartCloud Enterprise Add Storage 窗口

请注意,我们使用 Linux® 系统进行镜像转移,所以选中 ext3。如果您喜欢用 Windows,可以选中 raw。您必须提前评估要转移的镜像的大小,这有助于确定在这一步应该占用的存储大小。确保数据中心就是镜像所在的数据中心。

正如图 4 所示,新创建的存储 storageA 是 Non-Attached 状态,这意味着您可以使用这个存储来保存您的复制镜像。

图 4. 已创建的存储
已创建的存储

步骤 2:捕获镜像并启用 "copy allowed"

让我们假设您在 RTP 数据中心以 idA@cn.ibm.com 身份已捕获了一个镜像(名为 “to_be_transferred_image”)。默认情况下,这个捕获的镜像是私有的,不能被复制。为了在私有镜像上启用图像复制特性,您必须在 SmartCloud Enterprise 资产管理系统内将 copy allowed 设置为 Yes。下面的步骤告诉您如何操作。

  1. 单击 View asset catalog 查看镜像信息。
    图 5. 查看资产目录
    查看资产目录
  2. 选择您捕获的镜像并单击其名称。
    图 6. 查看镜像资产
    查看镜像资产
  3. 单击图 7 中所示的编辑图标。
    图 7. 查看镜像信息
    查看镜像信息
  4. 在 Edit 页面上单击 More,如图 8 所示。
    图 8. 编辑镜像信息
    编辑镜像信息
  5. 选中 Copy Allowed 的 Y 并单击 Update 按钮。
    图 9. 将 copy allowed 设置为 "yes"
    图 9. 将 copy allowed 设置为

步骤 3:通过描述捕获的镜像测试命令行工具

在您复制镜像之前,先进行测试,看看 SmartCloud 命令行工具在连接到 SmartCloud 服务时,它是否正常运行。在该步骤中,运行 ic-describe-image,看看是否能返回镜像信息。

  1. 为命令准备好参数值。重要的参数是 image id。您可以从 SmartCloud 用户界面获得镜像 ID,如图 10 所示:
    图 10. 从 SmartCloud Enterprise Images 选项卡获得镜像 ID
    从 SmartCloud Enterprise Images 选项卡获得镜像 ID
  2. 发出 describe 命令(清单 3)。
    清单 3. 描述已捕获的镜像命令
    C:\DeveloperCloud_CMD_Tool>ic-describe-image -u idA@cn.ibm.com -w unlock -g
     ./keys/idA.ext -k 20043123

命令行工具在运行中应该不会抛出异常,并且在运行该命令后,应显示镜像信息。

步骤 4:运行 copy-to 命令

为了复制镜像,您必须知道 storageA 的 storage id。您可以从 SmartCloud Enterprise 用户界面中的 Storage 选项卡获得此 ID。

图 11. 获得 storageA 的 storage id
获得 storageA 的 storage id

现在您已经有了 image id 和 storage id,是时候运行 copy-to 命令(清单 4)。在发出命令之前,请确保 storageA 的状态是 Non-Attached。

清单 4. 运行 copy-to 命令
C:\DeveloperCloud_CMD_Tool>ic-copy-to -u idA@cn.ibm.com -w unlock -g
 ./keys/idA.ext -v 25893 -I 20043123
Executing action: CopyTo  ...
The request has been submitted successfully.
ID: 25893
Name: storageA
Owner: liuyank@cn.ibm.com
Size: 512 Gib
Format : ext3
State: COPYING
Location: 41
Storage Area Id:
Storage Area Name:
.....
Platform Version: 2
Executing CopyTo  finished

您可以经常运行 ic-describe-image 命令来检查状态(清单 5)。如果被列出的状态为 AVAILABLEcopy-to 命令应该成功完成;COPYING 意味着仍然在复制中。对于一个 60GB 的镜像,复制大概要花 40 分钟。

清单 5. 描述镜像,检查复制状态
C:\DeveloperCloud_CMD_Tool>ic-describe-image  -u idA@cn.ibm.com -w unlock -g
 ./keys/idA.ext  -k 20043123
Executing action: DescribeImage  ...
ID: 20043123
Name: to_be_transferred_image
Visibility: PRIVATE
State: COPYING
Owner: idA@cn.ibm.com
Platform: Windows/2003 R2
Location: 41

您也可以通过发出 ic-describe-volume 命令来检查状态,该命令用于描述存储。


任务 3:将镜像文件从 accountA 转移到 accountB

为了在不同帐户之间转移镜像,您必须设置两个虚拟机。

步骤 1:创建一个源实例:storage_server_accountA

此服务器用作复制源,在此步骤中的以下操作均针对 RTP 数据中心进行。

  1. 以 idA@cn.ibm.com 登录,这是 accountA 下的身份。创建一个名称为 key_accountA 的密钥。从 SmartCloud Enterprise 将该密钥下载到本地计算机。
  2. 创建一个 RedHat 6 实例 (storage_server_accountA),连接永久存储(在从 accountA 复制镜像 中创建)并关联到 key_accountA。图 12 和图 13 提供了详细信息。
    图 12. 创建 storage_server_accountA
    创建 storage_server_accountA
    图 13. 连接 storageA
    连接 storageA
  3. 注意,在连接存储到 storage_server_accountA 时,应该将装载点设置为 /mnt。复制镜像后,您可以看到在 /mnt 下有一个名称为 image 的目录。配置存储实例后,请检查 /mnt 目录。通过 xshell 等 SSH 工具登录到 storage_server_accountA。检查 /mnt 目录下的文件,看看复制命令是否已创建了 image 目录。
    图 14. 验证 image 目录已被创建
    验证 image 目录已被创建

步骤 2:创建目标实例:storage_server_accountB

该服务器用于接收被转移的镜像,在此步骤中,以下操作均针对 Boulder 数据中心。

  1. 通过 SmartCloud Enterprise 用户界面,以 idB@cn.ibm.com 登录,这是 accountB 下面的一个身份。
  2. 创建一个名称为 storage 的永久存储,其格式为 ext3,大小为 512GB。
    图 15. 创建 storageB
    创建 storageB
  3. 创建一个名称为 key_accountB 的新密钥,并将该密钥下载到本地计算机。
  4. 创建一个 RedHat 6 实例 (storage_server_accountB),连接了 storageB 并设置了 key_accountB
    图 16. 创建 storage_server_accountB
    创建 storage_server_accountB
  5. 将存储连接到该实例时,装载点是 /mnt。
    图 17. 连接 storageB
    连接 storageB

步骤 3:将镜像文件从 accountA 复制到 accountB

有几种方式 (NFS, SFTP, SCP) 可以将镜像文件从 accountA 复制到 accountB。 本文提供两种镜像转移方式:SCP 和 NFS。

通过 SCP 转移镜像文件

  1. 以 idcuser 身份,ssh 到 storage_server_accountA。在本例中,xshell 用于完成该操作。
  2. 发出 vi 创建一个用于该用途的新密钥文件。
    图 18. 创建用于 SCP 的新密钥文件
    创建用于 SCP 的新密钥文件
  3. 将内容从 key_accountB(这是在前面的步骤中下载的)复制到这个新文件。请注意,如果您正在从 Windows 系统运行 xshell,您可以用 Windows 记事本编辑器打开 key_accountB,然后将它粘贴到 vi 新文件。
    图 19. key_accountB 的内容
    key_accountB 的内容
  4. 以 idcuser 身份登录到 storage_server_accountB 并检查 /mnt 下面的文件。如您所见,此时还没有 image 目录。
    图 20. 验证在 storage_server_accountB 上没有 image 目录
    验证在 storage_server_accountB 上没有 image 目录
  5. 以 idcuser 身份登录到 storage_server_accountA,并以 root 身份发出 scp 命令。该命令将 image 文件夹从 storage_server_accountA 复制到 storage_server_accountB,并设置了 storage_server_accountB 的密钥文件。

图 21 描述了将镜像文件从 accountA (storage_server_accountA) 复制到 accountB(storage_server_accountB) 的详细步骤。

图 21. 执行 SCP 命令复制镜像文件
执行 SCP 命令复制镜像文件

图 22 中的 100% 表示复制已完成。

图 22. 转移完成
转移完成

通过 NFS 服务转移镜像

  1. 以 idcuser 身份,登录到 storage_server_accountA。
  2. 设置 storage_server_accountA 上的 NFS 服务。当 vi /etc/exports 时,将 /mnt/image *(rw,no_root_squash) 添加到 /ext/exports(清单 6)。
    清单 6. 设置 NFS 服务
    [idcuser@vhost1335 ~]$ sudo bash
    [root@vhost1335 idcuser]# vi /etc/exports
    [root@vhost1335 idcuser]# /sbin/service iptables stop
    iptables: Flushing firewall rules:                              [  OK  ]
    iptables: Setting chains to policy ACCEPT: filter            [  OK  ]
    iptables: Unloading modules:                                     [  OK  ]
    [root@vhost1335 idcuser]# /sbin/service nfs start
    Starting NFS services:                                             [  OK  ]
    Starting NFS quotas:                                               [  OK  ]
    Starting NFS daemon:                                               [  OK  ]
    Starting NFS mountd:                                               [  OK  ]
    [root@vhost1335 idcuser]#

    请注意,在本例中,防火墙被停止。为了安全起见,应该打开 NFS 服务所需的端口,而不是停止防火墙。
  3. 以 idcuser 身份,登录到 storage_server_accountB,通过在该服务器上运行清单 7 中的命令,运行 mountcopy 命令。这些命令将镜像文件从 storage_server_accountA 移动到 storage_server_accountB。
    清单 7. 载入 image 目录
    [idcuser@ vhost1208 ~]$ sudo bash
    [root@vhost1208 idcuser]# mkdir /mnt/tmp
    [root@vhost1208 idcuser]# mkdir /mnt/image
    [root@vhost1208 idcuser]# /sbin/service iptables stop
    iptables: Flushing firewall rules:                          [  OK  ]
    iptables: Setting chains to policy ACCEPT: filter        [  OK  ]
    iptables: Unloading modules:                                 [  OK  ]
    [root@vhost1208 idcuser]# mount -t nfs 170.224.165.60:/mnt/image  /mnt/tmp
    [root@vhost1208 idcuser]# cp  -r /mnt/tmp/* /mnt/image
    [root@vhost1208 idcuser]#umount /mnt/tmp

通过在 storage_server_accountB 上列出 /mnt/image,验证镜像转移是否已完成。

图 23. 验证镜像文件已被复制
验证镜像文件已被复制

任务 4:将镜像导入 accountB

虽然您已将镜像文件复制到 storage_server_accountB,但它仍然不是 accountB 的镜像资产。为了使它成为 accountB 的镜像资产,您必须执行镜像导入操作。

步骤 1:删除实例 storage_server_accountB,断开永久存储的连接

只有当存储已断开连接时,导入镜像命令才可用,所以我们让您删除 storage_server_accountB,以断开永久存储的连接。在本例中,使用 SmartCloud Enterprise 用户界面删除它。

步骤 2:使用属于 accountB 的 idB@cn.ibm.com 导入镜像

在导入镜像之前,您必须了解 storageB 的 storage id,它是用于保存复制的镜像文件。图 24 显示了您如何获得 storageB 的 ID。

图 24. 获得 storageB 的 storage id
获得 storageB 的 storage id

现在已准备好运行 import 命令。您可以在此步骤中获得导入镜像的新 image id(清单 8)。该 image id 用于在稍后检查 storage_server_accountB 上的导入状态。此外,您在这里要为导入的镜像提供一个新的名称 (transferred_image)。

清单 8. 执行镜像导入命令
C:\DeveloperCloud_CMD_Tool>ic-import-image -u idB@cn.ibm.com -w unlock -g
 ./keys/idB.ext -n "tranferred_image" -v 25970
Executing action: ImportImage  ...
The request has been submitted successfully.
Image ID: 20043226
Name: tranferred_image
Description: A generic bundle/subcomponent to price imported images that did not
 originate from SmartCloud
Location: 82
Owner: idB@cn.ibm.com
State: IMPORTING
Visibility: PRIVATE
....
Executing ImportImage  finished

同样,您可以经常运行 describe 命令来检查导入的状态。当状态为 AVAILABLE 时,表示导入已成功完成;如果状态为 IMPORTING,则表示未完成。对于一个 60GB 的镜像,导入需要大约 30 分钟。

清单 9. 检查镜像导入的状态
C:\DeveloperCloud_CMD_Tool>ic-describe-image -u idB@cn.ibm.com -w unlock -g
 ./keys/idB.ext -k 20043226
Executing action: DescribeImage  ...
ID: 20043226
Name: tranferred_image
Visibility: PRIVATE
State: IMPORTING
Owner: idB@cn.ibm.com
Platform:
Location: 82
Architecture:
Documentation:
Manifest:
Description: A generic bundle/subcomponent to price imported images that did not
 originate from SmartCloud
.......

(以 idB@cn.ibm.com 身份)登录到 SmartCloud Enterprise 用户界面,您也可以检查状态,如图 25 所示。

图 25. 检查镜像导入的状态
检查镜像导入的状态

步骤 3:在 accountB 上执行验证

验证导入镜像的直接方式是,根据以前导入的镜像配置一个新实例。

使用 accountB id (idB@cn.ibm.com),从用户界面找到导入的镜像,选中它,并单击 Create instance

图 26. 选中要配置的导入镜像
选中要配置的导入镜像

像平常操作一样配置该实例。配置后,请检查您是否可以登录到一个新的 instanceB,然后看看在该实例上的服务是否正常运行。

图 27. 像平常一样进行配置
像平常一样进行配置

结束语

在本文中,我们提供了在帐户之间执行镜像转移所必需的详细步骤,这些帐户甚至可以位于不同的 IBM 数据中心。利用 IBM SmartCloud Enterprise 2.0 所提供这个特性,您在保护资产方面有了一个更好的选择。然而,SmartCloud Enterprise 对这种类型的镜像转移只支持每次转移一个镜像。请继续关注。只要我们开发出一个增强的解决方案实现对镜像的批量转移,我们就会告诉您。

参考资料

学习

获得产品和技术

  • 查看在 IBM SmartCloud Enterprise 上可用的 产品镜像

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Java technology
ArticleID=828170
ArticleTitle=在 IBM SmartCloud Enterprise 上创建解决方案: 在不同帐户之间转移镜像资产
publish-date=07302012