IBM SmartCloud Enterprise 技巧:使用快速部署服务部署产品

基于 Simple Product Installation (SPiN) 这种平台无关的 IBM® 脚本语言,快速部署服务(RDS)让用户能够快速部署产品,减少让专人来安装复杂产品的需求, 减少安装期间出现人为错误的数量。学习如何在 IBM SmartCloud Enterprise 上建立 RDS 资产。

Dominique Vernier, IT 架构师, IBM

/developerworks/i/p-dvernier.jpg最近几年,Dominique Vernier 主要致力于 Java 技术与云架构的相关工作。他还曾在相关公司工作过很久,在那里,他积累了关于消息传递、数据库、SOA、EAI、客户端/服务器、C/C++、以及现有框架等方面广博的知识。Dominique 还对电信、CRM、物流、以及保险等行业领域的知识有深入了解。他是 4 个有关状态引擎和资源管理的专利的拥有者或共同拥有者。目前,Dominique 正在 South-West Europe Cloud Center of Excellence 管理着用于私有或公有解决方案的智慧业务开发与测试云计算。


developerWorks 投稿作者

2011 年 7 月 20 日

快速部署服务 (RDS) 是一种让用户在云平台上部署产品的服务,无论产品是否是虚拟化的。该服务利用了 Simple Product Installation (SPiN) 这种平台无关的 IBM® 脚本语言。借助 RDS,可以在减少专人干预的情况下, 快速部署高度可定制的复杂资产。RDS 的自动功能减少了安装期间出现人为错误的数量。

本文说明了如何在 IBM SmartCloud Enterprise 上定制镜像,使用 RDS 动态安装一台 IBM HTTP 服务器,服务器使用的端口号在实例创建时提供,而不是硬编码在镜像中。一种相似的技术可用于创建其他基于 RDS 安装的镜像。

更多有关在 IBM SmartCloud Enterprise 上定制镜像以便启动脚本(以及如何建立本文所用实例)的信息,请阅读“动态自定义云映像实例的参数一文。

获取 RDS 文件 提供关于所需文件以及文件所在位置的信息。您还需要访问 IBM SmartCloud Enterprise,以测试本文中描述的功能。

基础概念

当您在 IBM SmartCloud Enterprise 上创建镜像时,它保存在 Rational® Asset Catalog 中,作为一项新资产附加在您的账号上。这项资产位于您的私有社区,也就是您的私有目录中。 该资产一旦位于您的目录中,您就可以将它部署到到您的企业社区,并在您的企业目录中使用它。由于这项资产位于 Rational Asset Catalog 中,它又基于 Rational Asset Manager,您可以在这项资产上上传文件或覆盖这项资产的现有文件,这一点类似于 Rational Asset Manager。

在一项标准的 IBM SmartCloud Enterprise 镜像资产中,存在两个主要的文件:

  1. Parameters.xml:此文件包含对应该在实例请求期间出现在请求窗口中的参数的描述。它用于在实例创建期间构建面板。然后,使用实际值将 parameters.xml 文件复制到服务器的 /etc/cloud 的目录中。
  2. Scripts.txt:此文件默认不在资产中,但如果您在资产的激活脚本目录下增加它,它可以用于指示应该将该目录下哪个文件上传到您的实例中。这非常有用,因为它允许您在实例引导的早期阶段将大量文件/脚本上传到实例中。

在这种上下文中,另一个十分有用的文件是 cloud-startupx.sh file。 根据实例的运行级别(level),x 等于 3 或 5。

  • cloud-startup3.sh
  • cloud-startup5.sh

无论您选择哪种运行级别,这个文件都会包含在实例引导时运行的命令,因此可用于运行 RDS。

parameters.xml、scripts.txt 和 cloud-startupx.sh 文件是在引导时构建任意安装过程和使用 RDS 作为安装方法的所有必需工具。

建立 cloud-startupx.sh 文件后,在里面增加一节用于查找文件 parameters.xml.done——在首次 RDS 安装完成之后添加的一个文件。 parameters.xml.done 文件防止 RDS 安装过程在每次引导时都会运行。

在 RDS 的这个例子中,您将在平台上安装一台 IBM HTTP 服务器,并定制该服务器应该监听的端口号。这个例子使用了 SuSE Linux® 11 SP1 平台。

可变或不变任务

可变任务 就是需要参数的任务,因此最好通过参数来处理。本文中的例子包括设置 VNC 密码或创建用户。

不变任务 就是不需要参数的任务(如请求一个操作系统实例),可通过容易和静态的方式完成。

在阅读“动态自定义云映像实例的参数”一文后,您将了解建立镜像有好几种途径,这主要依赖于您对那些任务属于可变和不变的评估。

您可以预先加载最大数量的文件到初始实例中,然后针对未来的实例创建请求使用它可用作基础镜像的镜像。 这样做可以减少在实例创建时上传的数据量,但同时也失去了灵活性。每当您想要修改一个预加载的文件时,都将不得不创建一个新的基础镜像, 这是一个我不敢想象的开发噩梦。

