制作加速镜像

本文介绍开启自动伸缩的集群,通过制作加速镜像的方式,缩短从作业提交到作业运行的时间耗时较久的问题。

背景介绍

针对自动伸缩集群中作业从提交到运行耗时较长的问题,分析发现主要原因为伸缩决策和伸缩动作耗时较长。

为优化这一问题,提出通过制作加速镜像的方式,将Python环境和其他依赖包的下载安装过程提前在镜像中完成,从而缩短节点启动和作业运行时间。

前提条件

  • 目前仅支持杭州地域。

  • 集群状态处于运行中

  • 升级集群客户端(ehpcutil)版本为2.0.47及以上版本。

    说明

    单击目标集群进入集群配置详情页,可查看并执行升级操作以更新至最新版本;若无升级选项,则当前版本已是最新版本。

操作步骤

步骤一:创建实例

  1. 前往实例购买页,选择自定义购买页签,需满足如下要求。更多内容,请参见自定义购买实例

    • 付费模式选择按量付费

    • 实例选择X86_64架构。

    • 镜像选择CentOS 7 系列镜像。

    • 公网 IP勾选分配公网 IPv4 地址

    • 安全组选择集群所使用的安全组。

  2. 单击确认下单,完成实例创建。

步骤二:安装环境

  1. 实例状态显示运行中后,远程连接已创建的ECS计算节点实例。具体操作,请参见使用Workbench终端连接登录Linux实例(SSH)

  2. 下载安装python环境,包括python2 env、python3.9、python3.9 env。

    1. root目录下,创建install_python.sh的安装脚本。

      #!/bin/bash
      
      PYTHON_INSTALL_ROOT=/usr/local/py3.9env
      SERVICE_INSTALL_ROOT=/usr/local/ehpc_service
      
      mkdir $PYTHON_INSTALL_ROOT
      
      set -e
      
      arch=`arch`
      srcEnvPath=$1  # Pass this as an argument when calling the script
      #py3=$2  # Pass this as an argument (0 or 1) to decide which Python version to install
      
      pythonenv="python3.9env"
      echo "Downloading and extracting Python 3.9.10 for ${arch}..."
      wget -c -nv ${srcEnvPath}/python3.9.10.$arch.tgz -O - | tar -xz -C /usr/local/py3.9env/
      echo "Downloading and extracting ${pythonenv} for ${arch}..."
      curl -s -O ${srcEnvPath}/${pythonenv}.$arch.tgz
      if [ -d /usr/local/py3.9env/${pythonenv} ]; then
        rm -rf /usr/local/py3.9env/${pythonenv}
      fi
      tar -xzf ${pythonenv}.$arch.tgz -C /usr/local/py3.9env/
      
      echo "Downloading and extracting Python 2.7 environment..."
      curl -s -O ${srcEnvPath}/centos/7.2/python2.7env.tgz
      if [ -d /usr/local/python2.7env ]; then
        rm -rf /usr/local/python2.7env
      fi
      tar -xzf python2.7env.tgz -C /usr/local/
    2. 给脚本添加运行权限。

      chmod +x install_python.sh
    3. 执行该脚本,进行下载安装。

      bash /root/install_python.sh http://public-ehs.vpc100-oss-cn-hangzhou.aliyuncs.com/packages/env
    4. 检查在/usr/local/目录下存在 py3.9env 和 python2.7env 目录,则安装成功。

  3. 下载安装node.js以及其他依赖包。

    1. root目录下,创建下载安装脚本install_lib.sh

      #!/bin/bash
      
      set -e
      arch=`arch`  # Pass this as an argument when calling the script
      srcEnvPath=$1  # Pass this as an argument when calling the script
      
      # echo "Installing Node.js for aarch64..."
      # curl -s -O $srcEnvPath/node-v16.17.1-linux-arm64.tar.xz
      # tar -xf node-v16.17.1-linux-arm64.tar.xz
      # mv node-v16.17.1-linux-arm64 /usr/local/node-v16.17.1-linux-arm64
      # ln -sfT /usr/local/node-v16.17.1-linux-arm64/bin/node /usr/local/bin/node
      # ln -sfT /usr/local/node-v16.17.1-linux-arm64/bin/npm /usr/local/bin/npm
      
      echo "Installing Node.js for x86_64..."
      curl -s -O $srcEnvPath/node-v6.11.1-linux-x64.tar.gz
      tar -xzf node-v6.11.1-linux-x64.tar.gz
      mv node-v6.11.1-linux-x64 /usr/local/node-v6.11.1
      ln -sfT /usr/local/node-v6.11.1/bin/node /usr/local/bin/node
      ln -sfT /usr/local/node-v6.11.1/bin/npm /usr/local/bin/npm
      
      echo "Installing additional libraries..."
      yum clean all && yum makecache
      yum install -y perf postgresql-contrib hwloc-devel jsoncpp-devel libcurl-devel nfs-utils cifs-utils environment-modules unzip jq
      
      echo "Appending module path..."
      echo -e "\nexport MODULEPATH=/opt/ehpcmodulefiles" >> /etc/bashrc
      
      kernel_version="$(uname -r)"
      kernel_devel_pkg="kernel-devel-${kernel_version}"
      base_os="7"
      kernel_devel_remote_repo="http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/rpm/driver/${base_os}/x86_64"
      
      rpm -q "${kernel_devel_pkg}" || yum install -y "${kernel_devel_pkg}"
      
      
      echo "Installing xdragon-health-protector..."
      xdragon_pkg="xdragon-health-protector-vm-1.0.x86_64.rpm"
      curl -s -O $srcEnvPath/${xdragon_pkg}
      yum install -y ${xdragon_pkg}
      systemctl enable xdragon-health-protector
      systemctl restart xdragon-health-protector
      systemctl status xdragon-health-protector
    2. 给脚本添加运行权限。

      chmod +x install_lib.sh
    3. 运行安装脚本。执行以下命令,显示状态为running则安装成功。

      bash /root/install_libs.sh http://public-ehs.vpc100-oss-cn-hangzhou.aliyuncs.com/packages/env 

      image

步骤三:制作镜像

  1. 访问ECS控制台-实例,进入实例详情页面。

  2. 单击创建自定义镜像,完成制作加速镜像。

    image

步骤四:配置集群自动伸缩

  1. 登录弹性高性能计算控制台。单击目标集群名称,进入集群详情页面。

  2. 在左侧导航栏,选择节点与队列 > 队列,单击目标队列操作列下的编辑

  3. 编辑队列页面,完成实例规格组的参数配置。更多内容,请参见自动伸缩节点

    1. 单击添加实例规格,选择节点的规格。

    2. 单击自定义镜像,选择制作的加速镜像。

      image

    3. 单击确认

  4. 单击保存,完成配置集群自动伸缩。