本文介绍开启自动伸缩的集群,通过制作加速镜像的方式,缩短从作业提交到作业运行的时间耗时较久的问题。
背景介绍
针对自动伸缩集群中作业从提交到运行耗时较长的问题,分析发现主要原因为伸缩决策和伸缩动作耗时较长。
为优化这一问题,提出通过制作加速镜像的方式,将Python环境和其他依赖包的下载安装过程提前在镜像中完成,从而缩短节点启动和作业运行时间。
前提条件
目前仅支持杭州地域。
集群状态处于运行中。
升级集群客户端(ehpcutil)版本为
2.0.47
及以上版本。说明单击目标集群进入集群配置详情页,可查看并执行升级操作以更新至最新版本;若无升级选项,则当前版本已是最新版本。
操作步骤
步骤一:创建实例
步骤二:安装环境
实例状态显示运行中后,远程连接已创建的ECS计算节点实例。具体操作,请参见使用Workbench终端连接登录Linux实例(SSH)。
下载安装python环境,包括python2 env、python3.9、python3.9 env。
在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/
给脚本添加运行权限。
chmod +x install_python.sh
执行该脚本,进行下载安装。
bash /root/install_python.sh http://public-ehs.vpc100-oss-cn-hangzhou.aliyuncs.com/packages/env
检查在
/usr/local/
目录下存在 py3.9env 和 python2.7env 目录,则安装成功。
下载安装node.js以及其他依赖包。
在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
给脚本添加运行权限。
chmod +x install_lib.sh
运行安装脚本。执行以下命令,显示状态为
running
则安装成功。bash /root/install_libs.sh http://public-ehs.vpc100-oss-cn-hangzhou.aliyuncs.com/packages/env
步骤三:制作镜像
访问ECS控制台-实例,进入实例详情页面。
单击创建自定义镜像,完成制作加速镜像。
步骤四:配置集群自动伸缩
登录弹性高性能计算控制台。单击目标集群名称,进入集群详情页面。
在左侧导航栏,选择
,单击目标队列操作列下的编辑。在编辑队列页面,完成实例规格组的参数配置。更多内容,请参见自动伸缩节点。
单击添加实例规格,选择节点的规格。
单击自定义镜像,选择制作的加速镜像。
单击确认。
单击保存,完成配置集群自动伸缩。