跳转到主要内容

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

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

使用 IBM Systems Director VMControl 实现 PowerVM 虚拟环境的自动化部署

操 牡丹, 软件工程师, IBM
操牡丹是 IBM 中国软件开发中心工程师,主要从事云服务方案的研究和开发工作。兴趣包括:虚拟化、云服务以及数据分析。
马 润生, 软件工程师, IBM
马润生主要从事 ERP 系统的开发工作,非常关注于富客户端解决方案的技术和产品,同时对云计算技术感兴趣。

简介: 使用 IBM Systems Director VMControl 能简化 PowerVM 虚拟环境的部署。VMControl 提供了两种程序接口:命令行接口和 REST API 接口。本文采用两种接口方式实现 PowerVM 虚拟环境的搭建,详细介绍了接口的参数传递和调用方法,并总结了两种方式的应用场景。结合 PowerVM 环境的前期准备,本文给出了搭建一套 PowerVM 虚拟环境的全过程。

发布日期: 2011 年 12 月 29 日
级别: 高级
访问情况 : 3934 次浏览
评论: 


概述

PowerVM 是 IBM 的一种虚拟化平台。通过 PowerVM 可以最大限度的利用服务器资源,其 CPU 资源可以细化到 0.01(微分区),具有动态内存共享和实时迁移等高级性能。IBM Systems Director VMControl 简化了 PowerVM 环境中的虚拟机(后面简称虚机)部署、映像管理等功能。在虚机部署方面,通过 VMControl,部署一台虚机只需要一个操作;而如果利用传统的 HMC 和 NIM,则需要先在 HMC 上创建一个虚机,为其分配存储和网络,然后再利用 NIM 来实现网络安装操作系统。在映像管理方面,VMControl 提出了“虚拟设备(Virtual Appliance)”的概念,虚拟设备存储在一个映像存储库中,VMControl 可以自动发现映像存储库及其上的所有虚拟设备。虚拟设备可以从多种来源获得,且可以方便的被 VMControl 管理。

有三种方法可以使用 VMControl 来实现虚拟环境的部署:VMControl 的控制台界面,VMControl 的命令行接口以及 REST API 接口。对于应用程序而言,可以调用命令行或 REST API 接口。当前已有的资料对两种接口的描述比较分散,对一些参数的使用解释不太详细,本文根据实践经验说明接口的详细使用,并结合前期的环境准备给出一个完整的虚拟环境搭建过程。


环境准备

PowerVM 环境准备

PowerVM 的基础环境包括:

  • 至少一台 Power 主机作为虚机的物理宿主。
  • 一个 HMC 服务器用于管理多个 Power 主机,并和 Systems Director 进行通信。
  • VIO 服务器用于实现动态分区功能(DLPAR),为虚机提供虚拟的存储和网络资源。

