全部产品
Search
文档中心

系统运维管理:批量管理自定义扩展程序

更新时间:Dec 17, 2024

通过OOS批量管理软件,除了可安装阿里云Agent或软件包管理工具的软件,也支持安装自定义扩展程序。自定义扩展程序支持以rpm、deb、msi等为后缀的常规软件包,通过维护自定义扩展程序,您可高效管理各类平台及架构的软件,本文将详细介绍下创建和批量管理自定义软件的操作方法。

准备工作

  1. 创建ECS实例,且该实例的网络类型为专有网络

    具体操作,请参见自定义购买实例。安装或卸载自定义扩展程序,仅支持在专有网络下进行,请确认已创建的ECS实例的网络类型为专有网络

    确认网络类型为专有网络

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择实例与镜像 > 实例

    3. 找到待安装软件的ECS实例,在对应网络类型列下,确认该实例的网络类型是专有网络

  2. 创建RAM角色并授予给ECS实例。

    具体操作,请参见创建RAM角色并授予给ECS实例。需注意以下参数选择:

    1. 创建自定义权限策略。

      具体操作,请参见创建自定义权限策略。ECS实例被授予的RAM角色所拥有的权限需包含如下JSON中的权限策略。

      权限策略JSON脚本

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "oos:GetTemplate"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "oss:GetObject",
                      "oss:GetBucketAcl"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
              }
          ]
      }
    2. 创建RAM角色。

      具体操作,请参见创建普通服务角色。需注意以下参数选择:

      • 可信实体类型:选择阿里云服务

      • 角色类型:选择普通服务角色

      • 受信服务:选择云服务器

    3. 为已创建的RAM角色授权。

      为RAM角色新增授权时,权限策略选择2.a 创建自定义权限策略中的已设置好的自定义策略。具体操作,请参见为RAM角色授权

    4. 为ECS实例授予RAM角色。

      RAM角色选择上步骤中已创建并授权的RAM角色。具体操作,请参见创建RAM角色并授予给ECS实例

  3. 创建用于存储自定义扩展程序的OSS Bucket。

    具体操作,请参见创建存储空间。其中,选择地域时,您需要下拉选择有地域属性,然后指定与OOS相同的地域。

