在IBM PureApplication System中自动缩放虚拟系统模式实例

    技术2024-07-12  71

    虚拟系统模式(VSP)模型将云工作负载定义为中间件映像的拓扑。 VSP中间件工作负载拓扑可以具有一个或多个虚拟映像,这些映像称为部分。 工作负载模型中的每个部分都可以配置为静态扩展。 在部署时,IBM Pure Application System(以下称为PureApplication System)将基于部件上的缩放设置创建由多个虚拟机(VSP实例VM节点)组成的VSP实例。 该VSP模型不支持基于缩放政策自动缩放。

    缩略语
    VSP :虚拟系统模式 VAP :虚拟应用程序模式 VM :虚拟机

    本文介绍了如何构建虚拟应用程序模式(VAP)模式类型,该类型用作扩展管理器,以便根据用户定义的策略动态添加和删除VSP实例VM节点。 本文假定您知道如何使用VAP插件开发工具包(VAP PDK)来构建VAP模式类型和插件,并且您熟悉VAP缩放框架。 有关VAP伸缩框架的更多信息,请参阅IBM PureApplication System中虚拟应用程序模式的可伸缩性和弹性 。

    创建VAP模式类型以自动缩放VSP实例

    以下各节说明如何创建“ VSP Scaling Manager” VAP模式类型。 此VAP模式类型充当管理器,并驱动VSP实例VM节点的自动缩放。 该技术利用了VAP监视和策略框架以及VSP Clone API。 构建此模式类型涉及以下步骤:

    创建VAP应用程序模型元数据以捕获VSP实例详细信息。 创建策略对象以定义扩展策略。 创建拓扑模板以将应用程序模型转换为拓扑文档。 创建监视元模型和监视脚本以监视VSP实例。 创建VM节点扩展脚本的VSP实例。

    用例

    在本文中,我们将使用WebSphere集群VSP作为自动扩展的目标VSP。 如图1所示,WebSphere集群VSP由一个Deployment Manager部分,一个定制节点部分和一个IBM HTTP Server部分组成。 在以下部分中,您将看到如何根据系统的CPU使用量自动缩放自定义节点部分。 您可以使用此技术基于任何用户定义的缩放指标来缩放任何VSP零件。

    图1. WebSphere集群VSP

    步骤1:创建VAP应用程序模型元数据

    要扩展VSP实例的VM节点,您需要以下用户输入:

    VSP实例名称 VSP节点部件名称 访问正在运行的实例所需的用户凭据 执行VSP命令行API(部署程序命令行API)所需的用户凭据

    需要VSP实例名称和VSP节点部件名称才能唯一标识要缩放的资产。 在我们的WebSphere集群VSP用例中,VSP节点部件名称的值是定制节点,而VSP实例名称的值是已部署的WebSphere集群VSP实例的实例名称。 需要使用实例用户凭据才能在要扩展的VM上执行监视脚本(使用ssh)。 需要运行部署者用户凭据才能运行API以根据监视的值添加或删除VM。

    您可以使用VAP组件对象属性从用户那里获得所需的输入。 使用VAP应用程序模型元数据对组件对象属性进行建模。 清单1显示了应用程序模型元数据。 图2显示了虚拟应用程序构建器中显示的这些属性。

    清单1. VSP Scaling Manager属性元模型(metadata.json)
    { "id": "vsyscloning", "type": "component", "label": "VSys Scaling Manager", "description": "Example for cloning a virtual system", "image": "appmodel\/images\/demoapp.png", "thumbnail": "appmodel\/images\/thumbnail\/demoappl.png", "attributes": [ { "id": "CLONENODE", "type": "string", "required": true, "label": "Virtual System Node", }, { "id": "CLONEVSYS", "type": "string", "required": true, "label": "Virtual System Instance Name", }, { "id": "VSYSPASS", "type": "string", "required": true, "label": "Virtual System password", "displayType": "password" }, { "id": "DEPHOST", "type": "string", "required": true, "label": "Deployer Host Name", }, { "id": "DEPUSER", "type": "string", "required": true, "label": "Deployer User Id", }, { "id": "DEPPASS", "type": "string", "required": true, "label": "Deployer password", "displayType": "password" } ] }
    图2. VSP Scaling Manager属性

    步骤2:创建策略对象以定义扩展策略

    您将使用VAP策略框架创建VSP自动扩展策略。 VAP策略框架使您可以使用VAP应用程序模型元数据定义策略对象。 有关如何使用VAP应用程序模型元数据定义策略的更多详细信息,请参阅IBM PureApplication System中虚拟应用程序模式的可伸缩性和弹性 。

    清单2显示了基于CPU的扩展的策略对象定义。 图3显示了虚拟应用程序构建器中显示的策略。 使用图3所示的策略界面,用户可以创建一个缩放策略,以基于VM CPU使用率来缩放VSP实例VM节点。 默认策略定义(如图3所示)指示系统在CPU使用率大于80%时放大,而在CPU使用率小于10%时缩小。

    在我们的WebSphere集群VSP用例中,如果所有定制节点VM的CPU使用率大于80%,则此缩放策略将放大定制节点VM。 如果所有自定义节点VM的CPU使用率小于10%,则按比例缩小。

    清单2. VSP Scaling Manager CPU扩展策略对象元模型(metadata.json)
    { "id": "ScalingPolicyofVSys", "label": "VSys Scaling Policy", "type": "policy", "applicableTo": [ "vsyscloning" ], "thumbnail": "appmodel/images/thumbnail/ClusterPolicy.png", "image": "appmodel/images/ClusterPolicy.png", "description": "VSys scaling policy", "groups": [ { "category":"Scaling Type", "id":"CPUVsys", "label":"CPU Based", "defaultValue":true, "attributes":[ "cpuVsys", "scaleInstanceRange1", "triggerTime1", ... ], } ], "attributes": [ { "id": "triggerTime1", "label": "Minimum time (sec) to trigger add/remove", "type": "number", "max": 1800, "min": 30, "required": true, "sampleValue": 120, ... }, { "id": "scaleInstanceRange1", "label": "Instance number range of scaling in/out", "type": "range", "min": 1, "max": 10, "required": true, "sampleValue": [ 1, 10 ], ... }, { "id":"cpuVsys", "label":"Scaling in/out when average CPU usage of clustered members is out of threshold range(#)", "type":"range", "displayType": "percentage", "required":true, "max":100, "min":1, "sampleValue":[ 10, 80 ], ... } ] }
    图3. VSP Scaling Manager CPU扩展策略

    步骤3:创建拓扑模板以将应用程序模型转换为拓扑文档

    PureApplication System IaaS层使用拓扑文档创建VAP实例。 拓扑文档是根据应用程序模型构建的。 该模型是在使用虚拟应用程序构建器创建VAP时由PureApplication System在后台创建的。 您将使用清单3中所示的速度模板将“ VSP Scaling Manager” VAP应用程序模型转换为拓扑文档。 清单3中显示的模板使用以下参数值创建一个名为“ clone”的角色:VSP实例详细信息(通过步骤1捕获)和策略定义(通过步骤2捕获)。 参数值将在“ VSP Scaling Manager” VAP生命周期脚本中使用,以驱动VSP实例缩放。

    清单3. VSP Scaling Manager拓扑模板(vsyscloning.vm)
    { #set($spattrs = $provider.getPolicyAttributes($component, "ScalingPolicyofVSys")) "vm-templates": [ { "persistent":false, "name": "${prefix}-clone", "roles": [ { "parms": { "DEPHOST":"$attributes.DEPHOST", "DEPUSER":"$attributes.DEPUSER", "DEPPASS":"$attributes.DEPPASS", "CLONENODE":"$attributes.CLONENODE", "CLONEVSYS":"$attributes.CLONEVSYS", "VSYSPASS":"$attributes.VSYSPASS", #if_value( $spattrs, "scaleInstanceRange1", '"MININST": $spattrs.scaleInstanceRange1.get(0),') #if_value( $spattrs, "scaleInstanceRange1", '"MAXINST": $spattrs.scaleInstanceRange1.get(1),') #if_value( $spattrs, "cpuVsys", '"MINCPU": $spattrs.cpuVsys.get(0),') #if_value( $spattrs, "cpuVsys", '"MAXCPU": $spattrs.cpuVsys.get(1),') #if_value( $spattrs, "triggerTime1", '"triggerTime": $spattrs.triggerTime1,') "isCloned": "FALSE" }, "type": "SClone", "name": "clone" } ], "packages": ["SClone"] } ] }

    步骤4:创建监视元模型和脚本

    在此步骤中,您将创建必要的资产以监视VSP实例VM节点。 根据监视的值,您将触发缩放策略中定义的VSP实例VM节点缩放。 您将使用VAP监视框架监视VSP实例VM节点。 VAP监视框架触发监视的指标的收集并在VAP控制台中显示监视的指标。 为此,VAP监视器框架希望VAP插件提供以下功能:

    用于定义度量标准数据的度量标准元数据(清单4显示了CPU使用率度量标准的度量标准元数据)。 用于从VSP实例VM节点收集指标的脚本(请参阅提供的代码示例中的cpuutil.sh)。 指标元数据和收集脚本注册代码。 清单5显示了将资产注册到框架的maestro API调用。 指标显示元数据以图形方式显示收集的指标。 清单6显示了用于显示VSP实例VM节点CPU指标的显示元数据。
    清单4. VSP CPU指标的指标元数据(cpuvsyscollector.json)
    { "version":1, "update_interval": 60, "category":[ "cpuvsys" ], "metadata":[ { "cpuvsys":{ "update_interval":60, "metrics":[ { "attribute_name":"cpuVsys", "metric_name":"cpuVsys", "metric_type":"COUNTER" } ] } } ] }
    清单5.注册指标收集器(configure.py)
    #Register cpu vsys collector maestro.monitorAgent.register('{\ "node":"%s",\ "role":"%s",\ "collector":"com.ibm.maestro.monitor.collector.script",\ "config":{\ "metafile":"/home/virtuser/collectors/cpuvsyscollector.json",\ "executable":"/home/virtuser/collectors/cpuutil.sh",\ "arguments":"%s",\ "validRC":"0",\ "workdir":"/tmp",\ "timeout":"120"}}' % (nodeName,roleName,arguments));
    清单6.监控器指标显示元数据(monitoring_ui.json)
    [ { "version":2, "category":"cpuvsys", "label":"CPU Usage", "displayRoles": ["SClone"], "displays":[ { "label":"CPU Usage of Virtual System Instance Node", "monitorType":"HistoricalNumber", "chartType":"Lines", "metrics":[ { "attributeName":"cpuVsys", "label":"Used Percentage" } ] } ] } ]

    缩放和监视脚本

    在本节中,我们将深入介绍监视和扩展脚本(请参阅提供的代码示例中的cpuutil.sh)。 该脚本执行以下任务:

    该脚本检索VSP实例VM节点的CPU利用率。 在我们的用例中,脚本获取WebSphere VSP定制节点实例的CPU利用率。 如果检索到的值大于策略中指定的值,则将创建新的VSP实例VM节点,直到达到策略中定义的最大值。 在我们的用例中,如果定制节点实例的CPU使用率大于80,那么将创建新的WebSphere VSP定制节点,直到存在10个这样的节点。 如果检索到的值小于策略中指定的值,则将删除除策略中指定的最小数目以外的所有节点。 在我们使用的情况下,如果自定义节点实例CPU使用率低于10,所有除两个WebSphere VSP定制节点,将被删除。 最后,脚本将度量标准数据返回到VAP监视框架,以显示在部署控制台中。

    该脚本由监视框架定期触发。 触发间隔基于监视器元数据中定义的update_interval参数值(请参见清单4 )。 在此脚本中,我们实质上是通过短接VAP监视框架来触发VSP实例VM节点上的扩展。 在下一节中,您将看到如何使用VSP克隆和删除API添加或删除VSP实例VM节点。

    步骤5:创建VSP实例VM节点扩展脚本

    您将使用Python脚本添加或删除VSP实例VM节点。 Python脚本由监视脚本cpuutil.sh使用PureApplication System部署程序命令行实用程序触发。 清单7和清单8显示了添加VSP实例VM节点并删除VSP实例VM节点的Python脚本。 这些脚本使用VSP虚拟系统对象,虚拟机对象及其克隆。 他们还删除了用于放大和缩小VSP实例VM节点的方法。

    清单7.添加新的VSP部件VM的脚本
    #This python script is used to clone one new node (of type cloneNode) #belonging to Vsys instance cloneVSys. #No new node will be created if max is reached. import os import sys cloneNode=sys.argv[1] cloneVSys=sys.argv[2] max=sys.argv[3] #function to check if the maximum clone limit is reached def isMax(max, system, cloneNode): current=0 vms=system.virtualmachines for vm in vms: vmpartname= vm.patternpart.partCaption vmstatus = vm.currentstatus if(vmpartname == cloneNode and vmstatus == "RM01006"): current+=1 if(current < max): return "False" else: return "True" #Get the input virtual system instance. allsystems=deployer.virtualsystems.list({'name':cloneVSys}) found='False' for system in allsystems: vsysname=system.name vsysstatus = system.currentstatus print "SysName:" + vsysname + " SysStatus:" + vsysstatus if(vsysstatus == "RM01006" or vsysstatus == "RM01070"): #Get all the running virtual machines vms=system.virtualmachines for vm in vms: vmpartname= vm.patternpart.partCaption vmstatus = vm.currentstatus print "VMName:" + vmpartname + " VMStatus:" + vmstatus if(vmpartname == cloneNode and vmstatus == "RM01006"): found='True' #If max limit not reached then clone. isMaximum = isMax(int(max), system, cloneNode) if(isMaximum == 'False'): print "Clone started" vm.clone() break if(found=='True'): break
    清单8.删除VSP部件VM的脚本
    #This python script is used to release all the nodes (of type cloneNode) #belonging to Vsys instance cloneVSys. #No nodes are released if min specified is reached. import os import sys cloneNode=sys.argv[1] cloneVSys=sys.argv[2] min=int(sys.argv[3]) #Check if minimum number of nodes reached. def isMin(min, system, cloneNode): current=0 vms=system.virtualmachines for vm in vms: vmpartname= vm.patternpart.partCaption vmstatus = vm.currentstatus if(vmpartname == cloneNode and vmstatus == "RM01006"): current+=1 if(current > min): return "False" else: return "True" #Get the input virtual system instance. allsystems=deployer.virtualsystems.list({'name':cloneVSys}) found='False' for system in allsystems: vsysname=system.name vsysstatus = system.currentstatus print "SysName:" + vsysname + " SysStatus:" + vsysstatus if(vsysstatus == "RM01006" or vsysstatus == "RM01070"): #Get all the running virtual machines vms=system.virtualmachines for vm in vms: vmpartname= vm.patternpart.partCaption vmstatus = vm.currentstatus print "VMName:" + vmpartname + " VMStatus:" + vmstatus if(vmpartname == cloneNode and vmstatus == "RM01006"): found='True' #Delete till minimum specified is reached. isMinimum = isMin(int(min), system, cloneNode) if(isMinimum == 'True'): break else: print "delete started" vm.delete() if(found=='True'): break

    在以上五个步骤中,您基本上执行了以下操作:

    使用VAP策略对象定义用户定义的扩展策略。 使用VAP监视框架触发VSP实例VM监视,并基于监视的指标触发VSP实例VM的动态自动扩展。 使用VSP命令API提供的克隆和删除方法来创建新的VSP实例VM节点或删除现有的VSP实例VM节点。

    测试用例

    在本部分中,您将看到如何测试WebSphere Cluster定制节点扩展用例。 为了测试用例,首先需要创建WebSphere Cluster VSP的实例。 图4显示了WebSphere Cluster VSP实例。 您还必须创建VAP模式类型来驱动VSP缩放。 本文随附的示例代码具有VAP模式类型(vsysscalingmgr),您可以将其导入PureApplication System环境中以驱动VSP扩展。 导入后,您可以使用虚拟应用程序构建器创建新的VAP并部署新创建的VAP。

    图4. WebSphere Cluster VSP实例

    图5显示了虚拟应用程序构建器中的WebSphere Cluster Scaling Manager VAP。

    图5. WebSphere Cluster Scaling Manager模式

    部署模式后,可以使用以下步骤模拟缩放:

    登录到Deployment Manager控制台。 在现有节点上创建新服务器,然后在该节点上执行完全重新同步或执行某些其他操作,从而增加自定义节点上的CPU利用率。 或者,您可以通过取消注释监视脚本cpuutil.sh中清单9中所示的行的注释来对VSP实例自定义节点的伸缩进行单元测试。 这将为脚本中的后续任务提供一个虚拟值85作为CPU使用率。 要缩小比例,您可以注释掉未注释的行。
    清单9.取消注释的行以测试VSP Scaling Manager模式
    cpuval=$(ssh -i $DIR_NAME/key -o StrictHostKeyChecking=no $ADMIN_NAME@$i "top -b -d1 -n2 | grep -i \"Cpu(s)\" | cut -d ',' -f1 | awk '{print \$2}' | cut -d '%' -f1 | sed -n 2p") #To unit test clone un-comment the following line. After cloning to unit-test delete #comment this line. #cpuval=85 #end unit test un-comment echo "cpu value is "$cpuval >> /home/virtuser/collectors/scaling.log

    图6显示了VAP控制台中的监视用户界面。 这将显示VSP实例节点自定义节点的CPU使用率。 请注意,当使用清单9中描述的方法对模式类型进行单元测试时,图形会飙升至85%,然后回落至2%。

    图6.虚拟系统实例节点的CPU使用率

    图7显示了自定义节点实例的添加。 当所有定制节点实例的CPU使用率超过80%时,将创建新的WebSphere VSP定制节点,直到达到最多10个节点为止。 当所有自定义节点实例的CPU使用率降至10%以下时,将删除除两个自定义节点实例之外的所有实例。

    图7. WebSphere VSP定制节点缩放

    结论

    在本文中,您学习了如何创建VAP模式类型以驱动用户定义的VAP实例VM节点的自动缩放。 使用此技术,您可以使用用户定义的扩展策略自动扩展VSP实例VM节点,而对VSP的更改很少或没有更改。 此外,您可以使用VAP仪表板监视VSP实例指标。 该技术的缺点是要求用户输入VSP实例VM的用户凭据,并且只有有权使用VSP实例的PureApplication System用户才能部署VAP Scaling Manager实例。 否则,部署者CLI将无权添加或删除节点。


    翻译自: https://www.ibm.com/developerworks/cloud/library/cl-ps-aim1310-autoscaling/index.html

    相关资源:专家系统CLips案例源码
    Processed: 0.009, SQL: 9