创建虚拟机的 CPU 和内存资源可以直接从主机得到;磁盘存储可以从主机得到,也可以来自于外来存储;网络资源从主机的物理网卡中虚拟出来。VIO 服务器负责存储和网络的虚拟化,下面分别介绍基于 VIO 服务器的存储和网络的环境准备。

  1. 存储环境初始化

    在此介绍一种较为简单的存储虚拟化方式:VIO 服务器通过虚拟的 SCSI 方式将存储映射成逻辑卷分配给不同的虚机。

    在 HMC 界面上,进入到主机的配置目录,展开到“虚拟资源”中的“虚拟存储管理”(virtual storage management),点击进去查询 VIO 服务器。在查询得到的界面中,可以创建存储库和虚拟磁盘。创建存储库如图 1 所示。



    图 1. 创建存储库
    图 1. 创建存储库

    如图 1 所示,我们创建了存储库“lparvg”。此时我们再创建一块虚拟磁盘,如图 2 所示。



    图 2. 创建虚拟磁盘
    图 2. 创建虚拟磁盘

    如图 2 所示,我们创建了一块 20G 大小的名为“tempdisk”的磁盘。此块磁盘即可以作为以后创建虚机时所用的磁盘。

  2. 网络环境初始化

    如果要让创建的虚机能够和 VIO 服务器以及其他虚机进行内部通信,则需要在 VIO 服务器上建立至少一个虚拟局域网(VLAN)。如果虚机还需要同外部网络进行通信,则需要在 VIO 服务器上创建共享网络适配器(SEA)。SEA 和 VLAN 的关系图如图 3 所示。



    图 3. SEA 和 VLAN
    图 3. SEA 和 VLAN

    (1)创建 VLAN 可以在 HMC 界面上进行:

    打开 VIO 服务器的概要文件(Profile)的虚拟适配器页面,或者定位到 VIO 服务器的“动态逻辑分区”的实际虚拟适配器界面上,选择创建“网络适配器”,则出现以下界面如图 4 所示。



    图 4. 创建 VLAN
    图 4. 创建 VLAN

    如图 3 所示,创建 VLAN 时提供 VLAN 的 ID(如果提供的 ID 不是已有的,则会创建一个新的 VLAN),然后选择需要“访问外网”。

    (2)创建 SEA 需要在 VIO 服务器上运行命令:

    $ mkvdev -sea ent0 -vadapter ent1 -default ent1 -defaultid 1

    在运行命令之前,首先需要在 VIO 服务器上创建虚拟以太网适配器 ent1,然后用此命令将 ent1 与物理以太网适配器 ent0 连接起来。

VMControl 环境准备

VMControl 环境准备主要包括将 HMC 所管理的 Power 环境加入到 Systems Director 中,并发现映像存储库和其中的映像。在 IBM Systems Director 和其插件 VMControl 都安装完成后,打开控制台界面,在界面上即可完成这些操作。

  1. HMC 发现

    在 Systems Director 的控制台界面上,定位到“System Discovery”,输入 HMC 的 IP 地址,点击“Discovery Now”,如图 5 所示。



    图 5. HMC 发现
    图 5. HMC 发现


    当发现完成后,会出现 HMC 和其操作系统。输入 HMC 的访问用户名和密码,则 HMC 所管的所有 Power 主机和虚机都会出现在 Systems Director 的资源库里,并以树形方式显示。

  2. 映像发现

    VMControl 需要映像库储存各种操作系统和应用的映像。我们采取 NIM 作为映像存储库。在部署第一个虚机之前,需要准备至少一个映像用于部署。

    发现映像存储器的步骤如下:

    1. 配置 NIM 主机
    2. 在 VMControl 界面上安装代理到 NIM 主机所在的机器
    3. 安装代理成功后,选择发现映像存储器,从而将存储器里面的映像都能显示在虚拟设备列表中。

    映像存储器发现之后,如果里面没有任何虚拟设备,需要准备至少一个虚拟设备。可以采取以下方法获取一个虚拟设备:

    1. 捕获(capture)一个已存在的虚机或者工作负载
    2. 从 NIM 上导入 mksysb 文件或者 lpp_source 文件

使用命令行接口搭建 PowerVM 虚拟环境

利用 VMControl 可以方便地将虚拟设备部署成运行状态的虚拟环境。有两种方式来部署虚拟环境:

(1)用虚拟设备创建一台新的虚机

(2)将虚拟设备部署到已经存在的虚机上

下面详细介绍如何使用命令行来实现这两种方法。

使用虚拟设备直接创建虚机

使用虚拟设备直接创建一台虚机时,VMControl 提供了命令行接口 deployva 。接口 deployva 的参数中要指定将哪个虚拟设备部署到哪个主机上,同时指定虚机的配置参数。具体步骤如下所示。

步骤一:取得虚拟设备的唯一标识号(OID)

 # smcli lsva – o 

通过 lsva 命令得到所有的虚拟设备,加上 -o 参数可以得到虚拟设备的 OID。