这中间可以找到合适的平衡,但对于这篇概念证明性的文章,我将一个文件上传到 Rational Asset Catalog。如果这是您用例的目的,可以自由预先加载镜像中的 一些文件,但一般的法则是不要预先加载脚本,否则花在镜像上的开发工作将会大量增加。

现在让我们开始。


创建基础镜像

  1. 因为 SuSE 镜像一开始运行在级别 3 上,您必须使用 yast (它使用网络上传安装包)安装 Java 1.6.0,而且不能在引导时这样做。 从普通的 SuSE 平台创建一个实例,然后使用 ssh 连接到它。
  2. 连接之后,运行命令 sudo bash 以获得 root 访问权限,然后运行以下命令来安装 Java™:
    yast2 -install java-1_6_0-ibm

    Java 在运行 RDS 时是必需的,也是惟一的先决条件。
  3. 从这个实例创建一个镜像。基础镜像保存在 My dashboard 下的 Rational Asset Manager 中。
    图 1. 从您的实例创建一个镜像
    从您的实例创建一个镜像

要从 IBM Cloud 门户访问 Rational Asset Manager,在控制面板选项卡上点击 View Asset Catalog

图 2. 访问 Rational Asset Manager
访问 Rational Asset Manager

下载资产

创建镜像后,从 Rational Asset Catalog 中选择资产,并将其下载到本地磁盘上。

图 3. 下载资产
下载资产

建立 parameters.xml

在 parameters.xml 文件中定义服务器应该监听的端口号。修改 parameters.xml 以添加一个字段标签。 添加了端口字段后,parameters.xml 文件看起来应该是这样:

清单 1. parameters.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:noNamespaceSchemaLocation=
 "platform:/resource/com.ibm.ccl.devcloud.client/schema/parameters.xsd">
	<firewall>
		<rule>
			<source>0.0.0.0/0</source>
			<minport>1</minport>
			<maxport>65535</maxport>
		</rule>
	</firewall>
	<field name="webserver-ihs-http-port" label="IHS HTTP Port" type="number">
		<values>
			<value>80</value>
		</values>
	</field>
</parameters>

注意在文件中,field 标签使用 webserver-ihs-http-port 作为名称。 这是 RDS 属性文件中用于定义端口值的变量名称。 使用相同名称让定制 RDS 属性文件变得更加容易。


创建 cloud-startupx.sh 文件

  1. 根据您的实例的运行级别,创建一个 cloud-startup3.sh 或 cloud-startup5.sh 文件。您可以通过在实例的命令提示上输入runlevel 命令来测试运行级别。 定义好运行级别后,您可以将相应的 cloud-startupx.sh 文件复制到本地磁盘上。这些文件位于 /etc/init.d 目录中。
  2. 将这个文件修改为下面这样:
    清单 2. 修改后的 cloud-startupx.sh 文件
    # Required-Stop:
    # Should-Stop:
    # Default-Start:     3
    # Default-Stop:
    # Short-Description: Cloud startup
    # Description:       Extract and set user password
    ### END INIT INFO
    
    case "$1" in
        start)
            echo "== Cloud Starting"
            if [ ! -e /etc/cloud/idcuser_pw_randomized ]; then
                echo "Randomizing idcuser password"
                echo idcuser:`< /dev/urandom tr -dc _A-Z-a-z-0-9 |head -c16` 
                                                                 | /usr/sbin/chpasswd
                touch /etc/cloud/idcuser_pw_randomized
            fi
            if [ ! -e /etc/cloud/parameters.xml.done ]; then
                . /etc/cloud/launchRDS.sh /etc/cloud build-IHS.sh
                cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done
            fi
            ;;
        stop)
            echo "== Cloud Stopping"
           ;;
        *)
            echo "Usage: $0 {start|stop}"
            exit 1
            ;;
    esac
    
    #Attach Dynamic disk
    modprobe acpiphp

    增加的代码:

            if [ ! -e /etc/cloud/parameters.xml.done ]; then
                . /etc/cloud/launchRDS.sh /etc/cloud build-IHS.sh
                cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done
            fi

    增加的代码用于检查 parameters.xml.done 文件是否存在,因为如果这个文件已经存在,意味着 RDS 安装已经完成,不应该再次安装。 如果 parameters.xml.done 文件不存在,通过 launchRDS.sh 文件运行 RDS 安装,然后创建 parameters.xml.done 文件。


