内容


在 IBM SmartCloud Enterprise 上创建解决方案

在不同帐户之间转移镜像资产

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

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 在 IBM SmartCloud Enterprise 上创建解决方案

敬请期待该系列的后续内容。

此内容是该系列的一部分:在 IBM SmartCloud Enterprise 上创建解决方案

敬请期待该系列的后续内容。

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 选项卡
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 窗口
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 设置为 "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
    从 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
获得 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
    创建 storage_server_accountA
    图 13. 连接 storageA
    连接 storageA
    连接 storageA
  3. 注意,在连接存储到 storage_server_accountA 时,应该将装载点设置为 /mnt。复制镜像后,您可以看到在 /mnt 下有一个名称为 image 的目录。配置存储实例后,请检查 /mnt 目录。通过 xshell 等 SSH 工具登录到 storage_server_accountA。检查 /mnt 目录下的文件,看看复制命令是否已创建了 image 目录。
    图 14. 验证 image 目录已被创建
    验证 image 目录已被创建
    验证 image 目录已被创建

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

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

  1. 通过 SmartCloud Enterprise 用户界面,以 idB@cn.ibm.com 登录,这是 accountB 下面的一个身份。
  2. 创建一个名称为 storage 的永久存储,其格式为 ext3,大小为 512GB。
    图 15. 创建 storageB
    创建 storageB
    创建 storageB
  3. 创建一个名称为 key_accountB 的新密钥,并将该密钥下载到本地计算机。
  4. 创建一个 RedHat 6 实例 (storage_server_accountB),连接了 storageB 并设置了 key_accountB
    图 16. 创建 storage_server_accountB
    创建 storage_server_accountB
    创建 storage_server_accountB
  5. 将存储连接到该实例时,装载点是 /mnt。
    图 17. 连接 storageB
    连接 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 的新密钥文件
    创建用于 SCP 的新密钥文件
  3. 将内容从 key_accountB(这是在前面的步骤中下载的)复制到这个新文件。请注意,如果您正在从 Windows 系统运行 xshell,您可以用 Windows 记事本编辑器打开 key_accountB,然后将它粘贴到 vi 新文件。
    图 19. key_accountB 的内容
    key_accountB 的内容
    key_accountB 的内容
  4. 以 idcuser 身份登录到 storage_server_accountB 并检查 /mnt 下面的文件。如您所见,此时还没有 image 目录。
    图 20. 验证在 storage_server_accountB 上没有 image 目录
    验证在 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 命令复制镜像文件
执行 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
获得 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 对这种类型的镜像转移只支持每次转移一个镜像。请继续关注。只要我们开发出一个增强的解决方案实现对镜像的批量转移,我们就会告诉您。


相关主题


评论

添加或订阅评论,请先登录注册

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