步骤二:取得主机的 OID

 #smcli lssys -o -n AUSP5N 

通过 lssys 命令指定主机的名称(AUSP5N),加上 -o 参数来得到主机的 OID。

步骤三:获取可用的存储和网络

 #smcli lscustomization -a deploy_new -V 3648 -s 0xd56 

通过 lscustomization 参数得到可以定制化的参数,尤其是为了得到可用的存储和网络资源。其中 -V 参数指定虚拟设备的 OID,-s 参数指定主机的 OID。 此命令运行结果中,需要注意的有 virtualnetworks 结果和 poolstorages 结果。


Figure xxx. Requires a heading

可以看到已有的虚拟网络是“Network 1”。


Figure xxx. Requires a heading

可以看到已有的存储库有 lparvg 和 rootvg。

步骤四:部署虚拟设备创建虚机,示例代码如清单 1 所示。


清单 1. 部署虚拟设备创建虚机
				 
 smcli deployva -v -s 0xd56 -V 3648 -a deploy_new -A "poolstorages =lparvg:VIOS VIOS, 
 CPUshared=1, CPUmode=SHARED, memsize=1024, memmax=2048, 
 virtualnetworks[Network 1]=hostVnet:ETHERNET0/1, 
 product.AIX1.com.ibm.ovf.vim.2.system.hostname=client2, 
 product.AIX1.com.ibm.ovf.vim.2.system.domainname=ibm.com, 
 product.AIX1.com.ibm.ovf.vim.2.networkport.6.ip=172.16.3.6, 
 product.AIX1.com.ibm.ovf.vim.2.networkport.6.netmask=255.255.240.0, 
 product.AIX1.com.ibm.ovf.vim.2.networkport.6.gateway=172.16.0.1, 
 product.AIX1.com.ibm.ovf.vim.2.networkport.6.dns1.ip=172.16.0.2"

此 deployva 命令,指定 -a 参数为 deploy_new 则是创建虚机,-A 参数中指定了所创虚机的配置参数,包括 CPU、内存大小,磁盘所用的存储库,虚拟网络及 IP 相关参数。此命令运行一般需要几十分钟,运行结束后表示虚机部署完成,部署完成后的虚机磁盘大小将和所用的虚拟设备相同。

在已有虚机上部署虚拟设备

可以选择一个已有的虚机,不管虚机是否已经安装操作系统,部署虚拟设备。如果是还未安装操作系统的虚机(空虚机),则部署完成后虚机将有了和虚拟设备一样的操作系统及应用;如果是已经有了操作系统的虚机,则已有的系统会被新的虚拟设备所覆盖。