运行 RDS 安装

  1. 在运行 SPiN 之前,您必须运行一些其他的命令,但我们将 SPiN 调用 和这些命令放在同一个脚本 (launchRDS.txt) 中:
    清单 3. SPiN 调用与其他必需的命令
    #准备 SpiN 包
    tar --directory=$1 -xvf $1/ihs.tar
    cp $1/7.0.0.7-WS-UPDI-LinuxIA32.tar $1/spinPackage2/software/was/v7/maint
    cp $1/7.0.0-WS-IHS-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint
    cp $1/7.0.0-WS-PLG-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint
    cp $1/7.0.0-WS-WASSDK-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint
    cp $1/C1G32ML.tar $1/spinPackage2/software/was/v7/nd
    cp $1/C1G33ML.tar $1/spinPackage2/software/was/v7/nd
    
    #创建 wasadm 组
    groupadd wasadm
    
    #添加目录
    mkdir -p $1/spinPackage2/software/WebSphere/Plugins
    touch $1/spinPackage2/software/WebSphere/Plugins/empty.txt
    
    #修改 Spin 属性文件
    echo "Adapt props"
    perl $1/replaceProperty.pl 
         $1/spinPackage2/custom-spin/RDSDemo-WebSphere-V7-ND-ihsOnly.props
           webserver-ihs-http-port
    
    #开始安装
    echo "Start install"
    cd $1/spinPackage2
    ./$2
    
    #设置防火墙
    cp /etc/sysconfig/SuSEfirewall2 /etc/sysconfig/SuSEfirewall2.bak
    /sbin/SuSEfirewall2 stop
    perl $1/replace.pl $1/SuSEfirewall2 webserver-ihs-http-port
    cp $1/SuSEfirewall2 /etc/sysconfig/SuSEfirewall2
    /sbin/SuSEfirewall2 start
  2. 在第一阶段中,解压缩包含 SPiN 脚本的 ihs.tar 文件,然后将所有安装包复制到 SPiN 的特定目录中。
  3. 调用一个 perl 脚本。此脚本的作用是使用 parameters.xml 文件中提供的值来设置 webserver-ihs-http-port 变量。
    清单 4. replaceProperty.txt
    #!/user/bin/perl 
    use strict; 
    use warnings; 
    my $cmd=""; 
    if(-e $ARGV[0]) 
    { 
        $cmd = "cp $ARGV[0] $ARGV[0].bak"; 
        `$cmd`; 
    } 
    else 
    { 
        print "File does not exist.\n"; 
        exit; 
    } 
    
    my @result =`perl /usr/bin/extract-parameters.pl $ARGV[1]
     /etc/cloud/parameters.xml`; 
    chomp(@result); 
    open(INPUT,"$ARGV[0].bak") or die "Cannot open file: $!\n"; 
    open(OUTPUT,">$ARGV[0]"); 
    
    while(<INPUT>){ 
        $_ =~ s/^$ARGV[1]=.*/$ARGV[1]=@result/g; 
        print $_; 
        print OUTPUT $_; 
    } 
    
    close INPUT; 
    close OUTPUT;
  4. 以上完成之后,调用 SPiN 安装并最终在防火墙中打开端口。

这是基本的安装:所有脚本均在 ihs.tar 文件中提供,除了 SPiN 脚本和 IBM HTTP Server 组装。(参见 获取 RDS 文件 以了解在哪里可以找到这些文件的信息。)


上传脚本到 Rational Asset Catalog

阅读“动态自定义云映像实例的参数”中提供的文档,了解如何在资产中上传文件。

修改后的 parameters.xml 文件被上传到并列出在资产内容的根目录中,如下所示:

图 4. 上传 parameters.xml 文件
上传 parameters.xml 文件

activation_scripts 目录中的其他文件如 RDS 资产、脚本、组装文件和修复补丁也列了出来。

图 5. 上传其他文件
上传其他文件

创建一个实例

要创建一个实例:

  1. 从您的私有目录中选择镜像。
    图 6. 选择镜像
    选择镜像
  2. 提供名称和密钥。
    图 7. 提供名称和密钥
    提供名称和键
  3. 输入端口号。
    图 8. 输入端口号
    输入端口号
  4. 同意提交.

提交请求需要花费一些时间,因为供应引擎必须从 RAM 上传资产,而资产包含所有的组装文件。 您可以通过使用指定端口访问指定 IP 地址上的 HTTP 服务器来进行测试。

整个过程到此结束。


获取 RDS 文件

了解关于RDS 的更多信息。

RDS 的 产品库 中已经存在大量产品安装资产。 可以根据客户需求来定制这些资产。

必要的 IBM HTTP Server eAssembly 文件和 RDS 包资产只能在有许可证的情况下交付。您可以从 Extreme-leverage and RDS 下载 eAssembly 文件。

本文演示了概念验证:使用 RDS 安装产品和加速镜像创建过程。如果您有愿意应用这种方法的商业案例,请 联系 RDS 团队。 他们将向您说明如何在自动配置环节中交付 RDS。

参考资料

学习

获得产品和技术

  • 参见 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
ArticleID=742200
ArticleTitle=IBM SmartCloud Enterprise 技巧:使用快速部署服务部署产品
publish-date=07202011