创建自定义扩展程序

  1. 登录OOS控制台

  2. 在左侧导航栏,选择服务器管理 > 扩展程序,然后单击自定义扩展程序页签。

  3. 单击创建自定义扩展程序,根据页面提示填写基本信息,单击下一步

    自定义扩展程序仅自己可见,可供自身账号进行扩展程序的安装或卸载。主要参数项说明如下:

    参数项

    说明

    扩展程序分类

    表示扩展程序所属的类型,您可以根据业务需要选择归属于驱动类型、性能加速类型、代理类型以及应用类型。

    版本描述

    首次创建时的版本自动标识为V1。创建完成之后,您可以在扩展程序详情页看到版本编号以及版本的详细信息。

    说明

    您需要通过更新扩展程序功能对该扩展程序进行修改,更新时系统会自动生成V2版本,以此类推。

    扩展程序支持范围

    用于限定该扩展程序的适用条件,包括支持的实例规格族、镜像类别和操作系统平台/版本。设置该项后,用户在ECS售卖页、ECS实例详情页安装扩展程序时,会根据适用条件进行判断,仅能够选择可用的扩展程序。

    命令参数

    指定该扩展程序命令的入参,支持添加多个参数。参数类型可选择字符串、数值型和布尔值,支持定义参数名称、默认值、参数描述等信息。设定安装命令参数后,用户在ECS售卖页、ECS实例详情页安装扩展程序时,需要为该参数赋值。

  4. 扩展程序配置阶段,根据页面提示配置相关参数。

    说明

    您可以添加多个扩展程序配置,在后续安装扩展程序时,系统会寻找到符合ECS操作系统和架构的扩展程序,并下载对应的软件包,执行相应的安装/卸载脚本,从而实现一键安装扩展程序。

    脚本.png

    其中,安装执行脚本卸载执行脚本示例如下:

    • 安装执行脚本示例

      #!/bin/bash
      #######  单进程软件包安装脚本模板说明  #########
      #1. 此脚本默认在根路径下执行 Linux系统默认为 /root
      #2. 脚本安装软件执行成功后默认会删除远程下载的路径
      #3. 用户自定义实现建议在job_start下
      #4. 需遵循进程ID的存储约束,软件包进程ID标识需存储到指定路径
      
      #######  error code specification  #########
      # Please update this documentation if new error code is added.
      # 1   => install fail
      # 2   => check health fail
      # 3   => record process id fail
      # 4   => user shell fail
      
      function user_shell() {
          #用户自定义安装脚本 START
          $nohup java -jar demo-1.0.0-SNAPSHOT.jar > /demo.log 2>&1 &
          #用户自定义安装脚本 END
      }
      
      ##### 可在脚本开始运行时调用,打印当时的时间戳及PID,同时记录软件包进程ID到指定路径。
      function job_start() {
          user_shell
          if [ $? -ne 0 ]; then
              exit4
          else
              # 此处约束禁止删除
              now=$(date +'%Y-%m-%d %H:%M:%S')
              pid=$!
              echo "[$now][$pid] job_start"
              pidPath="/etc/aliyun"
              if [ ! -d $pidPath ]; then
                  mkdir -p /etc/aliyun
                  echo "创建PID存储路径 $pidPath"
              fi
              echo "$pid" > "$pidPath/main_process_id"
              if [ $? -ne 0 ]; then
                  exit3
              fi
          fi
      }
      
      ##### 在此函数中检查服务是否起来,可以是检查进程,curl http地址等方式
      function check_health() {
          now=$(date +'%Y-%m-%d %H:%M:%S')
          echo "[$now][$$] check_health"
      }
      
      function exit1() {
        echo "exit code 1, install fail"
        exit 1
      }
      
      function exit2() {
        echo "exit code 2, check health fail"
        exit 2
      }
      
      function exit3() {
        echo "exit code 3, record process id fail"
        exit 3
      }
      
      function exit4() {
        echo "exit code 4, user shell fail"
        exit 4
      }
      
      
      ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败
      function main() {
          job_start
          if [ $? -ne 0 ]; then
              exit1
          fi
          check_health
          if [ $? -ne 0 ]; then
              exit2
          fi
      }
      
      ##### 触发执行日志由OOS自动记录
      main
    • 卸载执行脚本示例

      #!/bin/bash
      ##### 可在脚本开始运行时调用,打印当时的时间戳及PID。
      function job_stop() {
          pid=$(cat /etc/aliyun/main_process_id)
          kill -9 $pid
          now=`date +'%Y-%m-%d %H:%M:%S'`
          echo "[$now][$pid] job_stop"
      }
      
      job_stop
      if [ $? -ne 0 ]; then
          echo "[$now][$$] job stop failed."
          exit 1
      fi
  5. 单击创建

    创建完成后,您可以在自定义扩展程序页签下,查看到已创建的自定义扩展程序。

    我的软件.png

安装自定义扩展程序

  1. 登录OOS控制台

  2. 在左侧导航栏,选择自定义任务 > 常用运维任务 > 批量管理软件,然后单击创建

  3. 新建批量管理软件任务页面,按照页面提示配置相关参数,单击创建

    • 操作内容选择安装

    • 扩展程序名称选择自定义扩展程序,并选择待安装的自定义扩展程序名称。

    • 选择实例选择手动选择实例方式,并在实例列表中选择需要安装自定义扩展程序的ECS实例,请确保该ECS的网络类型为VPC。

  4. 在弹出的参数确认对话框,确认参数无误后,单击确定创建执行。

    创建成功后,您可在任务执行管理页面下的任务列表中查看自定义扩展程序已安装。

    任务执行管理.png

卸载自定义扩展程序

  1. 登录OOS控制台

  2. 在左侧导航栏,选择自定义任务 > 常用运维任务 > 批量管理软件,然后单击创建

  3. 新建批量管理软件任务页面,按照页面提示配置相关参数,单击创建

    • 操作内容选择卸载

    • 扩展程序名称选择自定义扩展程序,并选择待卸载的自定义扩展程序名称。

    • 选择实例选择手动选择实例方式,并在实例列表中选择需要卸载自定义扩展程序的ECS实例。

  4. 在弹出的参数确认对话框,确认参数无误后,单击确定创建执行。

    创建成功后,您可在任务执行管理页面下的任务列表中查看自定义扩展程序已成功卸载。

    任务执行管理.png