本节将先介绍如何创建一个空的虚机,然后在空的虚机上部署虚拟设备。

  1. 创建空虚机

    (1)首先运行命令取得创建空虚机可以定制的参数:

     smcli lsvrtcap -n AUSP5N -c mkvs -A "IBM Power - AIXLINUX"
    

    利用 lsvrtcap 命令用 -n 参数指定主机,-A 参数指定虚机类别来得到在创建空虚机时可以定制的参数。

    此命令的运行结果中需要注意的是 networks、disks:



    Figure xxx. Requires a heading

    可以看到 networks 的 key 值是 1。



    Figure xxx. Requires a heading

    可以看到可用的虚拟磁盘包括 tempdisk 和 lp3vd1.

    (2)在得到可以定制的参数之后,可以运行 mkvs 命令来创建空虚机,如:



    清单 2. 创建空虚机
    				 
     smcli mkvs -A "name=client3, gos=IBM Power - AIXLINUX, CPUshared=2,CPUmode=SHARED, 
     memsize=2048, networks=+1, disks=+tempdisk:lparvg:VIOS" AUSP5N 
    

    命令中指定的 networks 和 disks 即是从上一步骤中得到的可配置参数。创建好的虚机磁盘大小即为指定的虚拟磁盘大小。

    (3)运行命令启动空虚机

     smcli rpower -n "client3" PowerOn 
    

  2. 将虚拟设备部署到空虚机上

    在空虚机创建之后,就可以将虚拟设备部署上去。

    (1)首先运行命令得到可配置参数

    smcli lscustomization -a deploy_existing -V 3648 -s 0x1583
    

    运行 lscustomization 指定类别是 deploy_existing,-V 指定虚拟设备的 OID,-s 指定空虚机的 OID,可用上节所述命令得到这些 OID。

    (2)部署虚拟设备到空虚机上,示例代码如清单 3 所示。



    清单 3. 部署虚拟设备到已有虚机上
    				 
     #smcli deployva -v -s 0x1583 -V 3648 -a deploy_existing -A '
     product.AIX1.com.ibm.ovf.vim.2.system.hostname=client3, 
     product.AIX1.com.ibm.ovf.vim.2.system.domainname=ibm.com, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.ip=172.16.3.7, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.hostname=client3, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.gateway=172.16.0.1, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.netmask=255.255.240.0, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.dns1.ip=172.16.0.2, 
     product.AIX1.com.ibm.ovf.vim.2.networkport.6.domainname=ibm.com'
    

    可以看到将虚拟设备部署到已有虚机上时,命令中主要指定 IP 相关参数即可,因为虚机已经存在,不需要再指定虚机本身的硬件参数如 CPU、内存和磁盘存储等。此命令运行一般也需要几十分钟,待命令结束,登录已有的虚机,将看到新部署的系统环境而非原来的系统。

小结

使用 VMControl 的命令行接口来搭建虚拟环境,方便快捷。可用于测试 VMControl 和 PowerVM 环境是否准备好;同时在一些脚本后台程序中,调用此命令行接口将会比较方便。


使用 REST API 接口搭建 PowerVM 虚拟环境

除掉命令行接口外,VMControl 还提供了 REST API 接口来搭建 PowerVM 虚拟环境。下面将详细介绍如何使用 Java 实现 REST API 接口来创建一个空的虚机,然后在空虚机上部署虚拟设备,从而得到一个完整的可用的虚机。

创建空虚机

如同使用命令行接口一样,创建空虚机需要首先取得主机的 OID,并得到可以定制的虚机属性

步骤一:取得主机的 OID

发送 GET 请求到 /VMControl/hosts 可以得到所有的主机信息,从中得到所需主机的 OID。

步骤二:取得可以定制的虚机属性参数

发送 GET 请求到 /VMControl/hosts/3461/virtualServers/customization,可以得到在主机(OID 为 3461)上创建一个虚机时所能定制的所有属性参数。

步骤三:创建新虚机

发送 POST 请求到 /VMControl/hosts/hostOID/virtualServers 中(其中 hostOID 是步骤一中得到的主机 OID),示例代码如清单 4 所示。


清单 4. 使用 Java 实现 REST API 创建空虚机
				 
 //get SystemsDirectorConnection sdc 
 String uri = 
    sdc.getConnectionContextURI() + "/VMControl/hosts/"+hostOID+"/virtualServers"; 
 String requestBody = "{\"virtualServer\":{\"properties\":[" + 
"{\"name\":\"gos\", \"value\":\"IBM Power - AIXLINUX\"}," + 
"{\"name\":\"name\", \"value\":\""+vmname+"\"}," + 
"{\"name\":\"CPUshared\", \"value\":2}," + 
"{\"name\":\"CPUmode\", \"value\":\"SHARED\"}," + 
"{\"name\":\"memsize\", \"value\":2048}," + 
"{\"name\":\"memunitsize\", \"value\":\"MB\"}," + 
"{\"name\":\"networks\", \"value\":1}," + 
"{\"name\":\"disks\", \"value\":\"tempdisk:lparvg:VIOS\"}" + 
		"]}}"; 
 HttpsURLConnection dataConnection = sdc.processRequest(uri, "POST", requestBody); 
 int rc = dataConnection.getResponseCode();          
 if (rc == 201) {  // OK 
	 System.out.println("success!"); 
 } 

在清单 4 中,hostOID 是主机的 OID,在请求体中传递虚机创建参数:操作系统(gos);CPU 和内存大小;networks 是从步骤二中得到的可选网络的主键;disks 也是从从步骤二中得到的可用的磁盘的主键。向服务器发送此请求后,若返回值是 201,说明请求发送成功,服务器开始按照所传参数创建空虚机。

部署虚拟设备

在虚机创建完成后,将虚拟设备部署到所创建的虚机上。首先取到虚拟设备的 OID 以及所创建虚机的 OID,然后发送 POST 请求到 /VMControl/workloads 来部署虚拟设备。

(1)通过发送 GET 请求到 /VMControl/virtualAppliances 取得所有虚拟设备的信息,从中得到所需虚拟设备的 OID。

(2)通过发送 GET 请求到 /VMControl/hosts/3461/virtualServers 来得到主机(OID 为 3461)上的所有虚机信息,从而得到新创建的虚机的 OID 信息。

(3)部署虚拟设备的示例代码如清单 5 所示。


清单 5. 使用 JAVA 实现 REST API 部署虚拟设备
				 
 //get SystemsDirectorConnection sdc 
 String uri = sdc.getConnectionContextURI() + "/VMControl/workloads"; 
 String response = ""; 
 String requestBody = 
 "{\"workload\":{\"virtualAppliance\":\""+vaOID+"\",\"target\":\""+vmOID+"\"," + 
"\"properties\":[" + 
	"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.system.hostname\", 
 \"value\":\"client1\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.system.domainname\", 
\"value\":\"ibm.com\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.ip\", 
\"value\":\"172.16.3.5\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.hostname\",
\"value\":\"client1\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.gateway\", 
\"value\":\"172.16.0.1\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.netmask\",
 \"value\":\"255.255.240.0\"}," +           		
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.dns1.ip\",
 \"value\":\"172.16.0.2\"}," + 
"{\"name\":\"product.AIX1.com.ibm.ovf.vim.2.networkport.6.domainname\", 
\"value\":\"ibm.com\"}" + 
		"]}}"; 
 HttpsURLConnection dataConnection = sdc.processRequest(uri, "POST", requestBody); 
 int rc = dataConnection.getResponseCode(); 
 if (rc == 201) { 
	 System.out.println("success!"); 
 } 

在清单 5 中,vaOID 是虚拟设备的 OID,vmOID 是新虚机的 OID,在请求体中提供 IP 相关参数,发送请求,即向服务器提交了一个部署虚拟设备的申请。返回值 201 表示申请提交成功,服务器开始部署虚拟设备到请求的虚机上。

小结

使用 REST API 接口来搭建虚拟环境,由于 REST API 的通用性,使得此方法适合于扩展各种已经存在的应用系统。如果你已经有一个相关的应用系统,想使用 VMControl 来管理虚拟环境,那么选用此方法是最合适不过的了。


总结

本文首先介绍了 PowerVM 和 VMControl 的环境准备,然后详细描述了如何使用两种接口——命令行接口和 REST API 接口来实现 PowerVM 虚拟环境的自动化搭建。通过本文可以对 PowerVM 虚拟环境搭建过程有一个整体的了解,同时能了解到 Systems Director VMControl 的两种程序接口的详细调用方法。


参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

作者简介

操牡丹是 IBM 中国软件开发中心工程师,主要从事云服务方案的研究和开发工作。兴趣包括:虚拟化、云服务以及数据分析。

马润生主要从事 ERP 系统的开发工作,非常关注于富客户端解决方案的技术和产品,同时对云计算技术感兴趣。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


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


忘记密码?
更改您的密码

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

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

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

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

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


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

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=783255
ArticleTitle=使用 IBM Systems Director VMControl 实现 PowerVM 虚拟环境的自动化部署
publish-date=12292011

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。